GalaxyNexusをUbuntu12.04に接続する

残念ながら日本では生産が終わってしまったGalaxy Nexus。私は予約までして購入したんですが、やっぱり日本では売れなかったみたいですね。


閑話休題

このGalaxy Nexusですが、ご存知の通りPCにUSBケーブルで接続するとUSBマスストレージデバイス (たとえばUSBメモリ) ではなく、MTPデバイスとして認識されます。Windowsでは標準でMTPに対応しているため (そりゃそうか) 何の苦労もせず、ぶっ挿せばUSBマスストレージデバイスかのように扱うことが出来ます。MacだとGoogleが専用のアプリケーションを公開しています*1
でもLinux用のツールは残念ながらありません。ていうかあるんですがまともに動作しません*2。Galaxy Nexusにもがんがん音楽ぶっこみたい、と思うのが人の常。ということでその方法をいろいろ試してみました。

Rhythmbox

Galaxy NexusをUSBケーブルでPCに接続すると、どのアプリケーションを起動するか聞いてくるんですが、その中の一つにRhythmboxがあります。このアプリ、Ubuntu12.04の標準音楽プレイヤーなんですが、Galaxy Nexusとの相性はいまいちです。。。というか最悪です。PCに保存してある音楽ファイル (ogg) を同期しようとするとほぼ100%シャットダウンします。ほぼというのはごくたま〜に成功することがあったからです。
なので却下。

Amarok

Amarokもとても有名な音楽プレイヤーアプリです。でもこちらもGalaxy Nexusとの相性は最悪でした。落ちたりすることしばしばなのですが、何よりも遅い!音楽ファイルの同期に信じられないくらい時間がかかります。そもそも起動もめちゃめちゃ重いし。
なのでこちらも却下。

gMTP

Windows Media Playerのようにエレガントに音楽ファイルを同期することは諦めて、MTPデバイスをUSBマスストレージデバイスのように考えて手動で管理することを考えました。で見つけたのがこちらのアプリ。参考にしたサイトはこちらとかいろいろ。

http://www.gaggl.com/2012/05/accessing-samsung-galaxy-nexus-as-usb-media-device-ubuntu-12-04/


残念ながらこちらも最悪の相性。。。とにかくよくエラーが発生する。エラーが発生しなくてもとてつもなく遅い。フォルダ一つ作るのに5〜6分かかってしまう。
残念ながら却下。

fuse直叩き

最後にたどり着いたのがこちら。結論からいうとなかなかイイ感じ。参考にしたサイトはこちら。

http://www.omgubuntu.co.uk/2011/12/how-to-connect-your-android-ice-cream-sandwich-phone-to-ubuntu-for-file-access/


今のところほぼ問題なく動作してる。速度も申し分なし。上記サイトは英語なので、簡単な説明を記載しておきます。


まずは必要なパッケージのインストール。

% sudo apt-get install mtp-tools mtpfs


続いてGalaxy NexusをUSBケーブルで接続して以下のコマンドを実行。

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


するとこんな感じで反応する。いずれも10秒ぐらいかかります。

% mtp-detect | grep idVendor
Device 0 (VID=04e8 and PID=685c) is a Samsung Galaxy Nexus/Galaxy S i9000/i9250, Android 4.0 updates.
   idVendor: 04e8
% mtp-detect | grep idProduct
Device 0 (VID=04e8 and PID=685c) is a Samsung Galaxy Nexus/Galaxy S i9000/i9250, Android 4.0 updates.
   idProduct: 685c


idVendorとidProductの値を覚えておきます。
次に/etc/udev/rules.d/51-android.rulesというファイルを作成します。

% sudo vi /etc/udev/rules.d/51-android.rules


以下の内容を入力して、保存。

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


VENDORIDとPRODUCTIDを先ほど表示したidVendorとidProductに書き換えます。上の例であればこんな感じ。

SUBSYSTEM=="usb",ATTR{idVendor}="04e8",ATTR{idProduct}="685c",MODE="0666"


次にGalaxy NexusをPCから抜いて以下のコマンドを実行します。

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


YOURUSERNAMEにはもちろんユーザ名で置き換えます。
次に/etc/fuse.confというファイルを編集します。

# Set the maximum number of FUSE mounts allowed to non-root users.
# The default is 1000.
#
#mount_max = 1000

# Allow non-root users to specify the 'allow_other' or 'allow_root'
# mount options.
#
# user_allow_other


最後の行のコメント (#) を外して保存。そしたら再起動します。
再起動したら、以下のエイリアス名をシェルの設定ファイルに保存します。

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


これでようやく設定はおしまい。Galaxy NexusをUSBケーブルでPCに接続します。そしたら以下のコマンドを実行。

% android-connect


Nautilusを立ち上げてしばらくすると/media/GalaxyNexusが出てきます。あとは通常のファイルシステムと同じように操作することが出来ます。


一週間ぐらい悩んでたんですがようやく解決したかな。
めでたしめでたし。

*1:Android File Transfer

*2:もしかしたら私だけ?