web-dev-qa-db-ja.com

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

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

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

Linux Mint 17(そして今や17.1)にアップグレードしてから、ウォークマンをマウントすると、パスとして表示されます/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)を使用して、ウォークマンでファイル操作を実行できます。

14
David Pitchford

推測:ウォークマンへのアクセスに実際にMTPを使用しているので、MTPは最悪です。

細部

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

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

可能な回避策

ただし、cpgvfs-copyに置き換えることもできます。 Samsungを使用したテストでは、Android電話(MTPの実装も不自由))gvfs-copyは、cpが失敗した電話にファイルをコピーできました。

バックグラウンド

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

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

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

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

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

ウォークマンのURLを確認することで、使用されているアクセス方法を確認できます(Nautilusの場合は、ウォークマンフォルダーに移動し、Ctrl + Lを押してアドレスバーを確認します)。MTPの場合、デバイスは次の場所にあります。 mtp://[usb:001,004]/ PTPの場合はgphoto2://[usb:001,004]/store_00010001のようになります。大容量記憶装置へのアクセスの場合、URLは/media/WALKMANのような通常のパスです。

MTPがPTPまたはマスストレージよりも実際に優れているかどうか、またはPTPまたはマスストレージに戻すことができるかどうかはわかりません。 Linuxでは、MTP実装とPTP実装の両方に独自のバグのセットがあるため、どちらが良いかはユースケースによって異なる場合があります。 AFAIKマスストレージはユーザーにとって最も望ましいオプションですが、電話でのデバイスサポートは衰退しています。

15
oliver

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

Oliverの提案を使用してgvfs-copyを使用し、my NAS=から電話に直接コピーしても機能しません:(Nautilusも同様)。 。

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'
2

私の携帯電話にアクセスするために、Linux Mint 17.1 MateにSynaptic Package Managerを介してmtp-serverをインストールする必要がありました。以前のLinux Mint 17 Mateではmtp-serverをインストールする必要はありませんでした。USBポート経由で接続すると、携帯電話が自動的に認識されました。多分この情報が役立ちます。

2
Scott

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
1
user1338062

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オプションは、予行演習を実行するためのものです。結果に満足したら、そのオプションを削除してください。

0
Eric Sokolowsky