GVFSを介してマウントされたMTPデバイスでファイル操作を実行できない:「操作はサポートされていません」


13

Linux Mint 17.1 64ビット(Ubuntu 14.04ベース)を実行しています。Linux Mint 14 / Ubuntu 12.10からアップグレードして以来、音楽をウォークマンに同期するために使用するPythonスクリプトが機能しなくなりました。

以前は、ウォークマンをマウントすると、自動的にパスとして表示され、/run/user/1000/gvfs/WALKMAN/Storage Media他のファイルシステムと同じように機能しました。トラックをコピーしたり、そこからトラックを削除したりできます。ただし、これを実現するために変更を加える必要があるかどうかは思い出せません。

Linux Mint 17(現在は17.1)にアップグレードして以来、Walkmanをマウントすると、pathとして表示されます/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

しかし現在、13.10以降のUbuntuバージョンにはこれらの変更がすべて含まれているため、不要になりました。なぜこれらのエラーがまだあるのですか?コマンドライン経由ではなく、グラフィカルファイルマネージャー(Linux MintのCaja)を介して、ウォークマンでファイル操作を行うことができます。


私はそれがあなたを助けることができると思う:github.com/hanwen/go-mtpfs
PersianGulf

私のデバイスはすでにMTPとしてマウントされています...それは問題ではありません。
デビッドピッチフォード

回答:


14

推測:あなたは実際にウォークマンにアクセスするためにMTPを使用しているので、MTPはダメです。

詳細

このOperation not supportedエラーは、ウォークマンが「直接」アクセスをサポートしないMTP実装を使用していることを示している可能性があります。http://intr.overt.org/blog/?p=174によると、この種の直接アクセスはAndroid固有の拡張機能であるため、おそらくウォークマンではサポートされていません。

その結果、MTPを使用してWalkman上のファイルにアクセスするために選択したいくつかの方法しか使用できません:単一の操作でファイルを読み書きするすべてがサポートされていますが、これらのMTP実装ではファイルの選択した部分へのアクセスはサポートされていません。そしてcp、Pythonは常に後者のアクセス方法を使用するため、失敗します。

考えられる回避策

しかし、あなただけ置き換えることができるかもしれませんcpgvfs-copy。サムスンのAndroid携帯電話(MTPの実装にも障害があります)でのテストではgvfs-copycp失敗した携帯電話にファイルをコピーできました。

バックグラウンド

これらのデバイス依存のMTP制限に関する情報はあまり見つかりませんでした。状況がいくらか説明されているスニペットを次に示します。

/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

以前はなぜ機能したのですか?

ウォークマンがcpミント14でアクセスできたが、ミント17ではアクセスできなかった理由については、アクセスシステムとしてのPTPからMTPへの内部切り替えが原因である可能性があります。少なくとも、Ubuntu 12.04から14.04に切り替えたときにSamsungデバイスで気づいたことです。電話はPTPとMTPの両方をサポートしていますが、Ubuntu 12.04はPTPのみをサポートしているようです。それが使用されたものです。新しいUbuntuバージョンにはMTPのサポートが組み込まれているため、代わりにこれが使用されます。

実際、以前はウォークマンがUSB大容量記憶装置としてアクセスされていた場合もあります。これはUSBハードディスクとフラッシュドライブが使用するものです。何らかの理由で、Linux(またはウォークマン)が、MTPが大容量記憶装置アクセスよりも望ましいと判断したのかもしれません。

使用されているアクセス方法を確認するには、ウォークマンのURLを確認します(Nautilusで、ウォークマンフォルダーに移動し、Ctrl + Lを押してアドレスバーを確認します)。MTPの場合、デバイスは、たとえば mtp://[usb:001,004]/PTPの場合はのようなものですgphoto2://[usb:001,004]/store_00010001。Mass Storageアクセスの場合、URLはのような通常のパスです/media/WALKMAN

MTPにPTPや大容量記憶装置よりも実際の利点があるかどうか、またはPTPまたは大容量記憶装置に切り替えることができるかどうかはわかりません。Linuxでは、MTPとPTPの両方の実装に独自のバグがあるため、ユースケースによってどちらが優れているかによって異なります。AFAIK Mass Storageはユーザーにとって最も望ましいオプションですが、電話でのデバイスサポートは衰退しています。


2
gvfs-copyを紹介してくれてありがとう。ただし、ディレクトリを再帰的にコピーすることはありません。再帰的に実行できる別の方法はありますか?
TuxForLife

1
またgvfs-copy、通常よりもうまく機能しませんcp。そして、私の場合、同じ電話が過去にMTPで機能していました。一部の電話は動作しますが、一部は動作しません。すべてのMTP(電話メニューでMTP接続オプションを選択したため)。更新:問題が見つかりました。カードから電話ストレージにコピーしようとしていました。最初にローカルファイルシステム(たとえば、/ tmp)にコピーし、次に電話ストレージにコピーする必要がありました。mtp-> mtpダイレクトコピーが機能しないようです(まだ)。
akostadinov

gvfs-copyとgvfs-movedのどちらも機能しませんでした。Caja 1.8.2を使用して、グラフィックインターフェイスを使用してそれらを移動し、ファイルを削除できました。
ジュリアンラマルシュ

2

携帯電話にアクセスするには、Linux Mint 17.1 MateのSynaptic Package Managerからmtp-serverをインストールする必要がありました。以前のLinux Mint 17 Mateでは、mtp-serverをインストールする必要はありませんでした。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.そして、私のAndroidデバイスは、Mint 17インストールでMTPを介して接続しませんでした。おそらく17.1のアップグレード後。apt-get install mtp-server私の問題を解決しました。これは、この問題を抱えている他の検索者が私を助けてくれるので役立つかもしれません。

2

Ubuntu 16.04とMTPモードで接続されたSamsung Galaxy SIIIでこの問題に遭遇しました。

Oliverの提案を使用して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

また、マンページで提案されている代替パス形式もありませんでした。

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 Jessieの場合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転送では通常、各ファイルの時刻と日付のスタンプを設定できません。転送を高速化するには、-tオプションではなく、rsyncに--size-onlyオプションを使用する必要があります。/ run / user / 1000 / gvfs / mtp:host = blahblah / blah / blahなどのディレクトリをmtpディレクトリに変更してから実行するのが最も簡単です。

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

-nオプションは、予行演習を実行することです。結果に満足したら、そのオプションを消去してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.