Невозможно выполнить файловые операции на устройстве MTP, подключенном через GVFS: «Операция не поддерживается»

13

Я использую 64-битную версию Linux Mint 17.1 (на основе Ubuntu 14.04). После обновления с Linux Mint 14 / Ubuntu 12.10 скрипт Python, который я использую для синхронизации музыки с Walkman, перестал работать.

Ранее, когда я монтировал свой Walkman, он автоматически отображался как путь /run/user/1000/gvfs/WALKMAN/Storage Mediaи работал как любая другая файловая система: я мог копировать дорожки в него, удалять дорожки из него и т. Д. Через Python. Однако я не могу вспомнить, пришлось ли мне вносить какие-либо изменения, чтобы это произошло.

После обновления до Linux Mint 17 (и теперь 17.1), когда я монтирую Walkman, он отображается как путь /run/user/1000/gvfs/mtp:host=%5Busb%3A002%2C007%5D/Storage Media. Кроме того, когда я пытаюсь запустить те же файловые операции, они теперь терпят неудачу. Я обнаружил, что это происходит не только через Python, но и в командной строке. Например:

david@MILTON:~$ cp '/data/Music/10SecsWhiteNoise.mp3' '/run/user/1000/gvfs/mtp:host=%5Busb%3A002%2C006%5D/Storage Media/MUSIC'
cp: cannot create regular file ‘/run/user/1000/gvfs/mtp:host=%5Busb%3A002%2C006%5D/Storage Media/MUSIC/10SecsWhiteNoise.mp3’: Operation not supported

Я провел некоторое исследование по этой проблеме, но наиболее распространенным объяснением является то, что она была ранее решена этим PPA: https://launchpad.net/~langdalepl/+archive/ubuntu/gvfs-mtp

Но теперь версии Ubuntu начиная с 13.10 содержат все эти изменения, так что в этом больше нет необходимости. Итак, почему у меня все еще есть эти ошибки? Я все еще могу выполнять файловые операции на своем Walkman через графический файловый менеджер (Caja, в Linux Mint), но не через командную строку.

Дэвид Питчфорд
источник
Я думаю, что это может помочь вам: github.com/hanwen/go-mtpfs
PersianGulf
Мое устройство уже монтируется как MTP ... это не проблема.
Дэвид Питчфорд

Ответы:

15

Предположение: теперь вы используете MTP для доступа к Walkman, а MTP - отстой.

Детали

Operation not supportedОшибка может означать , что ваш Walkman использует реализацию MTP , который не поддерживает «прямой» доступ. Согласно http://intr.overt.org/blog/?p=174 этот вид прямого доступа является расширением для Android, поэтому он, вероятно, не поддерживается вашим Walkman.

В результате вы можете использовать только несколько выбранных способов доступа к файлам на Walkman с помощью MTP: я полагаю, что все, что читает или записывает файлы в одной операции, поддерживается, в то время как доступ к выбранным частям файла не поддерживается для этих реализаций MTP. , И кажется, что cpи Python всегда использует последний метод доступа и, следовательно, терпит неудачу.

Возможное решение

Тем не менее, вы можете просто заменить cpна gvfs-copy. В моих тестах с телефоном Samsung Android (который также имеет ограниченную реализацию MTP) gvfs-copyудалось скопировать файлы на телефон, где произошел cpсбой.

Фон

Я не мог найти много информации об этих зависимых от устройства ограничениях MTP; Вот некоторые фрагменты, в которых ситуация объясняется несколько:

/ubuntu//a/284831 https://bugs.launchpad.net/ubuntu/+source/gvfs/+bug/1389001/comments/2 https://bugs.launchpad.net/ubuntu/+source / GVFS / + ошибка / 1157583 / комментарии / 1

Почему это работало раньше?

Что касается того, почему ваш Walkman был доступен cpв Mint 14, а не в Mint 17, это может быть вызвано внутренним переключением с PTP на MTP в качестве системы доступа. По крайней мере, это то, что я заметил для устройства Samsung при переходе с Ubuntu 12.04 на 14.04. Телефон поддерживает как PTP, так и MTP, но Ubuntu 12.04, очевидно, поддерживает только PTP; так вот что использовалось. Поскольку новая версия Ubuntu имеет встроенную поддержку MTP, теперь она используется вместо этого.

На самом деле это может быть даже случай, когда ваш Walkman ранее был доступен как USB Mass Storage Device , что и используется жесткими дисками USB и флэш-накопителями. Возможно, по какой-то причине Linux (или ваш Walkman) решил, что MTP предпочтительнее, чем доступ к Mass Storage.

Вы можете увидеть используемый метод доступа, посмотрев URL для Walkman (в Nautilus перейдите в папку Walkman, нажмите Ctrl + L и посмотрите на адресную строку): для MTP устройство находится, например, под. mtp://[usb:001,004]/в то время как для PTP это что-то вроде gphoto2://[usb:001,004]/store_00010001. Для доступа к Mass Storage URL-адрес является просто обычным путем /media/WALKMAN.

Я не знаю, имеет ли MTP какие-либо реальные преимущества по сравнению с PTP или Mass Storage, или можно ли переключиться обратно на PTP или Mass Storage. В Linux обе реализации MTP и PTP имеют свой собственный набор ошибок, поэтому, в зависимости от вашего варианта использования, какой из них лучше. AFAIK Mass Storage является наиболее желательным вариантом для пользователя, но поддержка устройств в телефонах уменьшается.

Оливер
источник
2
Спасибо, что познакомили меня с gvfs-copy. Однако, это большой облом, он не копирует каталоги рекурсивно. Есть ли другой, я могу сделать это рекурсивно?
TuxForLife
1
также gvfs-copyне работает для меня лучше, чем обычно cp. И в моем случае тот же телефон работал в прошлом над MTP. Некоторые телефоны работают, а некоторые нет. Все по MTP (как я выбираю вариант подключения MTP в меню телефона). обновление: обнаружена проблема. Пытался скопировать с карты на память телефона. Сначала мне пришлось скопировать в локальную файловую систему (например, / tmp), а затем скопировать в память телефона. Похоже, прямое копирование mtp-> mtp не работает (пока).
akostadinov
Ни gvfs-copy, ни gvfs-move у меня тоже не сработали. Используя Caja 1.8.2, я смог переместить их с помощью графического интерфейса, а затем удалить файлы.
Жюльен Ламарш
2

Чтобы получить доступ к своему мобильному телефону, мне пришлось установить mtp-сервер через менеджер пакетов Synaptic на моем Linux Mint 17.1 Mate. Мой предыдущий Linux Mint 17 Mate не требовал от меня установки mtp-сервера, мой мобильный телефон распознавался автоматически при подключении через USB-порт. Может быть, эта информация поможет.

Скотт
источник
Вы имеете в виду через командную строку? Как я уже сказал, я все еще могу получить к нему доступ через файловый менеджер GUI.
Дэвид Питчфорд
Каха отвечает на мои потребности, поэтому я не могу помочь вам с командной строкой.
Скотт
Спасибо, Скотт. Ваш ответ помог мне Kon 'mtp://[usb:003,029]/' niet weergeven. Fout: The name :1.1813 was not provided by any .service files Kies een andere weergavemethode en probeer het opnieuw.исправить это сообщение об ошибке: И мое устройство Adroid не подключалось через MTP при установке Mint 17. Вероятно, после обновления 17.1. apt-get install mtp-serverрешил мою проблему. Это для других искателей с этой проблемой может помочь им, как это помогло мне.
2

Я столкнулся с этой проблемой на Ubuntu 16.04 и Samsung Galaxy SIII, подключенных в режиме MTP.

Используя предложение Оливера использовать gvfs-copy, копирование напрямую с моего NAS на телефон не работает (как и Nautilus). Это обходной путь для возможной ошибки в gvfs-copy.

gvfs-copy '/run/user/1000/gvfs/smb-share:server=n2100,share=public/Music/The Story of Funk-1.mp2' '/run/user/1000/gvfs/mtp:host=%5Busb%3A001%2C005%5D/Card/Music/Radio/'
Error copying file /run/user/1000/gvfs/smb-share:server=n2100,share=public/Music/The Story of Funk-1.mp2: Operation unsupported

Также не было формата альтернативного пути, предложенного man-страницей:

gvfs-copy 'smb://n2100/public/Music/The Story of Funk-1.mp2' 'mtp://[usb:001,005]/Card/Music/Radio'
Error copying file smb://n2100/public/Music/The Story of Funk-1.mp2: Operation unsupported

Копирование файла сначала в локальную папку, однако, сработало. {Спасибо akostadinov} (как и Наутилус).

gvfs-copy '/home/nigel/The Story of Funk-1.mp2' 'mtp://[usb:001,005]/Card/Music/Radio'
Найджел Винтерботтом
источник
1

На Debian gvfs-copyу gvfs-binменя работает Джесси из пакета .

$ dpkg -S $(which gvfs-copy)
gvfs-bin: /usr/bin/gvfs-copy
$ dpkg -l gvfs-bin |tail -1
ii  gvfs-bin       1.22.2-1     amd64        userspace virtual filesystem - binaries
user1338062
источник
0

Вы можете попробовать использовать rsync для синхронизации с вашим устройством, хотя при передаче MTP вы обычно не можете установить время и дату для каждого файла. Чтобы ускорить передачу, вы должны использовать опцию --size-only для rsync, а не опцию -t. Я считаю, что проще всего изменить каталог в каталог mtp, например / run / user / 1000 / gvfs / mtp: host = blahblah / blah / blah, а затем запустить:

rsync -n -vlr --size-only --delete /source/of/files/ ./

Опция -n - выполнить пробный прогон. Просто удалите эту опцию, если вы удовлетворены результатами.

Эрик Соколовский
источник