MTPデバイス (Androidスマホ等) -6PTP_ERROR_IO: failed to open session
Androidスマホに保存したファイルを Ubuntuのボリュームにバックアップしたい。
今まで、ファイル(Nautilus)のGUIにて手作業でコピーしていました。
これは頻度が多くなると面倒になってきます
そこで、シェルスクリプトにしたくなりました。
そこで、問題になるのがマウントポイントです。
Androidスマホを MTP接続して、適当なファイルのプロパティを確認すると、
嘘だったらゴメンナサイですが、これは、
gvfs-mtp-volume-monitor
が提供してくれている接続方法みたいです。
ちょっと調べると、MTPでのマウントはこんな方法でできるようです。
しかし、やってみるとエラーになりました。
これは他に MTPを使っているプロセスがいるのが原因らしい。
https://sourceforge.net/p/libmtp/discussion/535191/thread/8d49ff71/
そのプロセスが上記の gvfs-mtp-volume-monitor のようです。
対策は ps で 'gvfs.*mtp' を調べて、kill するとよいとのこと。
ちょっと工夫して、下記のようにして kill してみました。
エラーを回避して、無事にマウントできました
これで、例えば、下記のようなかんじでファイルにアクセスできました。
今まで、ファイル(Nautilus)のGUIにて手作業でコピーしていました。
これは頻度が多くなると面倒になってきます
そこで、シェルスクリプトにしたくなりました。
そこで、問題になるのがマウントポイントです。
Androidスマホを MTP接続して、適当なファイルのプロパティを確認すると、
場所: mtp://[usb:001,014]/%....みたいな通常のファイルパスではない接続をされているようです
嘘だったらゴメンナサイですが、これは、
gvfs-mtp-volume-monitor
が提供してくれている接続方法みたいです。
ちょっと調べると、MTPでのマウントはこんな方法でできるようです。
$ mkdir ~/mtp
$ jmtpfs ~/mtp
※ ~/mtp は任意のパスでよい
しかし、やってみるとエラーになりました。
ignoring libusb_claim_interface() = -6PTP_ERROR_IO: failed to open session, trying again after resetting USB interface
LIBMTP libusb: Attempt to reset device
これは他に MTPを使っているプロセスがいるのが原因らしい。
https://sourceforge.net/p/libmtp/discussion/535191/thread/8d49ff71/
そのプロセスが上記の gvfs-mtp-volume-monitor のようです。
対策は ps で 'gvfs.*mtp' を調べて、kill するとよいとのこと。
ちょっと工夫して、下記のようにして kill してみました。
$ ps auxw | grep -e 'gvfs.*mtp' | grep -v grep | awk '{cmd="kill "$2; system(cmd)}'
エラーを回避して、無事にマウントできました
これで、例えば、下記のようなかんじでファイルにアクセスできました。
$ cp ~/mtp/内部共有ストレージ/<任意のファイル>