Raspberry PiとAndroidでMTP接続

Raspberry PiとAndroid端末をUSBケーブルで結ぶことでMTP接続も利用できます。

Android端末とデータ転送するには簡単で転送速度も早いので利用価値があると思います。

但し、前回のUSBテザリングと同時には使用はできません。

参考 MTP – ArchWiki

環境
Raspberry pi 3 jessie ディスクトップ
Android端末 EP171AC android7.0 Nougat

EP171ACのUSBデバッグを有効にする

設定 — 端末情報 — ビルド番号を7回タップして開発者向けオプションを有効

開発者向けオプション — USBデバッグをON

Piと接続すると通知欄にNが表示されます。

USB接続の用途 ○ファイルを転送する

Raspberry pi 3の設定

mtp-toolsのインストール(libmtpなども依存関係でインストールされます)

# apt install mtp-tools

lsusbを実行します。EP171ACは以下のように認識しています。

$ lsusb
Bus 001 Device 008: ID 0e8d:201d MediaTek Inc.

/etc/udev/rules.d/69-libmtp.rulesを新たに作成
lsusbの結果からidVendorとidProductを記入

/etc/udev/rules.d/69-libmtp.rules
# EP171AC
ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201d", SYMLINK+="libmtp-%k", MODE="666", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"


EP171ACを再接続するとファイルマネージャーにEP171ACが現れます。

出ない時はPiを再起動してみるといいと思います。


EP171ACをクリックするとオートマウントします。

USBケーブルを抜き挿しすると違うアイコンで同じ内容が表示されますが気にしない!

ここでUSBテザリングをONにするとファイルマネージャーからEP171ACは見えなくなります。(接続が切れる)USBテザリングをOFFにするとまたMTP接続(EP171AC)は自動で復活します。

Pi Zero(W) コマンドラインでMTP接続

X環境の無いjessie-liteのZero(W)でMTP接続をしてみます。
Zero(W)はPi3からssh接続しているものとします。

Zero(W)の設定
mtp-tools jmtpfsのインストール

# apt install mtp-tools jmtpfs

マウントポイントの作成
マウントはユーザーで実行するのでユーザーのホームディレクトリに作成します。

$ mkdir ~/mtp

.mtpz-dataの取得
マウントすると
Unable to open ~/.mtpz-data for reading, MTPZ disabled.
こんなメッセージが出ます。GitHubに公開されているので頂きます。

$ wget https://gist.github.com/jemc/0149c1bb28413c3d8cf9/archive/ba49166cbf8f80c8a50e0ecf79660d3cf2efabde.zip
unzip ba49166cbf8f80c8a50e0ecf79660d3cf2efabde.zip
mv 0149c1bb28413c3d8cf9-ba49166cbf8f80c8a50e0ecf79660d3cf2efabde/.mtpz-data ~/
rm ba49166cbf8f80c8a50e0ecf79660d3cf2efabde.zip
rmdir 0149c1bb28413c3d8cf9-ba49166cbf8f80c8a50e0ecf79660d3cf2efabde

マウントしてみる

$ jmtpfs ~/mtp
Device 0 (VID=0e8d and PID=201d) is UNKNOWN.
Please report this VID/PID and the device model to the libmtp development team
Android device detected, assigning default bug flags

未知のデバイスだよとメッセージが出ますがマウントは成功しています。
Archの解説にもありますがリンク先の最新のSupported devices listを見るとサポートはされているようです。udevルールを適用しても改善はしませんでした。
Raspbianのlibmtpのバージョンが古いのかまたはもう少し設定が必要なのかもしれません。

アンマウント

$ fusermount -u ~/mtp


トップディレクトリの日付やdfの値がおかしいですが内部の日付は正常です。

ファイルの転送も問題無いようです。

やはりこちらもUSBテザリングをONにすると接続は切れてしまいます。
再接続するには一旦アンマウントしてから再度マウントする必要があります。

Xの無い環境でUSBテザリングからターミナルを介してアクセスしている場合、ファイルの受け渡しは直接できないのでSDカードを介するかまたはほかの方法を取ることになりそうです。