システム開発
Debian JessieでWindows Media Center用赤外線リモコンを使ってみた
*BSD/PC-UNIX/Linuxって?
Debian JessieでWindows Media Center用赤外線リモコンを使ってみた
Debian JessieでWindows Media Center用赤外線リモコンを使ってみた
2017/01/31
ひょんなことから10年来一度も使ったことがないWindows Media Center用リモコン及び赤外線レシーバを*BSD/UNIX/Linuxで使えるものか確認してみようと思うに至ったDebian編がこのページ。
検証にあたり、PCは、これらが付属していたPavilion(OS:Vista)と一緒に買ったdynabook(OS:XP)、OSはXPからNetBSDに入れ替え、のちにマルチブートすることにしたDebianを使うことに。
現在、サーバにしているラズパイのOSはRaspbian、何かの折には、基本そのまま使いまわすこともできるだろうという思惑もあります。
lirc/Linux Infrared Remote Control
debian:~$ dmesg | tail -50
...
[ 5.588525] lirc_dev: IR Remote Control driver registered, major 250
...
[ 44.068041] usb 1-2: new full-speed USB device number 2 using uhci_hcd
[ 44.253075] usb 1-2: New USB device found, idVendor=0471, idProduct=060c
[ 44.253080] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 44.253084] usb 1-2: Product: BB+ Dongle(e.d)
[ 44.253087] usb 1-2: Manufacturer:
[ 44.253089] usb 1-2: SerialNumber: OIEK
[ 44.284029] Registered IR keymap rc-rc6-mce
[ 44.284201] input: Media Center Ed. eHome Infrared Remote Transceiver (0471:060c) as /devices/pci0000:00/0000:00:1d.0/usb1/1-2/1-2:1.0/rc/rc0/input12
[ 44.284511] rc0: Media Center Ed. eHome Infrared Remote Transceiver (0471:060c) as /devices/pci0000:00/0000:00:1d.0/usb1/1-2/1-2:1.0/rc/rc0
[ 44.286617] IR NEC protocol handler initialized
[ 44.289160] IR RC5(x) protocol handler initialized
[ 44.291172] IR RC6 protocol handler initialized
[ 44.293798] IR JVC protocol handler initialized
[ 44.295761] IR Sony protocol handler initialized
[ 44.298228] IR SANYO protocol handler initialized
[ 44.300547] IR Sharp protocol handler initialized
[ 44.302575] IR MCE Keyboard/mouse protocol handler initialized
[ 44.303950] input: MCE IR Keyboard/Mouse (mceusb) as /devices/virtual/input/input13
[ 44.308898] rc rc0: lirc_dev: driver ir-lirc-codec (mceusb) registered at minor = 0
[ 44.308903] IR LIRC bridge handler initialized
[ 44.512065] mceusb 1-2:1.0: Registered BB+ Dongle(e.d) with mce emulator interface version 1
[ 44.512072] mceusb 1-2:1.0: 2 tx ports (0x0 cabled) and 2 rx sensors (0x1 active)
debian:~$
まずは、赤外線レシーバをUSBポートに挿し、dmesgを眺め、認識されているかどうかを確認します。
[input: Media Center Ed. eHome Infrared Remote Transceiver (0471:060c)]や[mceusb 1-2:1.0: Registered BB+ Dongle(e.d)...]などとあるので認識はされているようです。
debian $ lsusb
...
Bus 001 Device 002: ID 0471:060c Philips (or NXP) Consumer Infrared Transceiver (HP)
...
debian:~$
また、念の為、lsusbでも確認してみるとdmesgにあったベンダIDやプロダクトIDからも、これが赤外線レシーバのようです。
(接続前)
debian:~$ ls /dev/lirc?*
ls: /dev/lirc?* にアクセスできません: そのようなファイルやディレクトリはありません
debian:~$
(接続後)
debian:~$ ls /dev/lirc?*
/dev/lirc0
debian:~$
赤外線レシーバが認識されるのであれば、USBポートに接続した際に/dev以下にデバイスが生成されます。
debian $ sudo apt-get update
debian $ sudo apt-get upgrade
...
debian $ sudo apt-get install lirc
...
提案パッケージ:
lirc-x setserial ir-keytable
以下のパッケージが新たにインストールされます:
libftdi1 lirc
...
debian:~$
無事レシーバが認識されたところで必要なパッケージをインストールします。
Debianに限らず、Linuxでは、LIRCを使う模様でDebianのリポジトリにもCLI用らしきlircとX用らしきlirc-xがあるようですが、今回は、lircのみインストールすることにしました(一通り確認したあとでlirc-xも入れてみたものの、違いがわからず結局アンインストール)。
他にもパッケージがあるようですが、ここでは使わないことにします。
debian:~$ systemctl status lirc.service
● lirc.service - LSB: Starts LIRC daemon.
Loaded: loaded (/etc/init.d/lirc)
Active: active (exited) since ... 2017-01-31 xx:xx:xx JST; 2min 24s ago
debian:~$
LIRCをインストール後は、デーモン(サービス)も自動でアクティブになっていました。
この時点で試しにRhythmboxを起動、その名も『LIRC』プラグインを有効にし、そのままリモコンを使用してみるとラジオ局を選局した状態で矢印キーは効きましたが、再生や停止は効きませんでした。
と思ったら、あまり意味はないものの、矢印キーに関してはプラグイン云々に関係なく、各種プレイヤーばかりか、ファイルマネージャなど他のパッケージでも機能することがわかりました。
尚、OSが赤外線レシーバを認識し、デバイス(ここでは/dev/lirc0)が生成される場合、lircをインストールすると同時にいくつかのコマンドを利用できるようになり、その中には、リモコンのボタン押下時の送信状況をテストできるmode2やirwコマンドがあります。
debian $ mode2 -d /dev/lirc0
space 16777215
pulse 2700
space 900
...
space 16777215
debian:~$
mode2コマンドは、赤外線デバイスからのpulse/space長やデコード済みの入力情報を『直接』標準出力に表示するものです。
(lircを停止させる必要があるという情報もありますが、停止させなくてもテスト可能でした。)
(管理者権限は不要なのでsudoも不要です。)
一方、irwコマンドは、UNIXドメインソケットに接続し、ソケット経由の(この場合、lircを介した)入力を標準出力に出力するものでOSだけでなく、LIRCが赤外線レシーバを認識し、リモコンのボタンごとに割り当てられたキー名と値が適切に割り振られている必要があるのでLIRC用の構成ファイルが適切に書かれている必要があります。
ググってみたところ、Ubuntu情報が多く、Ubuntuだとインストール中にハードウェア選択画面が表示されるらしいですが、Debian Jessieでは、普通にインストールが完了し、設定画面は出てきません。
再設定含め、dpkg-configure lircとすれば、当該画面が表示されるとのことですが、これまたDebian Jessieでは、表示されません。(ちなみにlirc-xを入れても同じ、代わりに引数をこれにするとエラー。)
そもそもLIRCについて、ぐぐってみても、どれも情報がまばらでひとまとめになったものがない。。。のでまとめてみたのが以下。
- Ubuntuにおいてlircには、/etc/lirc以下にlircd.conf、hardware.confといった構成ファイルがある模様
- Ubuntuでは、lircをインストールするとインストール中にハードウェア選択画面が表示される模様
- Ubuntuでは、ハードウェア選択画面で選択した結果がhardware.confに反映される模様
- Ubuntuでは、再設定を含め、dpkg-reconfigure lircとすれば、ハードウェア選択画面が表示される模様
- lircd.confの実例サンプルとしては/usr/share/lirc/remotes/mceusb/lircd.conf.mceusbがある模様
- hardware.confはリモコン仕様による為、自動認識されなければ、あれば雛形をコピー、これもなければ一から手作業で作成する必要がある模様
- hardware.confは常に/etc/lircディレクトリ以下で設定する模様
- lircd.confは、システム全体設定は、/etc/lirc以下に、ユーザー個別用は、~/.lircrcファイル、その他に~/.lircディレクトリ以下に対象パッケージソフトウェア用の個々の構成ファイルをおくことができる模様(だが、全てのソフトウェアがこれを使用するとは限らないらしい)
尚、赤外線通信のフォーマットには以前調べた内容に加え、先のdmesgにおいて赤外線レシーバが認識されている周辺部分にもあったように他にも多々ある模様。
- NECフォーマット
- SONYフォーマット
- SANYOフォーマット
- JVCフォーマット
- SHARPフォーマット
- RC5フォーマット
- RC6フォーマット
- 家電製品協会フォーマット
- ...etc.
dmesgを見ると[Registered IR keymap rc-rc6-mce]とあるので今回使用したWindows Media Center用リモコンは、RC6フォーマットであるようです。
先の設定画面が開いて設定できるのであれば、hardware.confは自動設定されるようですが、今回は、そうではない為、一から書くなり、手持ちのリモコンに合った雛形(があれば、それを)コピーするなり手作業で行なう必要があります。
# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS=""
#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false
#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false
#Try to load appropriate kernel modules
LOAD_MODULES=true
# Run "lircd --driver=help" for a list of supported drivers.
DRIVER=""
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_dev mceusb"
# Default configuration files for your hardware if any
LIRCD_CONF="/etc/lirc/lircd.conf"
LIRCMD_CONF=""
ぐぐってみるとより古いのか、より新しいのか、手持ちのものとは見た目が異なるものの、Windows Media Center用のリモコンを使っているということなので三重大学のwikiページにあるhardware.confをコピーさせて頂くことにしました。(最初の方にもあるが、後段にあるこれでないと機能しなかった。)
debian:~$ sudo cp /usr/share/lirc/remotes/mceusb/lircd.conf.mceusb ~/.lircrc
or
debian:~$ sudo cp /usr/share/lirc/remotes/mceusb/lircd.conf.mceusb /etc/lirc/lircd.conf
debian:~$
lircd.confも同様ですが、そのリンク先を見ると/usr/share/lirc/remotes/mceusb/lircd.conf.mceusbにあってそれをコピーすれば良さげなのでそうしました。
中身を確認するとdmesgやlsusbにあったPhilipsやMS用の内容になっているのでlircのインストール時に接続してあるデバイスに応じて適切なものが生成される???ようなのでlircインストール時にはデバイスを接続しておくのが賢明な模様です。)
ここでは、ローカルに設定ファイルをコピーしましたが、前述のようにシステム全体なら/etc/lirc以下にlircd.confとしてコピーします。
(Debianだとコピー先がユーザー(自身)所有でもsudoがいるっぽい?NetBSDだと不要だけど。)
debian:~$ sudo systemctl restart lirc.service
debian:~$
ここまでくれば、irwとしてリモコンの任意のボタンを押すとlircを介して反応があるらしいですが、どうも反応しない。。。
と思いつつ、ちょっと悩みましたが、変更した構成ファイルを再読み込みさせるべく、lirc.service(デーモン)を再起動する必要がありました。
debian:~$ irw
000000037ff07bf2 00 KEY_HOME mceusb
000000037ff07bf2 01 KEY_HOME mceusb
000000037ff07be9 00 KEY_PLAY mceusb
000000037ff07be9 01 KEY_PLAY mceusb
000000037ff07be6 00 KEY_STOP mceusb
000000037ff07be6 01 KEY_STOP mceusb
...
[Ctrl]+[c]
debian:~$
というわけで改めてirw(ユーザー権限でOKなのでsudo不要)としてリモコンの任意のボタンを押してみたら反応するようになりました。
ようやくマルチメディア系ソフトウェアでリモコン操作確認ができそうです。
まだ入れていなければRhythmbox用プラグインパッケージをインストールしてRhythmboxを起動後、『LIRC』プラグインを有効にして、念の為、一度閉じてRhythmboxを再起動し、とりあえず、ラジオ局を選択してからリモコン操作してみると。。。できました。
全てではないようですが、少なくとも矢印キーによる選局、各種専用ボタンによる再生、一時停止、停止、音量調整ボタンでボリューム調整、ミュート、ミュート解除などが機能することは確認できました。
Totemも『赤外線リモート制御』プラグインを有効にしたところ一部のボタンで機能を確認できました。(適切なプラグインが入って入れば/usr/lib/totem/plugins/lirc/以下にプラグインファイルがあるはず。)
RhythmboxやTotemでより多数のボタンを機能させたい場合、また、VLC Media Player、MPlayer、MythTV、Kodiで機能させたい場合には、個々に構成ファイルを作成すればよいようです。
尚、Bansheeでもbanshee-extension-lircを入れるとできるらしいですが、Debian Jessie(現時点バージョン8.7)では、これをインストールしてもなぜかプラグインが表示されず、できませんでした。
原点回帰は大切かも
何気なくコピーする前のlircd.confを見ると冒頭に[/usr/share/doc/lirc/README.Debian]とあった。。。
manがなかったり、何かと情報の少ないLIRCだけに、簡易とはいえ、実はHTMLがあるよということもわかるので[/usr/share/doc/lirc/]以下を眺めておくのもよいかも。。。
[追記:2017/03/27]
自作リモコン?
実は、これを試してみる過程で学習リモコンっていうのがあるのか、でも物理的なボタン割り当てじゃ全てカバーするには無理がある、液晶タッチパネル使ったものもあるが、高い、一方、IoTに興味がありつつ、サーバとしてラズパイは買って運用中も、これは電子工作ですらない。。。液晶パネル+小さなコンピュータでリモコン作ってみたくない?という衝動に駆られました。
うまくすれば、そのまま使えるかなとこのページの検証と同時にWindows Media Center用のレシーバを使ってテレビやエアコン(どっちもたまたまSHARP製)のリモコンボタンを全てlircのirrecordでデータを取得しておきました。
そんな折、遅まきながらArduinoを発見、ラズパイもいいけどArduinoでやってみようと。
結局、ここでirrecordしておいたものは使わなかったものの、Arduino+赤外線発信LED+赤外線受信センサーでエアコン操作の一部をちょっとだけ試してみたらできました。
安く買い揃えれば、既に市販されている液晶学習リモコンよりだいぶ安くできそうですが、リモコン全て集約できたとしても、そもそもそこまでの欲求があったわけでもなく、スマホでも操作できる時代に単なるリモコンか。。。と冷静に考えて見ると微妙な額であり、今のところ実際の作成には至っていません。
LINK
関連リンク