2013/03/20

Nexus7 を Ubuntu にメディアデバイスとして接続する

@ Ubuntu 12.04 LTS
2013/3/21 追記
以下の方法で手動マウントするのも良いのですが、gvfs を利用して自動マウントする方が簡単でした。
穀風: Android端末 を Ubuntu 12.04 にメディアデバイスとして接続する

我が家の Ubuntu は Nexus7 を接続しても、うんともすんとも言ってくれません。
これでは少々使い勝手が悪いので、USBメモリのように接続したら自動でマウントして表示されるようにしてみました。
参考にしたのは以下のサイトです以下のサイトでは go-mtpfs を使用していますが、私は標準の mtpfs を使用しました

mtpfs のインストール

mtpfsをインストールします。

$ sudo apt-get install mtp-tools mtpfs

fuse.conf の編集

/etc/fuse.conf を管理者権限で開き、user_allow_other のコメントアウトを外します。

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

また、/etc/fuse.conf はデフォルトで一般ユーザに読み取り権限がありません。
これはバグらしいので、権限を修正します。

$ ll /etc/fuse.conf
-rw-r----- 1 root fuse 215  3月 20 20:50 /etc/fuse.conf
$ sudo chmod a+r /etc/fuse.conf
$ ll /etc/fuse.conf
-rw-r--r-- 1 root fuse 215  3月 20 20:50 /etc/fuse.conf

マウントポイントの作成

以下のように、マウントポイントを作成しておきます。

$ sudo mkdir /media/Nexus7
$ sudo chmod 777 /media/Nexus7

51-android.rules の編集

/etc/udev/rules.d/51-android.rules に以下のように追記します51-android.rules が存在しない場合は作成します
your_username は適宜書き換えてください。

idVendor, idProduct, ID_MODEL, ID_MODEL_ID, の確認方法は後ほど書きたいと思います。
同じ Nexus7 でも、OS バージョンというより、ビルドバージョンですかねによっては変わったりするようなので、注意が必要です。

/etc/udev/rules.d/51-android.rules
# Google Nexus 7
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0666" # Bootloader
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d001", MODE="0666" # Recovery
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e43", MODE="0666" # PTP media, USB debug off
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e44", MODE="0666" # PTP media, USB debug on
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e41", MODE="0666" # MTP media, USB debug off
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0666" # MTP media, USB debug on

# Google Nexus 7 MTP mode under JB 4.2+ : automatic mount & umount when plugged (USB debug on & off)
ENV{ID_MODEL}=="Nexus_7", ENV{ID_MODEL_ID}=="4e41", ACTION=="add", RUN+="/usr/bin/sudo -b -u your_username /usr/bin/mtpfs -o allow_other /media/Nexus7"
ENV{ID_MODEL}=="Nexus_7", ENV{ID_MODEL_ID}=="4e42", ACTION=="add", RUN+="/usr/bin/sudo -b -u your_username /usr/bin/mtpfs -o allow_other /media/Nexus7"
ENV{ID_MODEL}=="Nexus_7", ENV{ID_MODEL_ID}=="4e41", ACTION=="remove", RUN+="/bin/umount /media/Nexus7"
ENV{ID_MODEL}=="Nexus_7", ENV{ID_MODEL_ID}=="4e42", ACTION=="remove", RUN+="/bin/umount /media/Nexus7"

fstab の編集

fstab に以下の一行を加えます。

/etc/fstab
mtpfs        /media/Nexus7        fuse.mtpfs    allow_other,rw,user,noauto    0    0

これを追加しておかないと、ユーザ権限でアンマウントできなくなってしまいます。

動作確認

以上を実行してから Nexus7 を接続し直すと、自動でマウントされました。
gnome-shell の場合
Nautilus にも表示されます。

idVendor, idProduct の確認方法

USBデバイスの Vendor ID と Product Id を確認するには lsusb を使用します。
Nexus7 を接続した状態で lsusb を実行すると以下の通り。

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 009: ID 18d1:4e42 Google Inc. 

最後の Google Inc. が Nexus7 です。
Vendor ID = 18d1
Product ID = 4e42
であることがわかりました。

この時、以下のモードの違いで Product ID が変化するので注意が必要です。
  • MTP mode (with USB debug on or off)
  • PTP mode (with USB debug on or off)
  • Fastboot mode
  • Recovery mode
上記の 4e42 は MTP mode (USB debug on) の時のものです。

ID_MODEL, ID_MODEL_ID の確認方法

udevadm monitor を以下のように実行した後、Nexus7 を挿抜するとその情報が表示されます。

$ udevadm monitor --environment --udev
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing

UDEV  [30578.986844] add      /devices/pci0000:00/0000:00:1d.7/usb2/2-6 (usb)
ACTION=add
BUSNUM=002
DEVLINKS=/dev/libmtp-2-6
DEVNAME=/dev/bus/usb/002/012
DEVNUM=012
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb2/2-6
DEVTYPE=usb_device
ID_BUS=usb
ID_MEDIA_PLAYER=1
ID_MODEL=Nexus_7
ID_MODEL_ENC=Nexus\x207
ID_MODEL_ID=4e42
...

ID_MODEL が "Nexus_7", ID_MODEL_ID が 4e42 であることがわかりました。

ちなみに、ID_MODEL_ID も Product Id と同様、各モードによって変化するので注意が必要です。

0 件のコメント: