「MTP」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(TranslationStatus)
 
(3人の利用者による、間の15版が非表示)
1行目: 1行目:
[[Category:サウンド]]
 
[[Category:イメージング]]
 
 
[[Category:ストレージ]]
 
[[Category:ストレージ]]
 
[[Category:携帯端末]]
 
[[Category:携帯端末]]
[[en:MTP]]
+
[[de:MTP]]
  +
[[en:Media Transfer Protocol]]
[[fa:MTP]]
 
  +
[[zh-hans:Media Transfer Protocol]]
[[ru:MTP]]
 
[[zh-hans:MTP]]
 
 
{{Related articles start}}
 
{{Related articles start}}
  +
{{Related|Android#ファイル転送}}
 
{{Related|USB ストレージデバイス}}
 
{{Related|USB ストレージデバイス}}
 
{{Related articles end}}
 
{{Related articles end}}
MTP は多くの mp3 レイヤー (例: Creative Zen) やモバイル端末 (例: Windows Phone 7/8/10 デバイスや最新の Android デバイス) で使われているメディア転送ロトコル (Media Transfer Protocol) です。"Windows Media" レームワーク一部あり、Windows Media Player と密接な関係があります。
+
[[Wikipedia:ja:メディア転送ロトコル|メディア転送プロトコル]] (Media Transfer Protocol, MTP) は、多くの携帯電話 ( Windows Phone 7/8/10 デバイスやほとんど新しい [[Android]] デバイス) メディアプレイヤ (例: Creative Zen) との間メディアァイル転送を行うために使用ます。
   
== インストール ==
+
== 接続 ==
   
  +
MTP を介してコンピュータをデバイスに接続するには:
=== 機能性 ===
 
   
  +
* 対象デバイスがあなたのコンピュータと USB で接続されている必要があります
Linux の MTP サポートは {{Pkg|libmtp}} パッケージを[[インストール]]することで得られます。libmtp をインストールするだけでデバイスにアクセスできますが、特定のデバイスタイプで便利な機能 (例: ファイルマネージャ) と互換性を提供するパッケージが多数存在します。転送速度を向上させるパッケージもあります。
 
  +
* MTP が対象デバイスで有効化されている必要があります
  +
* デバイスのスクリーンがアンロックされている必要があります (セキュリティ上の理由により)
   
  +
== FUSE ファイルシステム ==
以下のパッケージはどれも [[Wikipedia:Filesystem in Userspace]] で実装されています:
 
   
  +
以下のプログラムは、[[FUSE]] ファイルシステムを介して MTP デバイスにアクセスできるようにします。
* {{Pkg|mtpfs}}
 
  +
{{Note|MTP は複雑であり、その実装はデバイス間で異なっています。下記のクライアントを試し、どのクライアントがあなたのデバイスで最もうまく機能するか調べてください。}}
* {{Pkg|android-file-transfer}} - ミニマルな UI が付属している MTP クライアント
 
  +
{{Tip|MTP 関連のパッケージをインストールした後は、コンピュータを再起動することが推奨されます。}}
* {{AUR|jmtpfs}} - Android 4 以降の新しいデバイスで上手く動作します
 
  +
FUSE ベースのファイルシステムを使用する場合、まず先にマウントポイントのディレクトリを作成する必要があるかもしれません。以下の例では {{ic|~/mnt}} ディレクトリが使われています。
* {{AUR|go-mtpfs-git}} - Android 3 以降の新しいデバイスで上手く動作します
 
* {{AUR|simple-mtpfs}}
 
   
  +
通常、FUSE のマウントは {{ic|fusermount -u ''マウントポイント''}} を使ってアンマウントできます。
上記の全てが {{ic|libmtp}} よりも優れた機能とパフォーマンスを誇っています。USB デバイスは多数存在するので、まずどれか一番適しているか試すことから始めて下さい。
 
   
  +
=== Android File Transfer ===
{{Warning|{{ic|libmtp}} は新しい Android デバイスを正しく扱えません。転送が止まったりリモートファイルシステムを使用した際に問題が発生したり、転送速度が劣化する可能性があります。さらに、USB ケーブルが破損していた場合、libmtp を使用するとクラッシュしたりデバイスを切断するまで永遠にフリーズするかもしれません。可能であれば USB マスストレージでデバイスと接続するか、({{aur|adbfs-rootless-git}} など) [[ADB]] を使用してファイルを転送することを推奨します。大抵のデバイスで MTP よりも高いパフォーマンスを得ることができ Android 固有の操作を行うことが可能です (APK のインストール、パッケージの管理、データのバックアップ、シェルへのアクセスなど)。}}
 
   
  +
{{App|Android File Transfer|CLI、Qt UI、カスタムの MTP 実装を使用する FUSE ラッパを搭載している MTP クライアント|https://whoozle.github.io/android-file-transfer-linux/|{{Pkg|android-file-transfer}}}}
{{Tip|MTP 関連のパッケージをインストールした後はコンピュータを再起動することを推奨します。}}
 
   
  +
{{ic|~/mnt}} にデバイスをマウントするには:
=== ファイルマネージャと統合 ===
 
  +
$ aft-mtp-mount ~/mnt
   
  +
アルバムアートを表示させたい場合は、{{ic|albumart.xxx}} という名前にし、一番最初にマウント先のフォルダに配置しておかなければなりません。その後で、他のファイルをコピーしてください。また、fuse は ui/cli のファイル転送よりも 7~8 倍遅くなる可能性があることに注意してください。
MTP を使ってファイルマネージャ上で Android デバイスのストレージの中身を表示するには、適当なプラグインをインストールしてください:
 
   
  +
コマンドラインインターフェイスでデバイスと対話したい場合は、以下のコマンドを実行してください:
* [[GVFS]] を使用するファイルマネージャ (GNOME の [[Nautilus]], Xfce の [[Thunar]]) の場合、MTP のサポートは {{Pkg|gvfs-mtp}} を、PTP のサポートは {{Pkg|gvfs-gphoto2}} をインストールしてください。
 
  +
$ aft-mtp-cli
* KIO (KDE の Dolphin) を使用するファイルマネージャの場合、MTP サポートは {{Pkg|kio-extras}} に含まれています (Dolphin の依存パッケージ)。
 
  +
''help'' と入力すると、利用可能な全コマンドが一覧表示されます。''exit'' と入力すると終了します。
   
  +
グラフィカルユーザインターフェイスでデバイスと対話したい場合は、''android-file-transfer'' アプリケーションを起動し、マウント先フォルダを選択して、ツールバーの任意のボタンを押してください。利用可能なオプションは、''Upload Album''、''Upload Directory''、''Upload Files'' です。最後の2つは自明です。''Upload album'' は、ソースディレクトリからアルバムカバーを検索し、利用可能な最も良いカバーを設定します。
必要なパッケージをインストールすれば、ファイルマネージャに自動的にデバイスが表示され、{{ic|mtp://[usb:002,013]/}} というような URL でアクセスすることができます。
 
   
== 使用方法 ==
+
=== MTPfs ===
   
  +
{{App|MTPfs|[[#libmtp|libmtp]] ベース。任意の MTP デバイスに対して読み書きをサポートする FUSE ファイルシステムです|https://www.adebenham.com/mtpfs/|{{Pkg|mtpfs}}}}
まず最初にマウントポイントのディレクトリを作成する必要があります。以下の例では {{ic|~/mnt}} ディレクトリを使っています。また、コンピュータに接続する前にデバイスのロック画面を解除するようにしてください。
 
  +
{{Note|以下は機能しない可能性が高く、[[libgphoto2]] や、[[PCManFM]] などの gvfs サポートのあるファイルマネージャに頼らなくてはならないかもしれません。}}
   
  +
まず、{{ic|/etc/fuse.conf}} を編集して、以下の行をアンコメントしてください:
FUSE のマウントは基本的に {{ic|fusermount -u ''mountpoint''}} でアンマウントすることができます。
 
  +
user_allow_other
   
  +
{{ic|~/mnt}} にデバイスをマウントします:
=== libmtp ===
 
  +
$ mtpfs -o allow_other ~/mnt
   
  +
=== jmtpfs ===
MTP デバイスの接続時に、MTP デバイスが検出されたかどうかを確認するには次のコマンドを使用:
 
# mtp-detect
 
エラーが表示される場合、[[#libmtp 2|トラブルシューティング]]を参照。
 
   
  +
{{App|jmtpfs|[[#libmtp|libmtp]] ベース。MTP (Media Transfer Protocol) デバイスにアクセスします。|https://github.com/JasonFerrara/jmtpfs|{{AUR|jmtpfs}}}}
{{Note|通常ユーザーは {{ic|uucp}} グループに属している必要があります。}}
 
   
MTP デバイスに接続るには、以下を使用:
+
{{ic|~/mnt}} デバイスをマウントします:
# mtp-connect
 
   
  +
$ jmtpfs ~/mnt
接続が成功すると、{{ic|mtp-connect}} と一緒に複数のスイッチオプションを使ってデバイスのデータにアクセスすることができます。
 
   
  +
2つのステップを行うことにより、Linux の残りの部分と一致させます (通常の mount/umount コマンドを使用する):
以下のように、MTP デバイスにアクセスするのに使える単独のコマンドも存在します:
 
   
  +
$# ln -s <実際の mount コマンドのパス/名前> <Linux の mount 規則と一致する名前>
mtp-albumart mtp-emptyfolders mtp-getplaylist mtp-reset mtp-trexist
 
mtp-albums mtp-files mtp-hotplug mtp-sendfile
+
$ ln -s /sbin/jmtpfs /sbin/mount.jmtpfs
mtp-connect mtp-folders mtp-newfolder mtp-sendtr
 
mtp-delfile mtp-format mtp-newplaylist mtp-thumb
 
mtp-detect mtp-getfile mtp-playlists mtp-tracks
 
   
  +
以下の行を {{ic|/etc/fstab}} に追加してください:
{{Warning|コマンドによっては MTP デバイスに悪影響を与えることがあるので注意してください。}}
 
   
  +
#jmtpfs <mount path> fuse nodev,allow_other,<other options> 0 0
=== mtpfs ===
 
  +
jmtpfs /home/sam/run/motog fuse nodev,allow_other,rw,user,noauto,noatime,uid=1000,gid=1000 0 0
   
  +
そして、デバイスをマウントし、オプションが渡されていることを確認してください:
{{Note|以下の方法が使えない時は [[デジタルカメラ#libgphoto2|gphoto2]] や、[[PCManFM]] などの gvfs をサポートしているファイルマネージャを用いる必要があります。}}
 
   
  +
$ mount /home/sam/run/motog
Mtpfs はあらゆる MTP デバイスの読み書きをサポートする FUSE ファイルシステムです。外付けデバイスとして MTP デバイスをマウントできるようにします。
 
  +
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 ===
Mtpfs は[[公式リポジトリ]]の {{Pkg|mtpfs}} パッケージでインストールすることが可能です。
 
* まず {{ic|/etc/fuse.conf}} を編集して以下の行をアンコメントしてください:
 
user_allow_other
 
   
  +
{{App|SIMPLE-MTPFS|[[#libmtp|libmtp]] ベース。Simple Media Transfer Protocol FileSystem は、USB でローカルマシンに接続された MTP デバイス上のファイルを操作できるファイルシステムです|https://github.com/phatina/simple-mtpfs/|{{AUR|simple-mtpfs}}}}
* デバイスをマウントするには:
 
$ mtpfs -o allow_other ~/mnt
 
* デバイスをアンマウントするには:
 
$ fusermount -u ~/mnt
 
* デバイスを root でアンマウントするには:
 
# umount ~/mnt
 
   
  +
検出されたデバイスを一覧表示するには {{ic|simple-mtpfs -l}} を実行してください。
また、{{ic|~/.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"
 
{{Note|sudo を使用するときにパスワードを聞いて欲しくない場合は、[[USB ストレージデバイス]]を参照してください。}}
 
   
  +
リストの最初のデバイスを {{ic|~/mnt}} にマウントするには、{{ic|simple-mtpfs --device 1 ~/mnt}} を実行してください。
=== jmtpfs ===
 
   
  +
=== go-mtpfs ===
[http://research.jacquette.com/jmtpfs-exchanging-files-between-android-devices-and-linux/ jmtpfs] は MTP (Media Transfer Protocol) デバイスへのアクセスを提供する FUSE と libmtp ベースのファイルシステムです。MTP はサポートしているが USB マスストレージはサポートしていない新しい Android デバイスと Linux システム間でのファイルの交換を特に目的にしています。jmtpfs は [[AUR]] の {{AUR|jmtpfs}} でインストール可能です。
 
   
  +
{{App|go-mtpfs|カスタムの MTP 実装を持つ、Go で書かれた FUSE ファイルシステム|https://github.com/hanwen/go-mtpfs|{{AUR|go-mtpfs-git}}}}
デバイスをマウントするには次のコマンドを使用:
 
$ jmtpfs ~/mtp
 
   
  +
{{Pkg|android-udev}} をインストールしてください。これは、{{ic|/etc/udev/rules.d/51-android.rules}} を編集して、(''mtp-detect'' を実行後に見られる) {{ic|idVendor}} と {{ic|idProduct}} に適用できるようにします。行の最後にはあなたのユーザ {{ic|<nowiki>OWNER="<user>"</nowiki>}} を追加してください。
デバイスをアンマウントするには次のコマンドを使用:
 
$ fusermount -u ~/mtp
 
   
  +
{{ic|~/mnt}} 上にデバイスをマウントします:
=== go-mtpfs ===
 
  +
  +
$ go-mtpfs ~/mnt
   
 
{{Note|
 
{{Note|
  +
* 複数のデバイスを使用する際は、{{ic|-d}} フラグを使用してデバイスを指定する必要があるかもしれません ({{ic|mtp-detect}} を実行することで id を調べられます)。
* デバイスによってはファイルの書き込みについて go-mtpfs は mtpfs/jmtpfs よりも良いパフォーマンスを発揮します。速度が遅いときは試してみて下さい。
 
* 外付け SD カードが存在す場合は go-mtpfs によるマウント失敗しま外付け SD カードがるとは取り除いからマウントしてみてください。
+
* 外 SD カードがと、{{ic|go-mtpfs}} でのマウント失敗するかもせん。SD カードが存在してい状態でデバイスへアクセスしようして go-mtpfs がエラーを吐く場合、SD カードを取り出し、もう一度マウントしてみてください。}}
}}
 
   
  +
== libmtp ==
上記のやり方では芳しい結果が得られない場合、[[AUR]] から {{AUR|go-mtpfs-git}} を試してみて下さい。以下の手順は Samsung Galaxy Nexus GSM, Asus/Google Nexus 7 (2012年の第一世代), Samsung Galaxy S 3 mini, Google Nexus 4 でテスト済みです (Nexus 4 で動作する mtp ソフトウェアは go-mtpfs だけでした。usb デバッグを有効にして、メディアデバイスとして接続する設定です)。
 
   
  +
[http://libmtp.sourceforge.net/ libmtp] はライブラリ MTP 実装です。いくつかのコマンドラインツールの例も付属しています ({{ic|pacman -Ql libmtp}} でリストアップできます)。
{{Pkg|android-udev}} をインストールしてから {{ic|/etc/udev/rules.d/51-android.rules}} を編集し、''mtp-detect'' で確認できるあなたの idVendor と idProduct を使うようにしてください。行末にカンマと {{ic|<nowiki>OWNER="<user>"</nowiki>}} を追加して、ファイルを保存します。
 
   
  +
{{Pkg|libmtp}} パッケージを[[インストール]]してください。
* "fuse" グループにユーザーを追加:
 
# gpasswd -a [user] fuse
 
   
  +
デバイスを検出するには {{ic|mtp-detect}} を実行してください。
* "fuse" グループが存在しない場合は次のコマンドでグループを作成:
 
# groupadd fuse
 
   
ログアウトまは再起動して変更適用してください。
+
エラーが返ってくる場合、あなのユーザが {{ic|adbusers}} [[ユーザグループ]]に属していること確認してください。
   
  +
{{ic|mtp-connect}} コマンドでファイルを転送できます。
* "Android" という名前のマウントポイントを作成するために次のコマンドを実行:
 
$ mkdir Android
 
   
  +
=== フロントエンド ===
* スマートフォンをマウントするには次を使用:
 
$ go-mtpfs Android
 
   
  +
{{App|gMTP|libmtp のためのグラフィカルフロントエンド。デスクトップに依存しない GUI で Android デバイスに接続し、ファイルを管理できます。|https://gmtp.sourceforge.io/|{{Pkg|gmtp}}}}
* スマートフォンをアンマウントするには:
 
$ fusermount -u Android
 
   
  +
== メディアプレイヤー ==
上の例と同じように {{ic|.bashrc}} にエイリアスを作成すると便利です。
 
   
  +
[[Amarok]] などの音楽プレイヤーで MTP デバイスを使うこともできます。これには {{ic|/etc/udev/rules.d/51-android.rules}} を編集する必要があります (以下では MTP デバイスの例として Galaxy Nexus を使っています):
=== simple-mtpfs ===
 
   
  +
次を実行してください:
MTP デバイスのための別の FUSE ファイルシステムです。{{Pkg|mtpfs}} よりも信頼性が上回っています。AUR から {{AUR|simple-mtpfs}} をインストールするか、ソースからビルドすることができます。以下のコマンドは root で実行しないで下さい。
 
   
  +
$ lsusb
MTP デバイスをリストアップするには次を実行:
 
   
  +
あなたのデバイスを探してください。以下のように出力されるはずです:
$ simple-mtpfs --list-devices
 
  +
Bus 003 Device 011: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II], GT-P7500 [Galaxy Tab 10.1]
   
  +
{{ic|/etc/udev/rules.d/51-android.rules}} へのエントリは以下のようになります:
MTP デバイス (この例では1番目のデバイス) をマウントするには次を実行
 
  +
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0666", OWNER="[username]"
   
  +
udev ルールをリロードしてください:
$ simple-mtpfs --device 1 ~/mnt
 
  +
# udevadm control --reload
   
  +
== ファイルマネージャ統合 ==
アンマウントするには次を実行:
 
   
  +
MTP で接続された Android デバイスのストレージのコンテンツをファイルマネージャで閲覧するには、対応するプラグインをインストールしてください:
$ fusermount -u ~/mnt
 
   
  +
* [[GVFS]] (GNOME Files) を使用するファイルマネージャの場合は、MTP 用の {{Pkg|gvfs-mtp}} か PTP サポート用の {{Pkg|gvfs-gphoto2}} をインストールしてください。
=== Android File Transfer ===
 
  +
* KIO (KDE の Dolphin) を使用するファイルマネージャの場合は、{{Pkg|kio-extras}} (dolphin の依存パッケージ) に MTP サポートが含まれています。
   
  +
必要なパッケージをインストールしたら、デバイスがファイルマネージャに自動的に表示され、URL (例: {{ic|mtp://[usb:002,013]/}}) からアクセスできるはずです。
;FUSE インターフェイス
 
   
  +
=== gvfs-mtp ===
デバイスを {{ic|~/my-device}} にマウント:
 
   
  +
{{Pkg|gvfs-mtp}} は公式リポジトリで利用可能です。
$ mkdir ~/my-device
 
$ aft-mtp-mount ~/my-device
 
   
  +
{{ic|lsusb}} を使うことで、あなたのデバイスの情報を取得できます。Bus 番号と Device 番号は、{{ic|gvfs-mtp}} で使ったり、[[udev]] ルールを作成する際のデバイス ID として使ったりできます。
アルバムアートを表示したい場合、{{ic|albumart.xxx}} という名前を付けて一番最初にフォルダに配置してください。それから他のファイルをコピーしてください。また、fuse では ui/cli ファイル転送よりも7-8倍転送が遅くなるので注意してください。
 
  +
Bus '''002''' Device '''018''': ID '''04b7''':'''88a9''' Compal Electronics, Inc.
   
  +
検出された、MTP が有効化されたデバイスを見るには
;Qt ユーザーインターフェイス
 
   
  +
''gio mount'' を使うか:
アプリケーションを起動して、コピー先のフォルダを選択してツールバーのボタンをクリックしてください。利用できるオプション: ''Upload Album'', ''Upload Directory'', ''Upload Files''。''Upload Album'' はアルバムカバーのディレクトリを検索して、適当なカバーを設定します。
 
   
  +
{{hc|gio mount -li {{!}} grep -e ^Volume -e activation_root|2=
=== メディアプレイヤー ===
 
  +
Volume(0): MT65xx Android Phone
  +
activation_root=mtp://[usb:'''002''','''018''']/
  +
}}
   
  +
''lsusb'' を使ってください:
Amarok などの音楽プレイヤーで MTP デバイスを使うこともできます。これには {{ic|/etc/udev/rules.d/51-android.rules}} を編集する必要があります (以下では MTP デバイスの例として Galaxy Nexus を使っています):
 
   
  +
{{hc|lsusb -v 2> /dev/null {{!}} grep -e Bus -e iInterface -e bInterfaceProtocol|
まず次を実行してデバイスを確認してください:
 
  +
...
$ lsusb
 
  +
Bus 002 Device 018: ID 04b7:88a9 Compal Electronics, Inc.
以下のように表示されます:
 
  +
bInterfaceProtocol 0
Bus 003 Device 011: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II], GT-P7500 [Galaxy Tab 10.1]
 
  +
iInterface 5 MTP
上記の場合は以下のようにエントリを記述します:
 
  +
...}}
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0666", OWNER="[username]"
 
記述したら、udev ルールをリロードしてください:
 
# udevadm control --reload
 
   
  +
利用可能なすべての接続済み MTP デバイスをマウントするには、インラインスクリプトを使用してください:
{{Note|MTP をインストールした後、デバイスを認識させるために再起動が必要なことがあります。}}
 
   
  +
gio mount -li | awk -F= '{if(index($2,"mtp") == 1)system("gio mount "$2)}'
== トラブルシューティング ==
 
   
  +
gvfs-mtp でコマンドからマウント/ディスマウントするには、Bus 番号と Device 番号を使用してください。例えば、マウントする場合は {{ic|gio mount mtp://[usb:001,007]/}}、アンマウントする場合は {{ic|gio mount -u mtp://[usb:001,007]/}} となります。マウント済みデバイスは ''mtp:host='' で始まるディレクトリ内で利用でき、''/run/user/$UID/gvfs/'' 下に配置されています。
=== libmtp ===
 
   
  +
gvfs で MTP デバイスの自動マウントを無効化するには、{{ic|/usr/share/gvfs/mounts/mtp.mount}} 内の ''AutoMount'' 変数の値を ''true'' から ''false'' に変更してください。
==== 未知のデバイス ====
 
   
  +
{{Note|(上記の) ファイルマネージャは自動マウントのオプションを独自に持つことができます。起動時に、これらのファイルマネージャは利用可能なマウント可能デバイスをすべてチェックします。}}
以下のようなメッセージが表示される場合:
 
   
  +
ファイルマネージャにあなたのデバイスが表示されない場合、[[#libmtp]] にネイティブサポートが存在せず、[https://sourceforge.net/p/libmtp/code/ci/HEAD/tree/src/music-players.h サポートされているデバイス]のリストに入っていません。コマンドラインを使ってマウントを試みる場合は、エラーが発生する場合もあります:
Device 0 (VID=XXXX and PID=XXXX) is UNKNOWN.
 
Please report this VID/PID and the device model to the libmtp development team
 
   
  +
{{bc|1=Device 0 (VID=''XXXX'' and PID=''XXXX'') is UNKNOWN.
デバイスが次のリストに含まれているか確認する必要があります: [http://sourceforge.net/p/libmtp/code/ci/HEAD/tree/src/music-players.h Supported devices list]。リストに入っていない場合は、開発チームに報告してください。リストに含まれている場合は、libmtp が少しだけ旧式になっている可能性があります。libmtp によって適切に使用されるように、デバイスを次のファイルに追加することが可能です:
 
  +
Please report this VID/PID and the device model to the libmtp development team}}
/usr/lib/udev/rules.d/69-libmtp.rules
 
   
  +
デバイスをファイルマネージャに表示させるための回避策は、対象デバイス用の [[udev]] ルールを記述することです。しかし、MTP 接続を用いてデバイスをマウントできる保証はありません。
==== Unable to enumerate USB device ====
 
   
  +
'''vendorId''':'''productID''' という形式の ID を使用してください (例: '''04b7''':'''88a9''')。そして、設定ファイルを作成して udev ルールを作成してください:
システムログ ({{ic|journalctl}}) に以下のようなメッセージが表示される場合:
 
   
  +
{{hc|/etc/udev/rules.d/51-android.rules|<NOWIKI>
usb usb4-port2: unable to enumerate USB device
 
  +
SUBSYSTEM=="usb", ATTR{idVendor}=="04b7", ATTR{idProduct}=="88a9", MODE="0660", GROUP="uucp", ENV{ID_MTP_DEVICE}="1", SYMLINK+="libmtp"</NOWIKI>
  +
}}
  +
udev ルールを再読込してください:
   
  +
# udevadm control --reload
以下のコマンドを実行してみてください [https://bbs.archlinux.org/viewtopic.php?pid=1087323#p1087323]:
 
   
  +
[[gvfs]] をサポートしているファイルマネージャは、MTP デバイスを表示でき、[[#libmtp]] によってサポートされていればマウントできます。しかし、サポートがなく、デバイスを開けない場合、携帯電話の設定を PTP に変更し、{{Pkg|gvfs-gphoto2}} をインストールして、最低限、写真へのアクセスをできるようにしてください。PTP のマウントを行うコマンドラインは MTP デバイスのそれに少し似ています: {{ic|gio mount gphoto2://[usb:002,019]/}}。
# modprobe -vr uhci_hcd
 
# modprobe -va ohci_hcd
 
# modprobe -va uhci_hcd
 
   
  +
{{Note|デバイスへのアクセスが制限され、コマンドラインから標準的なコマンド (例: {{ic|cp}}、{{ic|ls}}) を使用できない場合、[[gvfs]] 独自の代替コマンドを探してみてください: {{ic|ls -1 /usr/bin/gvfs-*}}。}}
上記のコマンドで直る場合、以下の内容で {{ic|/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
 
   
  +
=== libmtp (gvfs-mtp): ファイルマネージャ (nautilus、pcmanfm、vifm など) が Android デバイスの DCIM/Camera にアクセスする際にハングする ===
=== gvfs-mtp ===
 
   
  +
症状: DCIM/Camera ディレクトリに入る事以外、うまく機能する。この場合、ファイルマネージャがフリーズし、コマンドラインからそのディレクトリで {{ic|ls}} を実行することさえできなくなるs。
{{Pkg|gvfs-mtp}} パッケージをインストールしても、デバイスがファイルマネージャに表示されない場合、デバイスが自動マウントされるように udev ルールを書く必要があるかもしれません。
 
   
  +
可能性の高い原因は libmtp のバグです。
デバイスを接続して、vendor-id と product-id をそれぞれ取得してください:
 
   
  +
どうやら {{ic|20180915_180351(0).jpg}} のような名前のファイルが原因のようです。例として、Samsung の電話はそのような名前のファイルを作成する傾向にあります。
$ lsusb
 
Bus 001 Device 007: ID 0421:0661 Nokia Mobile Phones Lumia 920
 
(...)
 
   
  +
これに関するチケット ([https://sourceforge.net/p/libmtp/bugs/1830/ 1]、[https://sourceforge.net/p/libmtp/bugs/1808/ 2] など) と質問 ([https://askubuntu.com/questions/995383/nautilus-hangs-on-accessing-dcim-camera-on-android 1]、[https://askubuntu.com/questions/1030736/cant-open-photos-stored-on-android-system-from-ubuntu/1148034#1148034 2]) が複数存在します。
ID の文字の後の2つの数字が ''vendorID'' : ''productID'' です。
 
   
  +
可能な回避策は、そのようなディレクトリに対しては [[#FUSE ファイルシステム]] にある go-mtpfs などの異なるオプションを使うか、あるいは、どうにかして携帯カメラのファイル命名ポリシーを変更する (または、[https://opencamera.sourceforge.io/ Open Camera] などの他のカメラアプリに変える) ことです。
ID がわかったら udev ルールを作成します。例:
 
   
  +
=== jmtpfs: 初回アクセス時に入出力エラー ===
# nano /etc/udev/rules.d/51-android.rules
 
   
  +
症状: jmtpfs はマウントに成功するが、デバイス上のファイルに ({{ic|ls}} などで) アクセスすると、エラーが報告される:
ルールの中身は以下のようにしてください:
 
   
  +
cannot access <mount-point>: Input/output error
ATTR{idVendor}=="YOUR VENDOR ID HERE", ATTR{idProduct}=="YOUR PRODUCT ID HERE", SYMLINK+="libmtp", MODE="660", ENV{ID_MTP_DEVICE}="1"
 
   
  +
これはセキュリティ機能のようです: 携帯電話がロックスクリーンによってロックされているとき、MTP は機能しません。電話をアンロックすれば、ケーブルで繋がっている限り再び機能するはずです。
udev ルールをリロードします:
 
   
  +
=== kio-mtp: 「ファイルマネージャで開く」アクションを使用できない ===
# udevadm control --reload
 
   
  +
「ファイルマネージャで開く」アクションを使うことができない場合、{{ic|/usr/share/solid/actions/solid_mtp.desktop}} ファイルを編集することでこの問題を回避できます。
そしてシステムを再起動してください。これで (Thunar などの) ファイルマネージャは MTP デバイスを自動でマウントできるようになったはずです [https://bbs.archlinux.org/viewtopic.php?id=180719]。
 
   
  +
{{ic|1=Exec=kioclient exec mtp:udi=%i/}} の行を {{ic|1=Exec=dolphin "mtp:/"}} に変更してください。
=== jmtpfs ===
 
   
  +
=== kio-mtp が異なるサービスから同時に呼び出される ===
jmtpfs でマウントは成功するがデバイス上のファイルにアクセスしようとすると以下のエラーが表示される場合:
 
   
  +
[https://bbs.archlinux.org/viewtopic.php?pid=1657736#p1657736 このフォーラム]で言及されている通り、mtpfs と kio-mtp (及び、音楽プレイヤを含む、kio-mtp を使用する、衝突するサービス) を並列に使用するのは避けるべきです。
cannot access <mount-point>: Input/output error
 
   
  +
例えば、MTP サービス用の Amarok のプラグインは、Dolphin (plasma) が異なるモデルの電話のファイルにアクセスできなくするかもしれません。そのプラグインをオフにすることで、少なくとも1つのユーザに対してはこれを解決できます。
上記のエラーはセキュリティ機能が原因です。スマートフォンがロック画面でロックされているときに MTP は使用できません。ロックを解除してもういちど試してみてください。
 
   
  +
=== Android File Transfer: connect failed: no MTP device found ===
=== kio-mtp ===
 
  +
  +
{{Pkg|android-file-transfer}} をインストールした後に MTP デバイスをマウントしようとすると以下のエラーが発生する場合:
  +
  +
{{hc|$ aft-mtp-mount /path/to/folder|
  +
connect failed: no MTP device found
  +
}}
   
  +
{{Pkg|android-udev}} をインストールしてください。このパッケージには製造業者/デバイス毎に対して MTP デバイスの [[udev|udev ルール]]が含まれていて、[[ADB]] や MTP をより簡単に使えるようにします。
"ファイルマネージャで開く"が使えない場合は、{{ic|/usr/share/apps/solid/actions/solid_mtp.desktop}} ファイルを編集することで問題を解決できます。
 
   
  +
{{TranslationStatus|Media Transfer Protocol|2023-03-22|773401}}
次の行を:
 
Exec=kioclient exec mtp:udi=%i/
 
以下のように変更してください:
 
Exec=dolphin "mtp:/"
 

2023年3月22日 (水) 16:38時点における最新版

関連記事

メディア転送プロトコル (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

メディアプレイヤー

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]

/etc/udev/rules.d/51-android.rules へのエントリは以下のようになります:

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

udev ルールをリロードしてください:

# udevadm control --reload

ファイルマネージャ統合

MTP で接続された Android デバイスのストレージのコンテンツをファイルマネージャで閲覧するには、対応するプラグインをインストールしてください:

  • GVFS (GNOME Files) を使用するファイルマネージャの場合は、MTP 用の gvfs-mtp か PTP サポート用の gvfs-gphoto2 をインストールしてください。
  • KIO (KDE の Dolphin) を使用するファイルマネージャの場合は、kio-extras (dolphin の依存パッケージ) に MTP サポートが含まれています。

必要なパッケージをインストールしたら、デバイスがファイルマネージャに自動的に表示され、URL (例: mtp://[usb:002,013]/) からアクセスできるはずです。

gvfs-mtp

gvfs-mtp は公式リポジトリで利用可能です。

lsusb を使うことで、あなたのデバイスの情報を取得できます。Bus 番号と Device 番号は、gvfs-mtp で使ったり、udev ルールを作成する際のデバイス ID として使ったりできます。

Bus 002 Device 018: ID 04b7:88a9 Compal Electronics, Inc.

検出された、MTP が有効化されたデバイスを見るには

gio mount を使うか:

gio mount -li | grep -e ^Volume -e activation_root
Volume(0): MT65xx Android Phone
  activation_root=mtp://[usb:002,018]/

lsusb を使ってください:

lsusb -v 2> /dev/null | grep -e Bus -e iInterface -e bInterfaceProtocol
...
Bus 002 Device 018: ID 04b7:88a9 Compal Electronics, Inc. 
      bInterfaceProtocol      0 
      iInterface              5 MTP
...

利用可能なすべての接続済み MTP デバイスをマウントするには、インラインスクリプトを使用してください:

gio mount -li | awk -F= '{if(index($2,"mtp") == 1)system("gio mount "$2)}'

gvfs-mtp でコマンドからマウント/ディスマウントするには、Bus 番号と Device 番号を使用してください。例えば、マウントする場合は gio mount mtp://[usb:001,007]/、アンマウントする場合は gio mount -u mtp://[usb:001,007]/ となります。マウント済みデバイスは mtp:host= で始まるディレクトリ内で利用でき、/run/user/$UID/gvfs/ 下に配置されています。

gvfs で MTP デバイスの自動マウントを無効化するには、/usr/share/gvfs/mounts/mtp.mount 内の AutoMount 変数の値を true から false に変更してください。

ノート: (上記の) ファイルマネージャは自動マウントのオプションを独自に持つことができます。起動時に、これらのファイルマネージャは利用可能なマウント可能デバイスをすべてチェックします。

ファイルマネージャにあなたのデバイスが表示されない場合、#libmtp にネイティブサポートが存在せず、サポートされているデバイスのリストに入っていません。コマンドラインを使ってマウントを試みる場合は、エラーが発生する場合もあります:

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

デバイスをファイルマネージャに表示させるための回避策は、対象デバイス用の udev ルールを記述することです。しかし、MTP 接続を用いてデバイスをマウントできる保証はありません。

vendorId:productID という形式の ID を使用してください (例: 04b7:88a9)。そして、設定ファイルを作成して udev ルールを作成してください:

/etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="04b7", ATTR{idProduct}=="88a9", MODE="0660", GROUP="uucp", ENV{ID_MTP_DEVICE}="1", SYMLINK+="libmtp"

udev ルールを再読込してください:

# udevadm control --reload

gvfs をサポートしているファイルマネージャは、MTP デバイスを表示でき、#libmtp によってサポートされていればマウントできます。しかし、サポートがなく、デバイスを開けない場合、携帯電話の設定を PTP に変更し、gvfs-gphoto2 をインストールして、最低限、写真へのアクセスをできるようにしてください。PTP のマウントを行うコマンドラインは MTP デバイスのそれに少し似ています: gio mount gphoto2://[usb:002,019]/

ノート: デバイスへのアクセスが制限され、コマンドラインから標準的なコマンド (例: cpls) を使用できない場合、gvfs 独自の代替コマンドを探してみてください: ls -1 /usr/bin/gvfs-*

トラブルシューティング

libmtp (gvfs-mtp): ファイルマネージャ (nautilus、pcmanfm、vifm など) が Android デバイスの DCIM/Camera にアクセスする際にハングする

症状: DCIM/Camera ディレクトリに入る事以外、うまく機能する。この場合、ファイルマネージャがフリーズし、コマンドラインからそのディレクトリで ls を実行することさえできなくなるs。

可能性の高い原因は libmtp のバグです。

どうやら 20180915_180351(0).jpg のような名前のファイルが原因のようです。例として、Samsung の電話はそのような名前のファイルを作成する傾向にあります。

これに関するチケット (12 など) と質問 (12) が複数存在します。

可能な回避策は、そのようなディレクトリに対しては #FUSE ファイルシステム にある go-mtpfs などの異なるオプションを使うか、あるいは、どうにかして携帯カメラのファイル命名ポリシーを変更する (または、Open Camera などの他のカメラアプリに変える) ことです。

jmtpfs: 初回アクセス時に入出力エラー

症状: jmtpfs はマウントに成功するが、デバイス上のファイルに (ls などで) アクセスすると、エラーが報告される:

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

これはセキュリティ機能のようです: 携帯電話がロックスクリーンによってロックされているとき、MTP は機能しません。電話をアンロックすれば、ケーブルで繋がっている限り再び機能するはずです。

kio-mtp: 「ファイルマネージャで開く」アクションを使用できない

「ファイルマネージャで開く」アクションを使うことができない場合、/usr/share/solid/actions/solid_mtp.desktop ファイルを編集することでこの問題を回避できます。

Exec=kioclient exec mtp:udi=%i/ の行を Exec=dolphin "mtp:/" に変更してください。

kio-mtp が異なるサービスから同時に呼び出される

このフォーラムで言及されている通り、mtpfs と kio-mtp (及び、音楽プレイヤを含む、kio-mtp を使用する、衝突するサービス) を並列に使用するのは避けるべきです。

例えば、MTP サービス用の Amarok のプラグインは、Dolphin (plasma) が異なるモデルの電話のファイルにアクセスできなくするかもしれません。そのプラグインをオフにすることで、少なくとも1つのユーザに対してはこれを解決できます。

Android File Transfer: connect failed: no MTP device found

android-file-transfer をインストールした後に MTP デバイスをマウントしようとすると以下のエラーが発生する場合:

$ aft-mtp-mount /path/to/folder
connect failed: no MTP device found

android-udev をインストールしてください。このパッケージには製造業者/デバイス毎に対して MTP デバイスの udev ルールが含まれていて、ADB や MTP をより簡単に使えるようにします。

翻訳ステータス: このページは en:Media Transfer Protocol の翻訳バージョンです。最後の翻訳日は 2023-03-22 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。