Не вдається виконати файлові операції на пристрої 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

Я провів декілька досліджень цієї проблеми, але, як видається, найпоширенішим поясненням є те, що вона раніше була вирішена цим ППА: https://launchpad.net/~langdalepl/+archive/ubuntu/gvfs-mtp

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


Я думаю , що це може допомогти вам: github.com/hanwen/go-mtpfs
Перську затоку

Мій пристрій вже монтується як 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. У моїх тестах із телефону Android від Samsung (який також має каліку 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-накопичувача , саме для цього використовуються жорсткі диски USB та флешки. Можливо, чомусь Linux (або ваш Walkman) вирішили, що MTP кращий перед масовим зберіганням.

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

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


2
Дякуємо, що познайомили мене з gvfs-copy. Однак це величезний об'єм, який не копіює каталоги рекурсивно. Чи є інший, я можу це зробити рекурсивно?
TuxForLife

1
також gvfs-copyне працює для мене краще, ніж зазвичай cp. І в моєму випадку той самий телефон працював у минулому над MTP. Деякі телефони працюють, а деякі ні зараз. По всьому MTP (коли я вибираю опцію підключення MTP в меню телефону). оновлення: знайдено проблему. Спробували скопіювати з картки на зберігання телефону. Я повинен був скопіювати спочатку в локальну файлову систему (наприклад, / tmp), а потім скопіювати у сховище телефону. Схоже, пряма копія mtp-> mtp не працює (поки що).
акостадінов

Ні gvfs-copy, ні gvfs-move не працювали для мене. Використовуючи Caja 1.8.2, я зміг перемістити їх за допомогою графічного інтерфейсу, а потім видалити файли.
Жульєн Ламарш

2

Щоб отримати доступ до свого мобільного телефону, мені довелося встановити mtp-сервер через Synaptic Package Manager на моєму Linux Mint 17.1 Mate. Мій попередній Linux Mint 17 Mate не вимагав від мене установки mtp-сервера, мій мобільний телефон розпізнавався автоматично при підключенні через usb-порт. Можливо, ця інформація допоможе.


Ви маєте на увазі через командний рядок? Як я вже говорив, я все ще можу отримати доступ до нього через диспетчер файлів GUI.
Девід Пітфорд

Caja відповідає на мої потреби, тому я не можу вам допомогти з командним рядком.
Скотт

Дякую, Скотт. Ваша відповідь допомогла мені вирішити це повідомлення про помилку: 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-копію, копіювання безпосередньо з мого 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

Ні альтернативний формат шляху, запропонований manpage:

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

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

gvfs-copy '/home/nigel/The Story of Funk-1.mp2' 'mtp://[usb:001,005]/Card/Music/Radio'

1

На Дебіана Джессі, 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

0

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

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

Варіант -n полягає у виконанні сухого ходу. Просто видаліть цю опцію, якщо ви задоволені результатами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.