web-dev-qa-db-ja.com

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

Ubuntu 13.04MTPを介した外部デバイスへのストレージアクセスが想定されているためGVFS-MTPモジュールを介してすぐに使用できます

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

troubleshootingについては、 this 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-newfolderの失敗後にmtp-foldersを実行すると、次の出力が表示されます。

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

69
Leo

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

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

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


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

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

37

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

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

このソリューションは、すべてAndroidデバイスで動作するはずです。MTP機能と、おそらくすべての非AndroidデバイスにWindows PhonesポータブルMedia Players

混同しないでください

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

  • しない保証が無効になる可能性のあることを行う必要があります。

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

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

  • 特定のudevルールを介して、ADB、fastbootなどのデバイスへの開発者アクセスを設定する必要はありません。 (Androidの説明は、SBアクセスの設定her e またはher e の章にあります。)

  • 私の知る限り、FuseもFuse関連オプションも必要ありません。

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

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

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

    showing device in nautilus in locked and unlocked state

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

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

    error message that might pop up when connecting

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

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

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

    nano /lib/udev/rules.d/69-libmtp.rulesと対応するmtp udevルールファイルを開き、製品IDを検索します(使用 Ctrl+W)。見つからない場合は、以下のパターンとrebootに従って/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 packageより正確には libmtp-common )に対して考慮してください。 。

  4. まだ接続できない

    お使いのデバイスは、基になるlibmtpでサポートされていないか、Lumia 620で同じ問題が発生する可能性があります。回避策(再現手順)に従ってください LP#1247572:Nokia Lumia 620 (WP8)nautilusのgvfs-mtpで確実にマウントできません 。 (ここでもデバイスは問題なく動作しませんが、mtp-detectを使用すると役立ちます。)

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

  5. バグトラッカーはデバイスをサポート対象としてリストしますが、それでも動作しません

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

    公式のUbuntuソフトウェアチャンネルとプライベートPPAで利用可能なすべてのlibmtpバージョンの更新されたリストは、 こちら にあります(信頼できないアーカイブ内の 'libmtpの他のバージョン)。/02/13 このPPA Matthieu Baertsによる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経由で接続すると、ファイルマネージャーに表示されます。

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

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

21
LiveWireBT

omgubuntBilal Akhtar's 提案を試みましたか?

MTPFSを使用してAndroid電話またはタブレットをUbuntuに接続する

  1. セットアップ

    最初に、Sudo apt-get install mtp-tools mtpfsを使用して必要なツールをインストールします

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

    image showing Android USB connection settings

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

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

    次のような出力が得られます。 enter image description here

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

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

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

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

    VENDORIDを以前に書き留めたidVendorに置き換えます。同様に、PRODUCTIDを書き留めたidProductに置き換えます。私の場合、それらはそれぞれ04e8685cでしたが、それらはあなたにとって異なるかもしれません。

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

    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を削除します。

    enter image description here

    ほぼ終わりです!次に、コンピューターを再起動してから、次の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スティックの場合と同じように電話のコンテンツを参照します。通常のファイルシステムと同様に、ファイルを追加、削除、および変更することもできます。

    screenshot of nautilus displaying phone contents

    電話を安全に取り外すには、Android-disconnectを実行するだけです。

  3. 結論

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

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

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

21
desgua

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

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

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

5
bseibold

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

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
4
mchid

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

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

端末でmtp-foldersを使用するか、グラフィックインターフェイスgmtpを使用して、フォルダーを表示することもできます。

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

libusb_open() failed!: Permission denied

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

0
Ferroao