今回はUbuntu 15.10とXperia Z5などのスマートフォンを連携し、ファイル転送する方法を紹介します。
AndroidとMTP
私事で恐縮ですが、昨年11月にXperia VL からXperia Z5 に機種変更しました。本当はもう少しコンパクトな機種がよかったのですが、Xperia VLの使用期間がほぼ丸3年となり、全体的に動作が緩慢かつバッテリーの持ちが極めて悪かったので、我慢の限界を迎えたのです[1] 。
大きさにはほとほと困っていますが、大きいなりのメリットもあるので我慢できないほどではありません。あとはよく言われるとおりバッテリーの持ちは懸念事項ではありますが、少なくとも今のところは全く問題ありません。筆者の使い方では1日持てば充分ですし、スタミナモードを有効にするとそのぐらいは持ちます。
機種変更することに決めたものの、心配したのはUbuntuでファイル転送ができるかどうかです。AndroidとPCを接続した際、PCから見るとどのように認識されるのかによって、安定性が変わってくることをXperia VLで体験していました。というのも、Xperia VLはMSC((USB) Mass Storage Class)とMTP(Media Transfer Protocol)から選択することができ、MSCだと極めて安定してファイル転送ができていましたが、MTPだとできないことが頻発していました。できないというのは、ファイル転送の際にエラーが起こっていたということです。これはUbuntu側の問題なのかと思っていたのですが、Windows 8.1/10でも同様だったので、Android側の問題だったのでしょう[2] 。
MSCというのは、言ってしまえばUSBメモリーなどの外部ストレージと同じで、マウント/アンマウントが必要になるため使い勝手はあまりよくありません。その点MTPであればマウント/アンマウントは不要で、操作がシンプルであるというメリットがあります。
事前の調査でXperia Z5はMSCとMTPの切り替えができず、後者のみ対応であることは判明していて、若干の不安がありました。しかし実際に接続し、ファイル転送をしてみたところ、この心配は杞憂であったことがわかりました。30GB弱の音楽ファイルを転送してみましたが、エラーは発生しませんでした。
UbuntuとMTP
Ubuntuでは、筆者が知る限りではlibmtp というライブラリを使用してMTP対応が実装されています。
ファイル (Nautilus) などのファイルマネージャーで使用されているバックエンドのgvfsは、2013年1月15日にリリースされた1.15.2からMTPに対応しています。よって、その後にリリースされたUbuntuであればMTPデバイスをマウントすることができます。
普通にファイルを転送するだけならいいのですが、Ubuntuデフォルトの音楽プレイヤーであるRhythmboxで認識させる場合は、libmtpのとあるヘッダーファイルにベンダーIDとデバイスIDを登録する必要があります。しかし、本連載掲載時点で最新のUbuntuである15.10でも、Xperia Z5のような最新機種に対応してないので、自力で対応する必要があります。
Ubuntuでのファイルブラウズ
結論を先に述べてしまいましたが、ファイル (Nautilus) で普通にXperia Z5をブラウズできています(図1 ) 。もちろん画面のロック状態だとブラウズできず、アンロックの状態である必要があります。Xperia Z5は指紋認証に対応しているため、アンロックが簡単で助かっています。音楽ファイルのやり取りも、この状態で充分に可能です。
図1 Xperia Z5の内蔵ストレージとSDカードがファイルから見えている
Rhythmbox対応
RhythmboxからXperia Z5を認識させる場合は前述のとおり、libmtpのとあるヘッダーファイルにXperia Z5のベンダーIDとデバイスIDを追加する必要があります。
とあるヘッダーファイルとは、libmtpのWebサイトにも記載されているとおりsrc/music-players.h です。確かにたくさんのプレイヤーが登録されていますし、よく見るとXperia Z5もすでにあったりします。コミットの履歴を見ていくと、該当のコミット が見つかりました。
dmesgの結果と見比べてみます。
[ 4580.837575] usb 1-2: New USB device found, idVendor=0fce, idProduct=01d9
[ 4580.837580] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 4580.837582] usb 1-2: Product: SOV32
[ 4580.837584] usb 1-2: Manufacturer: Sony
[ 4580.837586] usb 1-2: SerialNumber: XXXXXXXXXX
ベンダーIDが0fce、デバイスIDが01d9で一致しているので、間違いなさそうです。
これをUbuntu 15.10のlibmtp にバックポートすればいいのですが、差分をそのまま適用することができません。筆者が作成した、実際に適用できるパッチは以下のとおりです。
Index: libmtp-1.1.9/src/music-players.h
===================================================================
--- libmtp-1.1.9.orig/src/music-players.h
+++ libmtp-1.1.9/src/music-players.h
@@ -1758,6 +1758,8 @@
DEVICE_FLAG_NONE },
{ "SONY", 0x0fce, "XPeria E4g MTP", 0x01cb,
DEVICE_FLAG_NONE },
+ { "SONY", 0x0fce, "XPeria Z5 MTP", 0x01d9,
+ DEVICE_FLAG_NONE },
/*
@@ -1839,6 +1841,8 @@
DEVICE_FLAG_NONE },
{ "SONY", 0x0fce, "XPeria E4g MTP+CDROM", 0x41cb,
DEVICE_FLAG_NONE },
+ { "SONY", 0x0fce, "XPeria Z5 MTP+CDROM", 0x41d9,
+ DEVICE_FLAG_NONE },
/*
* MTP+ADB personalities of MTP devices (see above)
@@ -1945,6 +1949,8 @@
DEVICE_FLAG_NONE },
{ "SONY", 0x0fce, "XPeria E4g MTP+ADB", 0x51cb,
DEVICE_FLAG_NONE },
+ { "SONY", 0x0fce, "XPeria Z5 MTP+ADB", 0x51d9,
+ DEVICE_FLAG_NONE },
/*
* MTP+UMS modes
パッケージの作成方法はさすがに本稿から外れすぎるので記しませんが、
$ apt-get source libmtp
でパッケージのソースを取得し、
$ dch -i
でパッケージのバージョンを上げ、
$ sudo apt-get build-dep libmpt
$ dpkg-buildpackage -r -uc -b
でビルドし、インストールするだけです。
ビルドしたパッケージは筆者のPPA で公開しています。Xperia Z5ユーザーは次のコマンドでlibmtpパッケージの更新ができます。
$ sudo add-apt-repository ppa:ikuya-fruitsbasket/libmtp
$ sudo apt-get update
$ sudo apt-get upgrade
その後Rhythmboxを起動すると、[ メディアプレイヤー]として認識していますが、これをダブルクリックするとXperia Z5として認識されます(図2 、※3 ) 。
図2 Xperia Z5にある音楽ファイルが表示されている
例えばAmazonデジタルミュージックで購入したMP3を転送する場合、ダウンロード後展開し[4] 、「 ミュージック」フォルダーに移動してRhythmboxを起動し[5] 、ファイルを読み込みます。
あとは転送したいファイルを選択し(図3 ) 、[ Xperia Z5]にドラッグ&ドロップするとコピーできます(図4 ) 。
図3 転送したいファイルを選択したところ
図4 選択したファイルをドラッグ&ドロップし、コピーできたところ
なお、プレイリストなどと同期する方法もありますが、ざっと見た感じ本来見えてはいけないはずのファイル(図5 )まで見えてしまっています。どう考えても消したらまずいので、この機能は使わないほうがいいでしょう[6] 。
[6] 実際には怖くて試していないのですが、少なくとも見えてはいけないファイルを再生しようとしたところRhythmboxが落ちるので、おそらく消せません。ということは、同期機能は使えないということになります。
図5 これらのファイルは本来見えてはいけないはずのファイル