Nie można wykonać operacji na plikach na urządzeniu MTP zamontowanym przez GVFS: „Operacja nie jest obsługiwana”

13

Używam Linux Mint 17.1 64-bit (oparty na Ubuntu 14.04). Od czasu aktualizacji z wersji Linux Mint 14 / Ubuntu 12.10 skrypt Pythona, którego używam do synchronizacji muzyki z odtwarzaczem Walkman, przestał działać.

Poprzednio, kiedy montowałem odtwarzacz Walkman, automatycznie pojawiał się jako ścieżka /run/user/1000/gvfs/WALKMAN/Storage Mediai działał jak każdy inny system plików: mogłem kopiować do niego ścieżki, usuwać z niego itp., Wszystko przez Python. Jednak nie pamiętam, czy musiałem wprowadzić jakieś zmiany, aby tak się stało.

Od czasu aktualizacji do wersji Linux Mint 17 (a teraz 17.1), kiedy montuję odtwarzacz Walkman, pojawia się on jako ścieżka /run/user/1000/gvfs/mtp:host=%5Busb%3A002%2C007%5D/Storage Media. Ponadto, gdy próbuję uruchomić te same operacje na plikach, nie udaje im się to. Odkryłem, że dzieje się to nie tylko przez Python, ale także w wierszu poleceń. Na przykład:

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

Przeprowadziłem badania dotyczące tego problemu, ale najczęstszym wyjaśnieniem wydaje się być to, że został on wcześniej rozwiązany przez tę umowę PPA: https://launchpad.net/~langdalepl/+archive/ubuntu/gvfs-mtp

Ale teraz wersje Ubuntu od 13.10 zawierają wszystkie te zmiany, więc nie powinno być już konieczne. Dlaczego więc nadal mam te błędy? Nadal jestem w stanie wykonywać operacje na plikach na moim odtwarzaczu Walkman za pomocą graficznego menedżera plików (Caja, w Linux Mint), ale nie za pomocą wiersza poleceń.

David Pitchford
źródło
Myślę, że może ci to pomóc: github.com/hanwen/go-mtpfs
PersianGulf
Moje urządzenie jest już montowane jako MTP ... to nie jest problem.
David Pitchford

Odpowiedzi:

15

Zgadnij: używasz teraz MTP do uzyskiwania dostępu do odtwarzacza Walkman, a MTP jest do bani.

Detale

Operation not supportedBłąd może wskazywać, że Walkman wykorzystuje implementację MTP, która nie obsługuje „bezpośredni dostęp”. Według http://intr.overt.org/blog/?p=174 ten rodzaj bezpośredniego dostępu jest rozszerzeniem specyficznym dla Androida, więc prawdopodobnie nie jest obsługiwany przez odtwarzacz Walkman.

W rezultacie możesz użyć tylko kilku wybranych sposobów dostępu do plików w odtwarzaczu Walkman za pomocą MTP: Chyba wszystko, co czyta lub zapisuje pliki w jednej operacji, jest obsługiwane, podczas gdy dostęp do wybranych części pliku nie jest obsługiwany dla tych implementacji MTP . I wygląda na to, że cpi Python zawsze używa tej drugiej metody dostępu, a zatem kończy się niepowodzeniem.

Możliwe obejście

Jednakże, może być w stanie po prostu zastąpić cpprzez gvfs-copy. W moich testach z telefonem z Androidem Samsunga (który również ma sparaliżowaną implementację MTP) gvfs-copybyłem w stanie skopiować pliki na telefon, w przypadku cpniepowodzenia.

tło

Nie mogłem znaleźć wielu informacji na temat ograniczeń MTP zależnych od urządzenia; oto kilka fragmentów, w których sytuacja została nieco wyjaśniona:

/ubuntu//a/284831 https://bugs.launchpad.net/ubuntu/+source/gvfs/+bug/1389001/comments/2 https://bugs.launchpad.net/ubuntu/+source / gvfs / + bug / 1157583 / comments / 1

Dlaczego to działało wcześniej?

Co do tego, dlaczego twój Walkman był dostępny cpw Mennicy 14, ale nie w Mennicy 17, może to być spowodowane wewnętrznym przełączeniem z PTP na MTP jako system dostępu. Przynajmniej to zauważyłem w przypadku urządzenia Samsung po przejściu z Ubuntu 12.04 na 14.04. Telefon obsługuje zarówno PTP, jak i MTP, ale Ubuntu 12.04 najwyraźniej obsługuje tylko PTP; więc tego właśnie użyto. Ponieważ nowa wersja Ubuntu ma wbudowaną obsługę MTP, teraz jest ona używana.

W rzeczywistości może nawet zdarzyć się, że dostęp do odtwarzacza Walkman był wcześniej używany jako urządzenie pamięci masowej USB , czyli tego, czego używają dyski twarde i dyski flash USB. Być może z jakiegoś powodu Linux (lub twój Walkman) zdecydował, że MTP jest lepszy niż dostęp do pamięci masowej.

Metodę dostępu można zobaczyć, patrząc na adres URL odtwarzacza Walkman (w Nautilus, przejdź do folderu Walkman, naciśnij Ctrl + L i spójrz na pasek adresu): w przypadku MTP urządzenie znajduje się pod np. mtp://[usb:001,004]/podczas gdy w przypadku PTP jest to coś w rodzaju gphoto2://[usb:001,004]/store_00010001. W przypadku dostępu do pamięci masowej adres URL to zwykła ścieżka /media/WALKMAN.

Nie wiem, czy MTP ma jakąkolwiek faktyczną przewagę nad PTP lub Mass Storage, czy też można wrócić do PTP lub Mass Storage. W Linuksie zarówno implementacje MTP, jak i PTP mają swój własny zestaw błędów, więc może to zależeć od twojego przypadku użycia, który jest lepszy. Pamięć masowa AFAIK jest najbardziej pożądaną opcją dla użytkownika, ale obsługa urządzeń w telefonach słabnie.

oliver
źródło
2
Dzięki za zapoznanie mnie z gvfs-copy. Jest to jednak ogromny błąd, ponieważ nie kopiuje katalogów rekurencyjnie. Czy jest jeszcze coś, co mogę zrobić rekurencyjnie?
TuxForLife,
1
też gvfs-copynie działa dla mnie lepiej niż zwykle cp. I w moim przypadku ten sam telefon działał w przeszłości przez MTP. Niektóre telefony działają, a niektóre nie teraz. Cały MTP (ponieważ wybieram opcję połączenia MTP w menu telefonu). aktualizacja: znaleziono problem. Próbowałem skopiować z karty do pamięci telefonu. Musiałem najpierw skopiować do lokalnego systemu plików (np. / Tmp), a następnie skopiować do pamięci telefonu. Wygląda na to, że bezpośrednia kopia mtp-> mtp nie działa (jeszcze).
akostadinov
Ani gvfs-copy, ani gvfs-move nie działały dla mnie. Korzystając z Caja 1.8.2, byłem w stanie przenieść je za pomocą interfejsu graficznego, a następnie usunąć pliki.
Julien Lamarche
2

Aby uzyskać dostęp do mojego telefonu komórkowego, musiałem zainstalować serwer mtp poprzez Synaptic Package Manager na moim Linux Mint 17.1 Mate. Mój poprzedni Linux Mint 17 Mate nie wymagał ode mnie instalacji serwera mtp, mój telefon komórkowy został rozpoznany automatycznie po podłączeniu przez port USB. Może te informacje pomogą.

Scott
źródło
Masz na myśli przez linię poleceń? Jak powiedziałem, nadal mogę uzyskać do niego dostęp za pośrednictwem menedżera plików GUI.
David Pitchford
Caja odpowiada na moje potrzeby, więc nie mogę ci pomóc w wierszu poleceń.
Scott
Dziękuję Scott. Twoja odpowiedź pomogła mi rozwiązać ten komunikat o błędzie: 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.I moje urządzenie Adroid nie nawiązało połączenia przez MTP w mojej instalacji Mint 17. Prawdopodobnie po aktualizacji 17.1. apt-get install mtp-serverrozwiązał mój problem. Dotyczy to innych osób poszukujących tego problemu, które mogą mi pomóc.
2

Natknąłem się na ten problem na Ubuntu 16.04 i Samsung Galaxy SIII podłączony w trybie MTP.

Korzystanie z sugestii Olivera do użycia gvfs-copy, kopiowanie bezpośrednio z mojego NASa na telefon nie działa: (podobnie jak Nautilus). Jest to obejście możliwego błędu w 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

Alternatywny format ścieżki nie sugerował również strony:

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

Najpierw jednak skopiowano plik do folderu lokalnego. {Dzięki akostadinov} (podobnie jak Nautilus).

gvfs-copy '/home/nigel/The Story of Funk-1.mp2' 'mtp://[usb:001,005]/Card/Music/Radio'
Nigel Winterbottom
źródło
1

Na Debianie Jessie gvfs-copyz pakietu gvfs-bindziała dla mnie.

$ 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
użytkownik1338062
źródło
0

Możesz spróbować użyć rsync do synchronizacji z urządzeniem, chociaż przy transferach MTP zwykle nie możesz ustawić znacznika czasu i daty dla każdego pliku. Aby przyspieszyć przesyłanie, należy użyć opcji --size-only dla rsync, a nie opcji -t. Najłatwiej jest zmienić katalog na katalog mtp, taki jak / run / user / 1000 / gvfs / mtp: host = blahblah / blah / blah, a następnie uruchomić:

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

Opcja -n polega na wykonaniu próbnego rozruchu. Po prostu usuń tę opcję, jeśli jesteś zadowolony z wyników.

Eric Sokołowsky
źródło