みなさんはじめまして。長南(ちょうなん)と申します。今回から私もこの連載に寄稿させていただくこととなりました。まだまだ不慣れでお見苦しいところもあるかと思いますが、よろしくおつきあいいただければ幸いです。
さて、2012年1月13日号のUbuntu Weekly Topics でUbuntu TV のコンセプトデザイン が発表されたという話題が取り上げられましたが、テレビといえば欠かせないものはリモコンです。そこで今回は、Ubuntuでリモコンを使う方法、そして「Ubuntu魔法使い」になる方法について紹介します。
ハードウェアの選定は慎重に
Ubuntuをリモコンで操作しようとしたときに、一番最初に問題となるのはリモコンからの信号を受け取るためのハードウェアを用意することです。一般的なリモコンは赤外線で通信を行うのですが、最近はBluetoothが広く普及し、ショップの店頭で赤外線を取り扱うアダプタを見かけることが減ってきました。また運よく見かけたとしても、携帯電話などとの通信を行うIrDA規格を使用することを前提とした製品でリモコン受信用に使うのには苦労が必要だったり、そもそもUbuntuをはじめとしたLinuxで扱うことができるハードウェアなのかもよくわからなかったりします。
そのような苦境の時代が続いていたのですが、近年PC用地デジチューナーのオプション製品として、Windows Media Center対応のリモコンと受信機のセットが発売されるようになりました。使用するOSは違いますが実現したいことのイメージと製品の仕様が近いうえに、最悪挫折してしまったとしても製品本来の使い方のWindows Media Center用のリモコンとして使えそうです。そこで筆者はIO-DATA製のGV-MC7/RCKIT を購入しました。地デジチューナーを買っていないのにオプション製品のリモコンを買うというのも不思議な感覚がありますが、その辺はあまり気にしないことにします。
図1 今回使用したリモコンセットのGV-MC7/RCKIT
なお、今回のレシピで使用したUbuntu環境は、11.10 Oneiric Ocelotです。
Ubuntuでのソフトウェアの準備
Ubuntuに限らずLinuxでリモコンを取り扱う際にはlirc[1] を使います。Ubuntuではパッケージが用意されていますので、次のものをインストールします。
$ sudo apt-get install lirc lirc-x
インストールの途中でlircが扱うハードウェアについて質問されます。最初に使用するリモコンハードウェアについて選択するよう促されますので、"Windows Media Center Transceivers/Remotes (all)"選択します。
図2 lircで利用するリモコンハードウェアの選択
さらに送信用のハードウェアについても選択するよう促されますが、Ubuntuマシンから信号を送信することは今回考えませんので"None"を選択します。
図3 lircで仕様する赤外線送信ハードウェアの選択
なお、この設定は一度インストールした後でも、次のコマンドで再度設定しなおすことができます。
$ sudo dpkg-reconfigure lirc
設定した内容は/etc/lirc/hardware.conf、/etc/lirc/lircd.confにそれぞれ保存されます。
受信デバイスの確認
ここでGV-MC7/RCKITの受信ユニットをUbuntuマシンに接続してみましょう。うまく認識されると、/var/log/kern.logに次のような内容が出力されます。
Jan 1 13:30:00 ubuntu kernel: [2816893.124204] input: Media Center Ed. eHome Infrared Remote Transceiver (0609:0353) as /devices/pci0000:00/0000:00:1d.3/usb5/5-2/5-2:1.0/rc/rc1/input3
Jan 1 13:30:00 ubuntu kernel: [2816893.124324] rc1: Media Center Ed. eHome Infrared Remote Transceiver (0609:0353) as /devices/pci0000:00/0000:00:1d.3/usb5/5-2/5-2:1.0/rc/rc1
Jan 1 13:30:00 ubuntu kernel: [2816893.128481] rc rc1: lirc_dev: driver ir-lirc-codec (mceusb) registered at minor = 0
Jan 1 13:30:00 ubuntu kernel: [2816893.128511] mceusb 5-2:1.0: Registered SMK CORPORATION WMC RECEIVER Emulator Device 2009 on usb5:22
また、lirc用のデバイスファイルが/dev/lirc0といった名前で作成されることも確認できるはずです。
$ ls -l /dev/lirc*
crw------- 1 root root 250, 0 2012-01-01 13:30 /dev/lirc0
この時ハードウェアやカーネルのバージョンによっては、うまく認識されずにソースファイルからカーネルモジュールをコンパイルしないといけない場合もありますが、Ubuntu 11.10とGV-MC7/RCKITの組み合わせでは特別なことをやる必要がなく、接続すると自動的に認識することが筆者の環境で確認できました。
一旦lircサービスを停止させた上でmode2コマンドを使うことによって、mceusbデバイスが稼働しているのかどうかを確認することができます。
$ sudo service lirc stop
* Stopping remote control daemon(s): LIRC [ OK ]
$ sudo mode2 -d /dev/lirc0
space 99750
pulse 950
space 400
pulse 350
...
^C
$
リモコンのボタンを押すごとに受信した信号のようなものが表示されることが確認できればmceusbデバイスは正常に動作しています。
リモコンの設定
次にリモコンそのものについての設定を行います。一口にリモコンと言ってもテレビ・エアコン・HDDレコーダ・BDプレーヤなど様々な家電製品用のものが身の回りにあるかと思いますが、リモコンのどのボタンが押されたのかを判別するための設定を/etc/lirc/lircd.confに記述する必要があります。
lircをインストールする際に設定された内容は、パッケージで準備されている設定を読み込むことになっていますが、残念ながらGV-MC7/RCKITのリモコンの信号はこの設定ではうまく認識されません。また、lircパッケージにに同梱されている設定ファイル群やlircプロジェクトで集積されているリモコン設定ファイル群[2] にもこのリモコン用の設定は含まれていません。本来であればこういった場合には、ハードウェアの仕様を調べたり、実際にmode2コマンドで表示された内容などを参考に試行錯誤で設定ファイルを作らないといけないのですが、調べてみると昨年Vine Linuxのユーザーフォーラム でこの製品が話題となり 、GV-MC7/RCKITのリモコン用の設定ファイルが投稿されているのを見つけました。カンニングしているような気分もありますが、ここはありがたく使わせていただくことにします(フォーラムの投稿から設定ファイルの部分を抜き出したもの(gvmc7_rckit.conf) を用意しました) 。
実際の設定ファイルである/etc/lirc/lircd.confを見てみると、設定ファイルをincludeで組み込むよう指定されています。
#Configuration for the Windows Media Center Transceivers/Remotes (all) remote:
include "/usr/share/lirc/remotes/mceusb/lircd.conf.mceusb"
そのため、先程の設定ファイルを/etc/lirc/にコピーした上で、lircd.confを編集します。
$ cd /etc/lirc
$ sudo cp /(ダウンロードしたディレクトリ)/gvmc7_rckit.conf /etc/lirc/
$ ls -l /etc/lirc/*.conf
-rw-r--r-- 1 root root 22016 2012-01-01 13:30 gvmc7_rckit.conf
-rw-r--r-- 1 root root 488 2012-01-01 13:30 hardware.conf
-rw-r--r-- 1 root root 561 2012-01-01 13:30 lircd.conf
-rw-r--r-- 1 root root 121 2011-04-01 13:30 lircmd.conf
$ sudo nano lircd.conf
lircd.confファイルはすでに組み込まれていたincludeの部分をコメントアウトして、/etc/lirc/gvmc7_rckit.confを代わりにincludeするように編集します[3] 。
#Configuration for the Windows Media Center Transceivers/Remotes (all) remote:
#include "/usr/share/lirc/remotes/mceusb/lircd.conf.mceusb"
#Configuration for the IO-DATA GV-MC7/RCKIT remote controller:
include "/etc/lirc/gvmc7_rckit.conf"
ここまで作業できたところで、lircサービスを開始させます。
$ sudo service lirc start
* Starting remote control daemon(s) : LIRC [ OK ]
これでlircの設定が完成したわけですが、lircd.confやgvmc7_rckit.confが本当にうまく設定できているのかテストします。mode2コマンドはカーネルモジュールのテストですが、今回はlircのテストです。
$ irw
0000000000000001 00 KEY_POWER I-O_DATA_GV-MC7_RCKIT
0000000000000001 01 KEY_POWER I-O_DATA_GV-MC7_RCKIT
0000000000000001 00 KEY_POWER I-O_DATA_GV-MC7_RCKIT
0000000000000001 01 KEY_POWER I-O_DATA_GV-MC7_RCKIT
0000000000000001 02 KEY_POWER I-O_DATA_GV-MC7_RCKIT
0000000000000001 03 KEY_POWER I-O_DATA_GV-MC7_RCKIT
0000000000000001 04 KEY_POWER I-O_DATA_GV-MC7_RCKIT
0000000000000009 00 KEY_PLAY I-O_DATA_GV-MC7_RCKIT
0000000000000009 00 KEY_PLAY I-O_DATA_GV-MC7_RCKIT
0000000000000009 01 KEY_PLAY I-O_DATA_GV-MC7_RCKIT
0000000000000009 02 KEY_PLAY I-O_DATA_GV-MC7_RCKIT
0000000000000009 03 KEY_PLAY I-O_DATA_GV-MC7_RCKIT
...
^C
$
このように、押されたリモコンの名前が表示されればlircは正常に動いています[4] 。
Bansheeの設定
これでようやくアプリケーションでリモコン信号を取り扱うことができるようになりました。Ubuntu標準の音楽プレーヤのBansheeをリモコンで操作できるようにしてみます。
BansheeにはChromeやFirefoxなどで良く見られるような、「 エクステンション」を追加して機能を拡張する仕組みが用意されています。UbuntuではBansheeとlircを連携させるbanshee-extension-lircパッケージが用意されていますので、これをインストールします。
$ sudo apt-get install banshee-extension-lirc
そして、一旦Bansheeを起動し、このエクステンションを有効にします。「 編集(E)」メニューから「設定(P)」を選択して「拡張機能」タブを開くと、Infrared Remote Controlの項目が出ているので、チェックを入れた上で「閉じる(C)」ボタンを押します。
図4 Bansheeでlirc extentionを有効にする
エクステンションを有効化したら一旦Bansheeは終了させます。
一方、デスクトップ環境で作業している時にリモコン操作を監視させるための設定を行います。この設定はユーザ毎に行う必要があり、ホームディレクトリ直下の.lircrcに設定を作る必要があります。
$ cd ~
$ nano .lircrc
しかし、リモコンで操作したいアプリケーションがどんどん増えると設定ファイルの見通しが悪くなってしますので、ホームディレクトリにlircのアプリ向けの設定ファイルを格納するディレクトリを次のように作成しましょう。
$ mkdir ~/.lirc
そして、Banshee向けの設定ファイルを~/.lirc/bansheeに作成することにして、.lircrc自身は次のように、Banshee向けの設定ファイルを組み込むようにしてしまいます。
include ~/.lirc/banshee
また、Banshee向けの設定についてもエディタを使って編集します。
$ nano ~/.lirc/banshee
設定方法としては、beginとendの間にボタン、リモコン名、起動するプログラム、設定といった内容をそれぞれと次のように書きこみます。
begin
button = KEY_HOME
remote = I-O_DATA_GV-MC7_RCKIT
prog = irexec
config = banshee
end
begin
button = KEY_PLAY
remote = I-O_DATA_GV-MC7_RCKIT
prog = banshee
config = play
end
ボタンやリモコン名については、lircで設定した内容をそのまま転記します。どのような内容であったか忘れた際には、前節で登場したirwコマンドで確認するようにしましょう。
上記の設定内容は、GV-MC7/RCKITのMediaCenterボタン(緑色の大きなボタン)を押した際にBansheeを起動し、リモコンの再生ボタンで実際に現在の曲を再生するという内容です。
ボタンを押したときに任意のコマンドを実行するような場合にはprogの部分にirexec、configの部分に実際に起動されるアプリケーションを、アプリケーション側でlircへの対応がされている場合にはprogにアプリケーション、configにそれぞれの機能を記述することになります。
現在のところBansheeのlircエキステンションではconfigにplay(再生) 、pause(一時停止) 、stop(停止) 、previous(前の曲) 、next(次の曲) 、volume-up(音量上げる) 、volume-down(音量下げる) 、toggle-mute(消音)といった機能を指定することができます。
今回筆者が作成したファイルをサンプル(banshee) として用意しましたので、参考にしてみてください。
irexecデーモンの自動起動設定
そして仕上げとして、デスクトップ環境を使っている際にリモコンのボタンが押されるのを監視する、irexecデーモンを自動起動するように設定します。右上の設定アイコンから「自動起動するアプリケーション...」を選択し、「 追加(A)」ボタンを押して自動起動するアプリケーションを追加します。
図5 irexecデーモンを自動起動するために設定画面を開く
名前や説明については後で見返したときに分かりやすい内容を、コマンドについては"irexec -d"と入力します。
図6 irexecを自動起動するように設定する
そしてきちんと自動起動するよう、チェックが入っていることを確認し、設定画面を閉じます。
図7 irexecデーモンを自動起動させる
irexecの自動起動設定が終わったら、端末から次のコマンドを打ち込み、irexecデーモンを起動するか、一旦ログインしなおします。
$ irexec -d
Bansheeでのリモコン生活
これでようやくBansheeでリモコンを使うことができるようになりました。曲送り、ボリューム調整、再生、停止といった必要最小限の機能だけですが、お風呂あがりにリモコン片手にBansheeに入れておいたお気に入りの曲を流しなら優雅に『Software Design』を読むことができるようになりました。今までの作業量からするとちょっと報われない状況ですが、今後のBansheeエクステンション側での機能拡張に期待したいところです。
なお、Ubuntuでパッケージが用意されているアプリケーションのうちBanshee以外にもlircに対応しているものがありますので、様々な設定をしてみたり、lirc対応していないものでもirexecを使って工夫し、快適Ubuntuライフを楽しんでみてください。
Ubuntuで君も魔法使いになろう
と、ここまで紹介してきた内容は壮大な前ふりで、この記事の本当の目的はタイトルのとおり、読者の皆さんをUbuntu魔法使いにすることです。しかしながらハッカー文化の文脈で言われる熟達者の称号「ウィザード」を簡単に得るのはさすがに無理があるため、おすすめの素敵アイテムを紹介します。
そう、昨年話題になりました「カイミラの魔法の杖 」です。
図8 魔法使いになるための必須アイテム「カイミラの魔法の杖」
この杖は単なるおもちゃのように見えて、実は13種類のジェスチャで操作する学習型のリモコン製品です。ここまで言ってしまうと次の展開はすでに見えているかもしれませんが、いままで設定してきたGV-MC7/RCKITのリモコン信号をカイミラ杖に学習させて、この杖を振ることによってUbuntuを操作しようといういうものです。
ここまで記事を読んでくださった方は多分GV-MC7/RCKITのリモコンをうまく扱えているはずですので、あとは、杖を「学習モード」にして、先ほど設定したボタンを杖に学習させるだけです。これであなたもUbuntu魔法使いにジョブチェンジできます。
杖の使用にあたっては正しいジェスチャを出せるように練習が必要ですので、杖にリモコン信号を学習させる前に練習モードでジェスチャの練習をしておきましょう。
最終兵器・汎用リモコン
そのようなわけでUbuntu魔法使いになれたわけですが、今回はGV-MC7/RCKITの利用を前提にしています。もしかしたら、このリモコンを入手できない方もいるかもしれません。そのような場合に最終兵器として使えるものが「汎用リモコン」と呼ばれる製品です。
汎用リモコンは国内の主要メーカーのリモコンの信号が製品の中に入っていて、リモコンの設定を変えることで各社のメーカーのリモコンの代わりや2台目、3台目のリモコンとして使うための製品です。この製品をGV-MC7/RCKITのリモコンの代わりに設定してみましょう。
今回は近くの電気屋さんに行き、一番お手頃価格だった「ELPAかんたんリモコン RC-29D 」を調達してきました。
図9 リモコン信号(魔法)のネタ元として使う汎用リモコン「ELPAかんたんリモコン RC-29D」
国内の家電用のリモコン信号はメーカー毎に細部の仕様が違うのですが、大きく分類すると次の3つに分けられます。
NECフォーマット
家製協フォーマット
SONYフォーマット
このうち、NECフォーマットとSONYフォーマットについては、カーネルモジュールが用意されています。台数的にはNECフォーマットのものが多いようですので、汎用リモコンをNECに設定して作ります。
まずは製品マニュアルを読んで、メーカーコード2511を設定します。また、NECフォーマットの設定ファイルのひな型は/usr/share/lirc/remote/generic/NEC.confに用意されています。そこで、作業ディレクトリを作りコピーします。
$ mkdir elpa_nec
$ cd elpa_nec
$ cp /usr/share/lirc/remote/generic/NEC.conf ELPA_NEC_2511
そして、irrecordコマンドを使い、ひな型設定ファイルをもとにリモコン信号を読み込んで学習(といっても設定ファイルを作ってくれるという形なのですが)させます。このときにirrecordコマンドとlircが競合するので、一時的にlircサービスを停止させた上でirrecordコマンドを実行します。
$ sudo service lirc stop
* Stopping remote control daemon(s): LIRC [ OK ]
$ sudo irrecord -n -d /dev/lirc0 ELPA_NEC_2511
irrecord - application for recording IR-codes for usage with lirc
Copyright (C) 1998,1999 Christoph Bartelmus([email protected] )
This program will record the signals from your remote control
and create a config file for lircd.
(メッセージ中略)
Please send the finished config files to <[email protected] > so that I
can make them available to others. Don't forget to put all information
that you can get about the remote control in the header of the file.
Press RETURN to continue.
Now enter the names for the buttons.
Please enter the name for the next button (press <ENTER> to finish recording)
KEY_POWER
Now hold down button "KEY_POWER".
Please enter the name for the next button (press <ENTER> to finish recording)
irrecordコマンドを終了させると、テンプレートとして使用したファイルに'.conf'がついたファイル名で設定ファイルが作成されます。エディタでひととおり内容を確認した上でGV-MC7/RCKITのときと同じようにlircの設定を編集します。
$ nano ELPA_NEC_2511.conf
$ sudo cp ELPA_NEC_2511.conf /etc/lirc/elpa_nec_2511.conf
$ sudo nano /etc/lirc/lircd.conf
基本的に同じリモコンの信号を複数のリモコンで使っていて混乱する可能性がないのであれば複数のリモコンの設定を有効にしてもよいのですが、念のため使用しないリモコンのinclude行は"#"でコメントアウトしておくと安心できるでしょう。
#Configuration for the Windows Media Center Transceivers/Remotes (all) remote:
#include "/usr/share/lirc/remotes/mceusb/lircd.conf.mceusb"
#Configuration for the IO-DATA GV-MC7/RCKIT remote controller:
#include "/etc/lirc/gvmc7_rckit.conf"
#Configuration for the ELPA RC-29D NEC#2511 format:
include "/etc/lirc/elpa_nec_2511.conf"
上記のように設定を変更し、ircサービスを再起動します。うまく設定ができるとirwコマンドやirexecで取り扱うことができるようになりますので、~/.lirc/bansheeを編集し、必要な設定を行ってください(ボタンの名前やリモコン名は適宜読み替えてください) 。なお、この設定ファイル(elpa_nec_2511.conf) も用意しましたので、参考にしていただければと思います。
汎用リモコンでUbuntu上のBansheeを操作できるようになったら、同じようにカイミラ杖に学習させることで、杖でのUbuntu操作ができるようになります。
魔法使いになったら
余談ですが、汎用リモコンには各社のリモコンの信号が入っているため、メーカーコードを何らかの手段で控えておいて物影や舞台裏でカイミラ杖にリモコン信号を学習させることによって様々なメーカーの機器を杖で操作することができます。ホームパーティや実家や親戚の家などに呼ばれたときに、汎用リモコンからカイミラ杖にリモコン信号を学習させてテレビなどを杖で操作すると驚かれるのではないかと思います。
もちろん皆さんは「正義のUbuntu魔法使い」なのですから、電気屋さんでリモコンテロなどなさらないようにくれぐれも気をつけてください。