MTP対応デバイスをUbuntuで動作させるには?


69

以来のUbuntu 13.04を介して外部機器へのストレージアクセスMTPことになっている箱から出して動作し GVFS-MTPモジュールを介して。

この質問はGalaxy Nexusに関するものですが、他のAndroidデバイス、Windows Phone、MTP対応のメディアプレーヤーもサポートされています。

トラブルシューティングを参照このanwserを


Galaxy NexusでMTPを介してファイル転送を動作させるのにかなりの問題があります。私はKubuntu 11.10 64ビットを使用していますが、これは私がやったことであり、結果は次のとおりです:

  1. にデバイスのルールを追加しました/etc/udev/rules.d/51-android.rules。ルールは次のとおりで、以下に対して機能しadbます。

    SUBSYSTEMS=="usb", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6860", MODE="0666", OWNER="leob" #Galaxy Nexus
    
  2. 再起動udev(および念のためコンピューター)。

Adbは機能し、MTP経由でデバイスから読み取るためのすべての方法が機能しているようです(mtpfs、gmtpでマウントして、mtp-toolsパッケージを直接使用しようとしました)。ただし、デバイスに書き込もうとすると、何も動作しません。

例として、実行mtp-newfolder test_dir 0 0すると次の出力が得られます。

libmtp version: 1.1.0
Device 0 (VID=04e8 and PID=6860) is a Samsung GT-P7510/Galaxy Tab 10.1.
Folder creation failed.
ERROR: Could not close session!

mtp-foldersデバイスを再接続せずにmtp-newfolderに障害が発生した後に実行すると、次の出力が表示されます。

Attempting to connect device(s)
Device 0 (VID=04e8 and PID=6860) is a Samsung GT-P7510/Galaxy Tab 10.1.
PTP_ERROR_IO: failed to open session, trying again after resetting USB interface
LIBMTP libusb: Attempt to reset device
mtp-folders: Successfully connected
Friendly name: (NULL)
Error 1: Get Storage information failed.
Error 2: PTP Layer error 02fe: get_all_metadata_fast(): could not get proplist of all    objects.
Error 2: (Look this up in ptp.h for an explanation.)
Error 2: PTP Layer error 02fe: get_handles_recursively(): could not get object handles.
Error 2: (Look this up in ptp.h for an explanation.)
LIBMTP_Get_Storage()
: Resource temporarily unavailable
OK.

dmesgには次のものが付属しています。

[ 1000.912082] usb 2-4: reset high speed USB device number 7 using ehci_hcd
[ 1001.045877] usb 2-4: usbfs: process 3166 (mtp-folders) did not claim interface 0 before use

誰が何をすべきかについて何か考えがありますか?

編集:

PTPモードも試しました。繰り返しますが、読み取りは正常に機能しますが、デバイスに何かを書き込むことはできません。


私はそれがサムスンだとは思わない…。そしてそれはアンドロイドだと思う。Honeycomb搭載のデバイスは、MTPのみを使用する必要がある場合とまったく同じ方法です。これは、すべての2.3以降のAndroidデバイスがそうなる方法だと思います。

回答:


37

Ubuntu 13.04以降、MTPを介した外部デバイスへのストレージアクセスは、GVFS-MTPモジュールを介してそのまま使用できます。

関連質問:将来のUbuntuリリースでmtpサポートを改善する計画はありますか?

トラブルシューティングについては、この回答を参照してください。


私にとってはlibmtp、システムに最新のファイルがないという問題でした。だから私は問題を修正し、他の人を助けるためにこの記事を書きました

リンクの概要:libmtp古いUbuntuリリースにバンドルされているバグがありました。このバグはの最新のソースですでに修正されていlibmtpます。


1
この問題は、Ubuntu 12.04のパッケージで修正されているようです。そのため、勇気があればそれを使用できます。私はからそれらをつかんlaunchpad.net/ubuntu/+source/libmtp/1.1.1-1し、システムのパッケージを作成した(とgmtpに同じ)
タトゥLahtela

@シャノン。ありがとう。これが最善の解決策です。私が最初にそれを見つけたならいいのに。
MountainX

2
nexusにアクセスしようとすると、rhythmboxがフリーズし、エラーが発生します(LIBMTP_Send_Representative_Sample():オブジェクト情報を取得できませんでした)。nautilusは次を提供します。カメラの初期化エラー:-60:デバイスをロックできませんでした。うん
-waspinator

ない1.1.1最新のMTPを取得する命令を更新していいだろう
Kostiantyn Rybnikov

21

あなたは試してみましたビラルアクタールさんの提案をomgubuntu

MTPFSを使用してAndroidスマートフォンまたはタブレットをUbuntuに接続する

  1. セットアップ

    まず、必要なツールをインストールします sudo apt-get install mtp-tools mtpfs

    Galaxy Nexusをコンピューターに接続します。電話機で通知ドロワーを開き、「USB接続タイプ」をクリックします。MTPが選択されていることを確認してください。

    Android USB接続設定を示す画像

    次に、次のコマンドを実行します。

    mtp-detect | grep idVendor
    mtp-detect | grep idProduct
    

    次のような出力が得られます。 ここに画像の説明を入力してください

    次に、これらのコマンドを実行します。

    gksu gedit /etc/udev/rules.d/51-android.rules
    

    Geditウィンドウが開きます。このテキストをすべて1行で入力します。

    SUBSYSTEM=="usb", ATTR{idVendor}=="VENDORID", ATTR{idProduct}=="PRODUCTID", MODE="0666"
    

    交換するVENDORIDidVendor、先ほど書き留めていました。同様に、書き留めておいたものPRODUCTIDと交換しidProductます。私の場合、それらはそれぞれで04e8あり、685cそれぞれ異なっていたかもしれません。

    ファイルを保存して閉じます。次に、電話を切断し、次のコマンドを実行します。

    sudo service udev restart
    sudo mkdir /media/GalaxyNexus
    sudo chmod a+rwx /media/GalaxyNexus
    sudo adduser $USER fuse
    

    $USERはデフォルトのシェル変数であり、追加するユーザー(通常は自分)でなければなりません。ここで、次のコマンドを実行します。

    gksu gedit /etc/fuse.conf
    

    Geditウィンドウで、次のように#最後の行の先頭(で始まる行)を削除します#user_allow_other

    ここに画像の説明を入力してください

    ほぼ終わりです!次に、コンピューターを再起動してから、次の3つのコマンドを実行します。

    echo "alias android-connect=\"mtpfs -o allow_other /media/GalaxyNexus\"" >> ~/.bashrc
    echo "alias android-disconnect=\"fusermount -u /media/GalaxyNexus\"" >> ~/.bashrc
    source ~/.bashrc
    
  2. 使用法

    電話を接続し、電話がMTPを使用していることを確認して実行しandroid-connectます。

    出来上がり!Nautilusを使用してAndroidスマートフォンのコンテンツを閲覧できるようになりました。ファイルマネージャーを起動し、サイドバーで[GalaxyNexus]をクリックして、USBスティックの場合と同じように電話のコンテンツを参照します。通常のファイルシステムと同様に、ファイルを追加、削除、および変更することもできます。

    電話のコンテンツを表示するnautilusのスクリーンショット

    電話を安全に取り外すには、単に実行しandroid-disconnectます。

  3. 結論

    これからはandroid-connect、携帯電話をマウントandroid-disconnectして安全に取り外すために実行するだけです。その他はすべて自動的に処理される必要があります。ケーブル接続でマウントとアンマウントを自動的に行うための多くの方法を試しましたが、これは私が思いつく最高のソリューションでした。

    これらの2つのコマンドを実行するには、root権限は必要ありません。fuseユーザーグループのメンバーであるすべてのユーザーは、rootアクセスなしでこれらのコマンドを実行できる必要があります。

    それでおしまい!Ice Cream Sandwich電話をUbuntuコンピューターに正常に接続しました。プロセスは初心者には長いかもしれませんが、すべてがスムーズに行われるように、誰かが来てこのすべてのGUIを作成すると確信しています。:)


はい、mtpfs-toolsを使用するほとんどの方法をすでに試しました。Shannonが発見したように、それは明らかにlibmtpのバグでした。
レオ

動作しますが、いくつか質問があります。1.そのudev構成は何をしますか、なぜそれなしでは機能しませんか?2.実行時にどのデバイスをマウントするのか、どの魔法でわかるのかmtpfs、または一度に1つの接続デバイスのみをサポートするのか。
バートヴァンヒューケロム

また、(Nautilusを使用して)大きなファイルをコピーすると、非常に高速(50MB / s)でコピーされるように見えますが、その間は何もコピーしません。進行状況バーが100%に達した場合にのみ、実際のコピーが開始されます(およびインターフェイスがハングします)。たぶん、ある種のバッファオプションを無効にできますか?
バートヴァンヒューケロム

残念ながら、私はあなたが望む答えを知りません。申し訳ありません。
デスグア

これはすべて完了しましたが、Android接続の試行時にこのメッセージが表示されます:fusermount:/etc/fuse.confを開くことができませんでした:fusermount:オプションallow_otherは、/ etc / fuse.confただし、指示に従って/etc/fuse.confを編集しました。
ドミトリーシュベドフ

21

GVFSを使用したMTPを介したデバイスの接続

Ubuntu 13.04ストレージでは、MTP対応デバイスへのアクセスはGVFSバックエンドを介してすぐに機能します。見ていてください、将来のUbuntuのリリースのMTPサポートを改善する計画はありますか?13.04より前のインストール手順について。

このソリューションは、MTP機能を提供するすべてのAndroidデバイス、およびおそらくWindows PhonePortable Media PlayersなどのMTP機能を備えたAndroid以外のすべてのデバイスで機能するはずです。

混同しないでください

多少の混乱がありました。物事を整理してみましょう。

  • あなたはしていない、あなたの保証が無効になる場合があり、何もする必要があります!

    • デバイスをルート化する必要はありません。
    • ブートローダーのロックを解除する必要はありません。(Android her eの手順を参照できます。)

    ロック解除とは、この回答のオペレーティングシステムのロック画面を指します。

  • 特定のudevルールを介して、ADB、fastbootなどのデバイスへの開発者アクセスを設定する必要はありません。(あなたは章にAndroidのための指示を見つけることができるUSBのアクセスの設定、彼女の電子または彼女の電子を。)

  • 私の知る限り、FUSEは必要ありませんし、FUSE関連のオプションを設定する必要もありません。

問題のトラブルシューティング

  1. デバイスにファイルを配置できません。

    UbuntuでMTPを介してデバイスのストレージにアクセスするには、デバイスのロック解除する必要があります。

    ロックおよびロック解除状態のnautilusのデバイスを表示

  2. デバイスをマウントできないというエラーメッセージが表示されます。

    以下のエラーメッセージが表示される場合は、デバイスを一度再接続してみてください。

    接続時にポップアップする可能性のあるエラーメッセージ

    エラーメッセージが再び表示される場合は、ランチャーから新しいnautilusウィンドウを開き(デバイスのアイコンをクリックすることをお勧めします)、おそらく現在のnautilusウィンドウを閉じます。おそらく関連:Androidデバイスの1つを無効にするudevルールを作成する方法は?

  3. デバイスにudevルールがあるかどうかを確認します

    ターミナルを開き、と入力しlsusbます。出力でデバイスを見つけ、IDを書き留めます(例:)0fce:01b1。最初の部分はベンダーID、最後の部分は製品IDです。

    対応するmtp udevルールファイルを開き、nano /lib/udev/rules.d/69-libmtp.rules製品IDを検索します(Ctrl+を使用W)。見つからない場合は、/etc/udev/rules.d/69-libmtp.rules以下のパターンに従ってカスタムエントリを作成し、再起動する必要があります。

    # SONY Xperia Z2 MTP
    ATTR{idVendor}=="01b1", ATTR{idProduct}=="01b1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
    

    libmtpパッケージ(より正確にはlibmtp-common)に対してバグ報告して、デバイスが将来のバージョンに含まれるようにすることを検討する必要があります。

  4. まだ接続できません

    お使いのデバイスは基礎となるデバイスでサポートされていないかlibmtp、Lumia 620で同じ問題が発生する場合があります。LP#1247572で投稿した回避策(再現手順)に従ってください。NautilusでGVFS-MTP。(このデバイスはここでも問題なく動作しませんが、使用mtp-detectすると役立ちます。)

    デバイスのlibmtpバグトラッカーを検索し、プロジェクトページの新しいデバイスの指示に従ってバグレポートを開く必要があります。

  5. バグトラッカーにはサポートされているデバイスがリストされますが、それでも動作しません

    場合によっては、お使いのディストリビューションに付属しているものよりも新しいlibmtpリリースで、デバイスに関するバグレポートが既に提出され、解決されている可能性があります(例:Motorola Moto G)。その場合は、公式リポジトリが更新されるのを待つか、更新されたPPAを探す必要があります。

    公式のUbuntuソフトウェアチャンネルおよびプライベートPPAで利用可能なすべてのlibmtpバージョンの更新されたリストは、ここにあります信頼できないアーカイブの「libmtp」の他のバージョンを展開してください)。2014/02/13現在、Matthieu BaertsによるこのPPAはUbuntuで利用可能な最新のlibmtpパッケージを提供しています。

    警告:このPPAには、さまざまな、おそらく不安定なパッケージが含まれています。システムに追加することはお勧めしません。代わりに、libmtpパッケージを個別にダウンロードして、システムに手動でインストールできます。

    さらに先に進む前に、PPAとそのリスクに精通してください。次の手順に進む前に、元のパッケージの復元に関する次の段落もお読みください。

    1. ヘッドPPAのパッケージの詳細ページとlibmtpのエントリを展開
    2. :以下のパッケージをダウンロードしてlibmtp-commonlibmtp-runtimelibmtp9mtp-tools。ご使用のシステムに適したアーキテクチャを選択してください(これは通常になりますamd64)。

      2014/02/13現在のパッケージリンクは次のとおりです。libmtp- commonlibmtp-runtimelibmtp9mtp-tools

    3. dpkgを使用して、更新されたパッケージを手動でインストール$HOME/Downloadsします(ダウンロードフォルダーに変更し、他のdebファイルが存在しないことを確認します。

      cd "$HOME/Downloads"
      sudo dpkg -i *.deb
      
    4. すべてが正常にインストールされたら、コンピューターを再起動し、Androidデバイスのロックを解除し、USB経由で接続すると、ファイルマネージャーに表示されます。

    これは、Motorola Moto Gで(@Glutanimate)でうまく機能しました。Ubuntu12.04 LTSを実行していたため、最初にの更新バージョンをインストールする必要がありましたgnome-gvfs。詳細については、上部の13.04より前のインストール手順を参照してください。

    何か問題が発生した場合、またはデバイスがまだ認識されない場合に変更を取り消すには、元のパッケージを手動でインストールする必要があります。ヘッドlibmtpソースの概要とは、あなたのUbuntuのリリースを見つけます。前の手順2で行ったように、問題のエントリを展開し、パッケージのダウンロードに進みます。手順3の説明に従ってインストールを続行し、システムを再起動します。すべてが正常に戻ります。


1
「混同してはいけない」の+1は、しかし、私のギャラクシーS3ミニでは動作しません:(
ヒューゴデアhungrige

Android 4.1.2を搭載したSamsung Galaxyタブレットで働いていましたが、外出先でファイルを編集できません。その解決策もありますか?
ヴェスノグ14

「一部のガイドでは、51-android.rulesというファイルにudevルールを追加することを推奨しています。これらはMTP用ではありません...」 と言ったとき、あなたはすべての信頼性を失いました。udev / rules.d /のルールは完全に柔軟です。51-android-rulesはそれらに最適な場所です。52の電話ルールにルールを適度に配置することもできます
Auspex 14年

@Auspex行はより良く書かれていたかもしれませんが、文句を言う代わりに、あなたはそれをすることができました(それは投稿全体を読んで理解することを必要とするでしょう)。プロフィールを見ると、SEサイトがどのように機能するかを知っていると思います。ファイルをどのように(誤って)管理するか/etcは完全にあなた次第です。上記で説明したように、理想的にはすべてのudevルールにootbを提供する必要があります。そうでない場合は、バグを報告して欠落しているルールをに含めて、/lib/.../69-libmtp.rules誰もが次のリリースに満足するようにしてください。
LiveWireBT 14年

1
@Auspexここで何を達成しようとしているのかわかりません。繰り返しますが、ファイルの管理方法はあなた/etc次第です。/lib/udev/rules.d/69-libmtp.rulesパッケージメンテナが選択したものであり、この問題が発生したユーザーに対して、そのパッケージに対してバグを報告することをお勧めします(回答を更新しました)。それでも問題が解決しない場合は、メンテナに親切に相談するか、独自の回答を投稿してください。私は今、このトピックに関するあなたとのこの会話からお辞儀をしています。
LiveWireBT 14年

5

に基づいたすべてのプログラムには、libmtpまだGalaxy Nexusに問題があるようです(libmtp 1.1.3以降)。gphoto2仕事に基づいたプログラム。

個人的にはgphotofs、同じ名前のパッケージで入手可能なを使用しています。

を使用gphotofs ~/mymountpointしてマウントし、fusermount -u ~/mymountpoint完了したらアンマウントします。


12.04にアップグレードしたばかりで、あなたが言ったようにlibmtp 1.1.3が正しく動作していないようです。これについてもう少し調査する必要があります。gphotofsは完璧に動作していますが、提案をありがとう!
レオ

1
を使用gphotofsすると、空の単一のディレクトリが残ります。
ネイサンオスマン

4

以下をインストールして再起動します。

sudo apt-get install gvfs-backends mtpfs jmtpfs libmtp-common mtp-tools libmtp-dev libmtp-runtime libmtp9 gmtp libdbus-cpp5 libgflags2v5 libgoogle-glog0v5 libmtp-dbg libmtp-doc libmtpserver-dev libmtpserver1 libprocess-cpp3 mtp-server

はい、この答えは「Ubuntu 13.04 [以上];どこでもMTPを介した外部デバイスへのストレージアクセスは、GVFS-MTPモジュールを介してすぐに動作するはずです」にも適用されます。すぐにインストールできない可能性があるためです。MTPデバイスが何らかの形で既に自動マウントされている場合でも!(ただし、読み取り専用アクセスまたはその他の問題が発生します。)
タニウス

1
@tanius MTPは非常に遅いので、もう使用しません。esfile explorerにはftpサーバーがあり、curlを使用してローカルネットワーク上のデバイスにファイルをアップロードするだけです。
mchid

問題の原因には、このコマンドのポイント:The following packages have unmet dependencies: gvfs-backends : Depends: gvfs (= 1.28.2-1ubuntu1~16.04.2) but 1:1.20.3-4salbabix27trusty is to be installed Depends: gvfs-daemons (= 1.28.2-1ubuntu1~16.04.2) Depends: gvfs-libs (= 1.28.2-1ubuntu1~16.04.2) but 1:1.20.3-4salbabix27trusty is to be installed Depends: gvfs-common (= 1.28.2-1ubuntu1~16.04.2) but 1:1.20.3-4salbabix27trusty is to be installed E: Unable to correct problems, you have held broken packages.
NoBugs

1
上記のコメントのようにこれが失敗した場合は、sudo apt-get install --reinstallを使用して「ubuntu-desktop」などを削除して再インストールすることに注意してください。その後、再起動します。
NoBugs

0

最初のステップとして、jmtpfssudo apt-get install jmtpfs端末に- Ctrl+ Alt+ T)をインストールし、でフォルダーを作成しmkdir foldername、でデバイスをマウントしてjmtpfs foldernameから、nautilus(ファイル)に移動します。

デバイスがlibmtpubuntu のバージョンと互換性がない場合。次のように、最新のlibmtp(> 1.1.12)をダウンロードしてビルドする必要があります: libmtpの最新バージョンをインストールするにはどうすればよいですか?

mtp-foldersターミナルまたはグラフィックインターフェイスでも使用しているフォルダを表示できるはずgmtpです。

なしで実行すると、前の手順でエラーが表示される場合がありましたsudo

libusb_open() failed!: Permission denied

sudoを使用しないようにするには/etc/udev/rules.d/51-android.rules、上記のようにデバイスをファイルに追加し(desguaを参照)、ルールをリロードするか再起動する必要があります。


-1

ちょっとした回避策として、ICSベースの電話を古き良きMASS STORAGEに接続してくださいhttp://forum.xda-developers.com/showthread.php?t=1556367

adb install UMS1.0.apk

1
これは一部の電話には適したソリューションですが、電話に別のSDカードがある場合にのみ機能します。元の質問に関連して、これはGalaxy Nexusでは機能しません。
カバーネイル

個別のSDカードを使用しても、大容量記憶装置としてマウントすることは、Androidの新しいバージョンのオプションではないと思います。しかし、「どこかに常にバックドアがあります」ので、私はそれが不可能だと言うまでは行きません。
mchid

それは4年前でした;)
jflaflamme
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.