LINUX.ORG.RU

Android File Transfer for Linux

 ,


7

5

Наверняка многие из вас используют MTP, наверняка кто-то успешно, но может быть у кого-то (как у меня) всё время случаются недокачанные файлы, пропавшие тэги, отсутствие обложек, обрывы соединения, зависания, отключения устройства, жуткие тормоза, замедление закачки при закачивании целых каталогов. Это всё из-за печально известной libmtp. Меня такое положение дел давно не устраивало и я написал свой MTP клиент, на c++11, с референсной реализацией модели для Qt.

Минимальный ui, создание папки, закачка папки, закачка альбома (с автоматической подборкой и установкой картинки). Никаких fuse, libmtp, libptp, только libusb и Qt, только хардкор.

Очень жду фидбека и хотелок в тракере github, обещаю пилить, так как постоянно использую сам.

>>> Исходный код на github

Ответ на: комментарий от derlafff

Ты говоришь обратное реальности. Так как раскочегар syncthing занимает значительное и константное время (надо проиндексировать 50ГБ да еще и со всеми остальными устройствами поболтать), то для мелочи можно быстро достать кабель и быстро скопировать. А вот если ты вдруг осознал, что там, куда ты едешь, тебе нужно несколько сотен мегов данных, то две несложные асинхронные операции — поставить их копироваться в синхронизируемую директорию, включить syncthing на телефоне и спокойно выехать — задержат тебя на ничтожно малое, да еще и константное время. Шнур же тебя буквально приклеит к компу на «линейное» время.

А ты пишешь какой-то бред. Или у тебя два девайса, 100 мегов данных и syncthing раскукливается за 5 секунд? Только так можно обогнать syncthing'ом кабель. Ну или держать syncthing все время включенным, но это не для моего девайса, за рабочий день включенного syncthing через 4G он садится процентов на 70-80.

t184256 ★★★★★ ()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от Evgueni

С Pocket PC тоже шел кусок говна. Но без него никак. Даже синхронизация контактов только через эту прокладку было. Кряхтели, но пользовались. К счастью те времена прошли и люди стали понимать - тянуть говно в систему не лучшее решение.

andreyu ★★★★★ ()
Ответ на: комментарий от Evgueni

Я молчу что делает с пользователями Apple, а они только облизываются и просят добавки. Так что это не объяснение.

Это особенные пользователи.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Вроде в ffs.

Сейчас никто не использует ffs. контроллер флеша достаточно умен чтобы самостоятельно распределять нагрузку на блоки.

/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0                                                      
/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 rw,seclabel,nosuid,nodev,noatime,nomblk_io_submit,noauto_da_alloc,errors=panic,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/cache /cache ext4 rw,seclabel,nosuid,nodev,noatime,nomblk_io_submit,noauto_da_alloc,errors=panic,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/persist /persist ext4 rw,seclabel,nosuid,nodev,relatime,nomblk_io_submit,nodelalloc,errors=panic,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/modem /firmware vfat ro,context=u:object_r:firmware_file:s0,relatime,uid=1000,gid=1000,fmask=0337,dmask=0227,codepage=cp437,iocharset=iso8859-1,shortname=lower,errors=remount-ro 0 0
/dev/fuse /mnt/shell/emulated fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0

А еще на новых нексусах есть шифрование данных и полноценная поддержка нескольких пользователей. такие фичи позволяют гуглу выйти на корпоративный сегмент рынка. а вот наличие раздела с fat32 и ums никак не сочетается ни с тем ни с другим.

pftBest ★★★★ ()
Ответ на: комментарий от Nebulosa

btsync больше не канает. С 2.0 только 10 синхронизационных ключей, протокол, похоже, так и не откроют, политика монетизации какая-то сомнительная, то что обещают не выполняется.

vasaka ★★★ ()
Ответ на: комментарий от AVL2

Беспарольный шелл через usb, это ерунда?

Только с компа, авторизованного для отладки.

Axon ★★★★★ ()
Ответ на: комментарий от wd

а заодно обсиранием тех кто пришел ко мне с андроидом, который не умеет изображать из себя правильную флешку

судя по треду, проблема глобальная. странно, даже не знал. у меня китаепланшет за полторы тыщи подключается по юсб как обычный mass storage, копируй - не хочу. а тут, оказывается, вона как...

PerdunJamesBond ()
Ответ на: комментарий от andreyu

И каким боком это к mtp?

В том что реальный мир - это не сферические пони в вакууме.

anonymous ()
Ответ на: комментарий от PerdunJamesBond

проблема тушите свет, почитайте соседние старые темы ещё (внизу страницы лор предлагает по ключевым словам), я просто отчаялся хоть что-то закачать на КАЗАЛОСЬ БЫ гугловый экс-флагман (nexus 5), даже при помощи libmtp, jmtpfs, mtpfs и прочего. Пришлось писать самому.

whoozle ()
Ответ на: комментарий от Jetty

Ну да, ляпнуть херню, а потом сказать что оппонент обосрался. Вы просто подтвердили свое бесполезное балабольство.

andreyu ★★★★★ ()
Ответ на: комментарий от Jetty

иииии почему же нельзя?

а самому подумать?
1) один раздел: чтобы пробросить его по ums его нужно отмонтировать, но это сделать нельзя потому что на нем находится вся система и она рухнет от такого нахальства.
2) ну допустим мы сделаем два раздела, на одном данные приложений на другом данные пользователя. в какую fs его форматировать? точно не в ext4 потому что виндузятники сразу пошлют на три буквы.
3) так уж и быть, выберем fat32 (попутно отбашляв мелкомягким круглую сумму за лицензию), как теперь разделить доступ к данным на этом разделе для разных учетных записей пользователей? fat32 ничего не знает про права доступа. в итоге из под одного пользователя будут видны фоточки сделаные другим юзером, непорядок.
4) как ко всему этому прикрутить полное шифрование данных?

pftBest ★★★★ ()

Программа умеет работать с русскими именами?

Переносит ли программа файлы только на планшет или с планшета тоже?

Поддерживает ли программа qt4?

Можно ли сделать, чтобы сообщение об ошибке «This file(s) will trigger the bug in libusb...» выводилось в таком виджете, чтобы можно было выделить команду echo и скопировать в буфер обмена?

Можно ли заставить программу запоминать размеры диалогов «Open»?

Можно ли в основном окне показывать текущую директорию на устройстве?

Общие выводы: пользоваться не смог. Закачиваемые файлы на устройстве не появляются. В консоли выводится следующее:

uploading file  "/home/user/films/Day Break Season 1 Complete/Day.Break.S01E01.HDTV.XviD-XOR.avi" 
uploadFile  "Day.Break.S01E01.HDTV.XviD-XOR.avi"  as  "Day.Break.S01E01.HDTV.XviD-XOR.avi" 
sending  366090328  bytes 
uploading file  "/home/user/films/Day Break Season 1 Complete/Day.Break.S01E01.HDTV.XviD-XOR.avi"  failed:  SendObjectInfo: invalid response code NoValidObjectInfo (0x2015) 

question4 ★★★★★ ()
Ответ на: комментарий от question4

Можно ли в основном окне показывать текущую директорию на устройстве?

Точнее, не только содержимое, но и имя директории.

question4 ★★★★★ ()
Ответ на: комментарий от whoozle

проблема тушите свет, почитайте соседние старые темы ещё (внизу страницы лор предлагает по ключевым словам), я просто отчаялся хоть что-то закачать на КАЗАЛОСЬ БЫ гугловый экс-флагман (nexus 5), даже при помощи libmtp, jmtpfs, mtpfs и прочего. Пришлось писать самому.

кардридер, не? или нужна именно внутренняя память?
в чем вообще прикол этого mtp, это опять копирасты придумали для борьбы с пользователями? и чтоб данные загружали только через какой-нибудь гугол-клауд, чтоб большой брат мог посмотреть?

PerdunJamesBond ()
Ответ на: комментарий от andreyu

Я доказал свою правоту квотой из гугловых доков. А ты обосрался,не потому что неправ, а потому что не готов признать что ошибся и продолжаешь глубже залазить в одно место. Вот в том-то и дело.

Jetty ★★★★★ ()
Ответ на: комментарий от pftBest

Непойму, зачем зачем нужно полностью размонтировать раздел для его «пробрасывания». Разве нельзя просто мулять? Я ж надеюсь ты не думаешь что ЮСБ контроллер напрямую считывает данные с еММЦ?

Jetty ★★★★★ ()
Последнее исправление: Jetty (всего исправлений: 1)
Ответ на: комментарий от Jetty

Я доказал свою правоту квотой из гугловых доков.

Что именно вы доказали той цитатой? Если балабол вставит цитату в качестве ответа, то он так и останется балаболом.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Вот твоя фраза:

Заявленные/удаленные фичи привязаны к версии андроеда. То, что всякие кастомы и говнопроизводители делают сами - это их личная инициатива.

Я опроверг твою точку зрения, и в качестве подтверждения добавил квоту из соответствующего документа.
UMS поддерживается андроидом с давних времен и по сей день, в том числе в версии Андроид 5.1.
Но, вероятно, ты обладатель говнодевайса под брендом Nexus - поэтому исходишь на говно, т.к. у любого «хуавея» эта фича по умолчанию включена, а вот у тебя - нет.

Jetty ★★★★★ ()
Ответ на: комментарий от Jetty

А теперь покажите, где в моей фразе противоречие с вашей цитатой?

поэтому исходишь на говно

Походу на говно изошли тут только вы, пытаясь опустить нехус чтобы ваш девайс не выглядел тем говном, которым он является.

andreyu ★★★★★ ()
Ответ на: комментарий от Myau

В некоммерческих целях ЕМНИП лицензия не запрещает.

А если друг за файлы пиво пообщал? Не, так не пойдет :)

goingUp ★★★★★ ()
Ответ на: комментарий от Jetty

1) тебе придется эмулировать ВСЕ: таблицу разделов, файловую систему, сектора, блоки. такое делали только в академических целях и работает оно в разы медленнее и глючнее чем MTP.
2) Конечно напрямую, через ядро, по DMA. В сегодняшних телефонах usb phy это не отдельный контроллер а часть SoC, и управляет им ядро, которое и назначает откуда читать и куда писать.

pftBest ★★★★ ()
Ответ на: комментарий от Jetty

UMS нужен только если в телефоне есть слот для SD, если такого слота нет, как в нексусах, то и UMS быть не должно.
Это как говорить что автомобиль под брендом Tesla - говно потому что в нем нет бензобака, хотя даже в любой ладе эта фича есть по умолчанию. :)

pftBest ★★★★ ()
Ответ на: комментарий от pftBest

Конечно напрямую, через ядро, по DMA.

Сорри, ты не понимаешь о чем пишешь. Не вижу смысла вести диалог далее.

Jetty ★★★★★ ()
Ответ на: комментарий от Jetty

да, все верно, я не ошибся. единственное что делает код на джаве котороый ты привел задает т.н. backing file path, который будет указывать на блочное устройсво соответствующее тому разделу который нужно прокинуть. все остальное происходит в ядре в модуле f_mass_storage.c который с одной стороны читает/пишет по DMA bulk-in/bulk-out endpoint ы, а с другой стороны вызывает функции ядра vfs_read/vfs_write которые читают/пишут в заданный файл. а т.к. этот файл указывает на блочное устройство, то чтение/запись напрямую идет в page cache который ядро заполняет/сбрасывает на eMMC по DMA. так что все происходит напрямую в ядре и пользовательский код в этом не учавствует. более подробно можно прочитать в файле mass-storage.txt.

В теории конечно можно указать не на блочное устройство а на какой-нибудь fuse, но при этом сразу потеряешь в произволительности на переключения контекста и перекопирование буферов.

pftBest ★★★★ ()
Ответ на: комментарий от pftBest

public static final String
единственное что делает код на джаве котороый ты привел задает т.н. backing file path

Ничего он не делает, это константа...

В теории конечно можно указать не на блочное устройство а на какой-нибудь fuse...

Именно так и есть.

P.S. И пожалуйста, не ставь равенство между фразами

ЮСБ контроллер напрямую считывает данные с еММЦ

и

в ядре в модуле f_mass_storage.c который с одной стороны читает/пишет по DMA bulk-in/bulk-out endpoint ы, а с другой стороны вызывает функции ядра vfs_read/vfs_write которые читают/пишут в заданный файл. а т.к. этот файл указывает на блочное устройство, то чтение/запись напрямую идет в page cache который ядро заполняет/сбрасывает на eMMC по DMA. Можно указать не на блочное устройство а на какой-нибудь fuse

Jetty ★★★★★ ()
Ответ на: комментарий от Jetty

Ничего он не делает, это константа...

прчем тут константы, я говорил про метод setMassStorageBackingFile

Именно так и есть.

Именно так и нет, назови мне хотя-бы один телефон где UMS работает не с блочным устройством, а через FUSE. нет такого на планете земля ;)

И пожалуйста, не ставь равенство между фразами

я и не ставил равенство, я написал

Конечно напрямую, через ядро, по DMA.

где слово 'напрямую' означает не то о чем ты подумал а то что

все происходит напрямую в ядре и пользовательский код в этом не учавствует

pftBest ★★★★ ()
Ответ на: комментарий от Jetty

И вообще я FUSE упомянул только потому что подумал как бы я реализовывал эмуляцию MassStorage минимальными усилиями, и в итоге пришел к тому чтобы воспользоваться FUSE котрый бы отдавал один единственный виртуальный файл, на который потом указать backing file path. получится то что запросы на чтение/запись UMS будут приходить в процесс-демон в котором уже можно творить всякую чернь вроде эмуляции FAT32 и не боятся покрешить ядро.

и тут мне говорят что все именно так и есть, и я не знаю о чем говорю :)

pftBest ★★★★ ()

это опять тот анонимус с телефоном который не фурычит...

последний вариант говорит

в окошке

_fd, USBDEVFS_CLAIMINTERFACE, &interfaceNumber: Устройство или ресурс занято

в консольке

upload worker started 
Object::connect: No such signal FileUploaderWorker::progress(qlonglong)

anonymous ()
Ответ на: комментарий от Jetty

у меня нехус :-)))) Но не только он :-)

Мы сейчас меряемся длиной члена? :)
Ну ок, у меня тоже не только нексусы, но и пачка девайсов от других модных и не очень производителей. Только к теме это не имеет отношения.

andreyu ★★★★★ ()
Ответ на: комментарий от question4

Русские умеет, скачивать умеет, qt4 умеет, qt5 умеет, libusb больше не нужен, ничего в системе менять больше не надо. Что такое «текущая директория»? :) Про размеры диалогов разберусь, может быть qt умеет сохранять их геометрию. (создал issue) Не могли бы вы взять текущую ревизию из git и проверить?

whoozle ()
Ответ на: комментарий от whoozle

qt4 умеет

При компиляции с qt4 выдавало ошибки об отсутствии чего-то специфичного для qt5, но собралось и работало. Или делало вид — ничего так и не скачалось.

Что такое «текущая директория»?

На диске устройства — сложная древовидная структура. И я хочу знать, из какой директории будет скачиваться файл по нажатию кнопки — /storage/extSdCard/html/ или /storage/sdcard0/html/

Не могли бы вы взять текущую ревизию из git и проверить?

Не раньше выходных. Настольная линуксовая машина недоступна из-за ремонта пола.

question4 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.