「MTP」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎libmtp: 追加)
101行目: 101行目:
 
* 複数のデバイスを使用する際は、{{ic|-d}} フラグを使用してデバイスを指定する必要があるかもしれません ({{ic|mtp-detect}} を実行することで id を調べられます)。
 
* 複数のデバイスを使用する際は、{{ic|-d}} フラグを使用してデバイスを指定する必要があるかもしれません ({{ic|mtp-detect}} を実行することで id を調べられます)。
 
* 外部 SD カードがあると、{{ic|go-mtpfs}} でのマウントが失敗するかもしれません。SD カードが存在している状態でデバイスへアクセスしようとして go-mtpfs がエラーを吐く場合は、SD カードを取り出して、もう一度マウントしてみてください。}}
 
* 外部 SD カードがあると、{{ic|go-mtpfs}} でのマウントが失敗するかもしれません。SD カードが存在している状態でデバイスへアクセスしようとして go-mtpfs がエラーを吐く場合は、SD カードを取り出して、もう一度マウントしてみてください。}}
  +
  +
== libmtp ==
  +
  +
[http://libmtp.sourceforge.net/ libmtp] はライブラリ MTP 実装です。いくつかのコマンドラインツールの例も付属しています ({{ic|pacman -Ql libmtp}} でリストアップできます)。
  +
  +
{{Pkg|libmtp}} パッケージを[[インストール]]してください。
  +
  +
デバイスを検出するには {{ic|mtp-detect}} を実行してください。
  +
  +
エラーが返ってくる場合、あなたのユーザが {{ic|adbusers}} [[ユーザーグループ]]に属していることを確認してください。
  +
  +
{{ic|mtp-connect}} コマンドでファイルを転送できます。
  +
  +
=== フロントエンド ===
  +
  +
{{App|gMTP|libmtp のためのグラフィカルフロントエンド。デスクトップに依存しない GUI で Android デバイスに接続し、ファイルを管理できます。|https://gmtp.sourceforge.io/|{{Pkg|gmtp}}}}
   
 
== 使用方法 ==
 
== 使用方法 ==

2023年3月20日 (月) 18:02時点における版

関連記事

メディア転送プロトコル (Media Transfer Protocol, MTP) は、多くの携帯電話 (全 Windows Phone 7/8/10 デバイスやほとんどの新しい Android デバイス) やメディアプレイヤ (例: Creative Zen) との間でメディアファイルの転送を行うために使用できます。

接続

MTP を介してコンピュータをデバイスに接続するには:

  • 対象デバイスがあなたのコンピュータと USB で接続されている必要があります
  • MTP が対象デバイスで有効化されている必要があります
  • デバイスのスクリーンがアンロックされている必要があります (セキュリティ上の理由により)

FUSE ファイルシステム

以下のプログラムは、FUSE ファイルシステムを介して MTP デバイスにアクセスできるようにします。

ノート: MTP は複雑であり、その実装はデバイス間で異なっています。下記のクライアントを試し、どのクライアントがあなたのデバイスで最もうまく機能するか調べてください。
ヒント: MTP 関連のパッケージをインストールした後は、コンピュータを再起動することが推奨されます。

FUSE ベースのファイルシステムを使用する場合、まず先にマウントポイントのディレクトリを作成する必要があるかもしれません。以下の例では ~/mnt ディレクトリが使われています。

通常、FUSE のマウントは fusermount -u マウントポイント を使ってアンマウントできます。

Android File Transfer

Android File Transfer — CLI、Qt UI、カスタムの MTP 実装を使用する FUSE ラッパを搭載している MTP クライアント

https://whoozle.github.io/android-file-transfer-linux/ || android-file-transfer

~/mnt にデバイスをマウントするには:

$ aft-mtp-mount ~/mnt

アルバムアートを表示させたい場合は、albumart.xxx という名前にし、一番最初にマウント先のフォルダに配置しておかなければなりません。その後で、他のファイルをコピーしてください。また、fuse は ui/cli のファイル転送よりも 7~8 倍遅くなる可能性があることに注意してください。

コマンドラインインターフェイスでデバイスと対話したい場合は、以下のコマンドを実行してください:

$ aft-mtp-cli

help と入力すると、利用可能な全コマンドが一覧表示されます。exit と入力すると終了します。

グラフィカルユーザインターフェイスでデバイスと対話したい場合は、android-file-transfer アプリケーションを起動し、マウント先フォルダを選択して、ツールバーの任意のボタンを押してください。利用可能なオプションは、Upload AlbumUpload DirectoryUpload Files です。最後の2つは自明です。Upload album は、ソースディレクトリからアルバムカバーを検索し、利用可能な最も良いカバーを設定します。

MTPfs

MTPfslibmtp ベース。任意の MTP デバイスに対して読み書きをサポートする FUSE ファイルシステムです

https://www.adebenham.com/mtpfs/ || mtpfs
ノート: 以下は機能しない可能性が高く、libgphoto2 や、PCManFM などの gvfs サポートのあるファイルマネージャに頼らなくてはならないかもしれません。

まず、/etc/fuse.conf を編集して、以下の行をアンコメントしてください:

user_allow_other

~/mnt にデバイスをマウントします:

$ mtpfs -o allow_other ~/mnt

jmtpfs

jmtpfslibmtp ベース。MTP (Media Transfer Protocol) デバイスにアクセスします。

https://github.com/JasonFerrara/jmtpfs || jmtpfsAUR

~/mnt にデバイスをマウントします:

$ jmtpfs ~/mnt

2つのステップを行うことにより、Linux の残りの部分と一致させます (通常の mount/umount コマンドを使用する):

$# ln -s <実際の mount コマンドのパス/名前>  <Linux の mount 規則と一致する名前>
$  ln -s /sbin/jmtpfs                        /sbin/mount.jmtpfs

以下の行を /etc/fstab に追加してください:

 #jmtpfs <mount path>        fuse nodev,allow_other,<other options>                             0    0
  jmtpfs /home/sam/run/motog fuse nodev,allow_other,rw,user,noauto,noatime,uid=1000,gid=1000    0    0

そして、デバイスをマウントし、オプションが渡されていることを確認してください:

 $ mount /home/sam/run/motog
 Device 0 (VID=22b8 and PID=2e82) is a Motorola Moto G (ID2).
 Android device detected, assigning default bug flags
 $ mount 
  ...
  jmtpfs on /home/sam/run/motog type fuse.jmtpfs (rw,nosuid,nodev,noexec,noatime,user_id=1000,group_id=1000,allow_other,user=sam)

SIMPLE-MTPFS

SIMPLE-MTPFSlibmtp ベース。Simple Media Transfer Protocol FileSystem は、USB でローカルマシンに接続された MTP デバイス上のファイルを操作できるファイルシステムです

https://github.com/phatina/simple-mtpfs/ || simple-mtpfsAUR

検出されたデバイスを一覧表示するには simple-mtpfs -l を実行してください。

リストの最初のデバイスを ~/mnt にマウントするには、simple-mtpfs --device 1 ~/mnt を実行してください。

go-mtpfs

go-mtpfs — カスタムの MTP 実装を持つ、Go で書かれた FUSE ファイルシステム

https://github.com/hanwen/go-mtpfs || go-mtpfs-gitAUR

android-udev をインストールしてください。これは、/etc/udev/rules.d/51-android.rules を編集して、(mtp-detect を実行後に見られる) idVendoridProduct に適用できるようにします。行の最後にはあなたのユーザ OWNER="<user>" を追加してください。

~/mnt 上にデバイスをマウントします:

$ go-mtpfs ~/mnt
ノート:
  • 複数のデバイスを使用する際は、-d フラグを使用してデバイスを指定する必要があるかもしれません (mtp-detect を実行することで id を調べられます)。
  • 外部 SD カードがあると、go-mtpfs でのマウントが失敗するかもしれません。SD カードが存在している状態でデバイスへアクセスしようとして go-mtpfs がエラーを吐く場合は、SD カードを取り出して、もう一度マウントしてみてください。

libmtp

libmtp はライブラリ MTP 実装です。いくつかのコマンドラインツールの例も付属しています (pacman -Ql libmtp でリストアップできます)。

libmtp パッケージをインストールしてください。

デバイスを検出するには mtp-detect を実行してください。

エラーが返ってくる場合、あなたのユーザが adbusers ユーザーグループに属していることを確認してください。

mtp-connect コマンドでファイルを転送できます。

フロントエンド

gMTP — libmtp のためのグラフィカルフロントエンド。デスクトップに依存しない GUI で Android デバイスに接続し、ファイルを管理できます。

https://gmtp.sourceforge.io/ || gmtp

使用方法

まず最初にマウントポイントのディレクトリを作成する必要があります。以下の例では ~/mnt ディレクトリを使っています。また、コンピュータに接続する前にデバイスのロック画面を解除するようにしてください。

FUSE のマウントは基本的に fusermount -u mountpoint でアンマウントすることができます。

libmtp

MTP デバイスの接続時に、MTP デバイスが検出されたかどうかを確認するには次のコマンドを使用:

# mtp-detect

エラーが表示される場合、トラブルシューティングを参照。

ノート: 通常ユーザーは uucp グループに属している必要があります。

MTP デバイスに接続するには、以下を使用:

# mtp-connect

接続が成功すると、mtp-connect と一緒に複数のスイッチオプションを使ってデバイスのデータにアクセスすることができます。

以下のように、MTP デバイスにアクセスするのに使える単独のコマンドも存在します:

mtp-albumart        mtp-emptyfolders    mtp-getplaylist     mtp-reset           mtp-trexist
mtp-albums          mtp-files           mtp-hotplug         mtp-sendfile
mtp-connect         mtp-folders         mtp-newfolder       mtp-sendtr
mtp-delfile         mtp-format          mtp-newplaylist     mtp-thumb
mtp-detect          mtp-getfile         mtp-playlists       mtp-tracks
警告: コマンドによっては MTP デバイスに悪影響を与えることがあるので注意してください。

mtpfs

ノート: 以下の方法が使えない時は gphoto2 や、PCManFM などの gvfs をサポートしているファイルマネージャを用いる必要があります。

Mtpfs はあらゆる MTP デバイスの読み書きをサポートする FUSE ファイルシステムです。外付けデバイスとして MTP デバイスをマウントできるようにします。

Mtpfs は公式リポジトリmtpfs パッケージでインストールすることが可能です。

  • まず /etc/fuse.conf を編集して以下の行をアンコメントしてください:
user_allow_other
  • デバイスをマウントするには:
$ mtpfs -o allow_other ~/mnt
  • デバイスをアンマウントするには:
$ fusermount -u ~/mnt
  • デバイスを root でアンマウントするには:
# umount ~/mnt

また、~/.bashrc に以下を記述すると便利です:

alias android-connect="mtpfs -o allow_other /media/YOURMOUNTPOINT"
alias android-disconnect="fusermount -u /media/YOURMOUNTPOINT"

もしくは sudo を使って:

alias android-disconnect="sudo umount -u /media/YOURMOUNTPOINT"
ノート: sudo を使用するときにパスワードを聞いて欲しくない場合は、USB ストレージデバイスを参照してください。

jmtpfs

jmtpfs は MTP (Media Transfer Protocol) デバイスへのアクセスを提供する FUSE と libmtp ベースのファイルシステムです。MTP はサポートしているが USB マスストレージはサポートしていない新しい Android デバイスと Linux システム間でのファイルの交換を特に目的にしています。jmtpfs は AURjmtpfsAUR でインストール可能です。

デバイスをマウントするには次のコマンドを使用:

$ jmtpfs ~/mtp

デバイスをアンマウントするには次のコマンドを使用:

$ fusermount -u ~/mtp

go-mtpfs

ノート:
  • デバイスによってはファイルの書き込みについて go-mtpfs は mtpfs/jmtpfs よりも良いパフォーマンスを発揮します。速度が遅いときは試してみて下さい。
  • 外付け SD カードが存在する場合は go-mtpfs によるマウントは失敗します。外付け SD カードがあるときは取り除いてからマウントしてみてください。

上記のやり方では芳しい結果が得られない場合、AUR から go-mtpfs-gitAUR を試してみて下さい。以下の手順は Samsung Galaxy Nexus GSM, Asus/Google Nexus 7 (2012年の第一世代), Samsung Galaxy S 3 mini, Google Nexus 4 でテスト済みです (Nexus 4 で動作する mtp ソフトウェアは go-mtpfs だけでした。usb デバッグを有効にして、メディアデバイスとして接続する設定です)。

android-udev をインストールしてから /etc/udev/rules.d/51-android.rules を編集し、mtp-detect で確認できるあなたの idVendor と idProduct を使うようにしてください。行末にカンマと OWNER="<user>" を追加して、ファイルを保存します。

  • "fuse" グループにユーザーを追加:
# gpasswd -a [user] fuse
  • "fuse" グループが存在しない場合は次のコマンドでグループを作成:
# groupadd fuse

ログアウトまたは再起動して変更を適用してください。

  • "Android" という名前のマウントポイントを作成するために次のコマンドを実行:
$ mkdir Android
  • スマートフォンをマウントするには次を使用:
$ go-mtpfs Android
  • スマートフォンをアンマウントするには:
$ fusermount -u Android

上の例と同じように .bashrc にエイリアスを作成すると便利です。

simple-mtpfs

MTP デバイスのための別の FUSE ファイルシステムです。mtpfs よりも信頼性が上回っています。AUR から simple-mtpfsAUR をインストールするか、ソースからビルドすることができます。以下のコマンドは root で実行しないで下さい。

MTP デバイスをリストアップするには次を実行:

$ simple-mtpfs --list-devices

MTP デバイス (この例では1番目のデバイス) をマウントするには次を実行

$ simple-mtpfs --device 1 ~/mnt

アンマウントするには次を実行:

$ fusermount -u ~/mnt

Android File Transfer

FUSE インターフェイス

デバイスを ~/my-device にマウント:

$ mkdir ~/my-device
$ aft-mtp-mount ~/my-device

アルバムアートを表示したい場合、albumart.xxx という名前を付けて一番最初にフォルダに配置してください。それから他のファイルをコピーしてください。また、fuse では ui/cli ファイル転送よりも7-8倍転送が遅くなるので注意してください。

Qt ユーザーインターフェイス

アプリケーションを起動して、コピー先のフォルダを選択してツールバーのボタンをクリックしてください。利用できるオプション: Upload Album, Upload Directory, Upload FilesUpload Album はアルバムカバーのディレクトリを検索して、適当なカバーを設定します。

メディアプレイヤー

Amarok などの音楽プレイヤーで MTP デバイスを使うこともできます。これには /etc/udev/rules.d/51-android.rules を編集する必要があります (以下では MTP デバイスの例として Galaxy Nexus を使っています):

まず次を実行してデバイスを確認してください:

$ lsusb

以下のように表示されます:

Bus 003 Device 011: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II], GT-P7500 [Galaxy Tab 10.1]

上記の場合は以下のようにエントリを記述します:

SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0666", OWNER="[username]"

記述したら、udev ルールをリロードしてください:

# udevadm control --reload
ノート: MTP をインストールした後、デバイスを認識させるために再起動が必要なことがあります。

トラブルシューティング

libmtp

未知のデバイス

以下のようなメッセージが表示される場合:

Device 0 (VID=XXXX and PID=XXXX) is UNKNOWN.
Please report this VID/PID and the device model to the libmtp development team

デバイスが次のリストに含まれているか確認する必要があります: Supported devices list。リストに入っていない場合は、開発チームに報告してください。リストに含まれている場合は、libmtp が少しだけ旧式になっている可能性があります。libmtp によって適切に使用されるように、デバイスを次のファイルに追加することが可能です:

/usr/lib/udev/rules.d/69-libmtp.rules

Unable to enumerate USB device

システムログ (journalctl) に以下のようなメッセージが表示される場合:

usb usb4-port2: unable to enumerate USB device

以下のコマンドを実行してみてください [1]:

# modprobe -vr uhci_hcd
# modprobe -va ohci_hcd
# modprobe -va uhci_hcd

上記のコマンドで直る場合、以下の内容で /etc/modprobe.d/usb_hci_order.conf を作成してください:

# create a dependency on ohci for uhci, which fixes problems
# with external usb devices not showing up
#
softdep uhci_hcd pre: ohci_hcd

gvfs-mtp

gvfs-mtp パッケージをインストールしても、デバイスがファイルマネージャに表示されない場合、デバイスが自動マウントされるように udev ルールを書く必要があるかもしれません。

デバイスを接続して、vendor-id と product-id をそれぞれ取得してください:

$ lsusb
Bus 001 Device 007: ID 0421:0661 Nokia Mobile Phones Lumia 920
(...)

ID の文字の後の2つの数字が vendorID : productID です。

ID がわかったら udev ルールを作成します。例:

# nano /etc/udev/rules.d/51-android.rules

ルールの中身は以下のようにしてください:

ATTR{idVendor}=="YOUR VENDOR ID HERE", ATTR{idProduct}=="YOUR PRODUCT ID HERE", SYMLINK+="libmtp",  MODE="660", ENV{ID_MTP_DEVICE}="1"

udev ルールをリロードします:

# udevadm control --reload

そしてシステムを再起動してください。これで (Thunar などの) ファイルマネージャは MTP デバイスを自動でマウントできるようになったはずです [2]

jmtpfs

jmtpfs でマウントは成功するがデバイス上のファイルにアクセスしようとすると以下のエラーが表示される場合:

cannot access <mount-point>: Input/output error

上記のエラーはセキュリティ機能が原因です。スマートフォンがロック画面でロックされているときに MTP は使用できません。ロックを解除してもういちど試してみてください。

kio-mtp

"ファイルマネージャで開く"が使えない場合は、/usr/share/apps/solid/actions/solid_mtp.desktop ファイルを編集することで問題を解決できます。

次の行を:

Exec=kioclient exec mtp:udi=%i/

以下のように変更してください:

Exec=dolphin "mtp:/"