LIRC
この記事ではシリアル・USB 赤外線デバイスを使って LIRC "Linux Infrared Remote Control" を設定・使用する方法を説明しています。
LIRC はサポートしているリモコンのキーが押されたときにプログラムにあわせて特定のコマンドに変換することができるデーモンです。ここで、「プログラムにあわせて」とは同じキーでも実行しているプログラムによって異なる動作をさせることができることを意味します。LIRC から取得されたリモコンの情報は以下のようにプログラムに流れます:
- ユーザーがリモコンのボタンを押すことで IR または RF 信号が送信されます。
- Linux パソコンに接続されたレシーバーによって信号が受信されます。
- カーネル (のモジュール) によってリモコンから送信されたパルス信号が
/dev/lirc0
,/dev/input/eventX
,/dev/ttyUSBX
,/dev/ttyS0
などのデバイスに変換されます。 /usr/bin/lircd
は/etc/lirc/lircd.conf.d/foo.conf
の情報を使ってパルス信号をボタンの押下情報に変換します。- LIRC を使用するプログラムは
~/.lircrc
に書かれている情報に従って/usr/bin/lircd
のボタン押下情報をユーザーが定義した操作に解釈します。
目次
インストール
設定
/etc/lirc/lircd.conf.d/foo.conf
はスキャンコードをキーに変換する全ユーザー共通の設定ファイルです。ディレクトリには複数の conf ファイルを保存することができ、それぞれのファイルが各々のリモコン・レシーバに対応します。これらのファイルはユーザーが作成するファイルであり、lirc パッケージに初めから用意されているわけではありません。
LIRC でリモコンを管理するにはスキャンコードからキーマップに変換する定義が必要です。定義情報を入手する方法は2つ存在します。
上流の設定ファイル
使用するリモコン・レシーバを確認して、既に設定ファイルが存在しないか確認してください。irdb-get
を使うことで リモコンデータベース を検索するか URL をブラウザで開いて手動で検索してください。
例えば irdb-get
を使って Streamzap 製のリモコンの設定ファイルを検索・入手するには:
$ irdb-get find stream atiusb/atiusb.lircd.conf digital_stream/DTX9900.lircd.conf snapstream/Firefly-Mini.lircd.conf streamzap/PC_Remote.lircd.conf streamzap/streamzap.lircd.conf x10/atiusb.lircd.conf $ irdb-get download streamzap/streamzap.lircd.conf Downloaded sourceforge.net/p/lirc-remotes/code/ci/master/tree/remotes/streamzap/streamzap.lircd.conf as streamzap.lircd.conf
必要なファイルを /etc/lirc/lircd.conf.d/
にコピーすることでデーモンによってリモコンのサポートが初期化されます:
# cp streamzap.lircd.conf /etc/lirc/lircd.conf.d/
ユーザーが作成した設定ファイル
サポートされていないハードウェアを使用する場合、誰かが作った設定ファイルを (google) 検索するか自分で作成する必要があります。設定ファイルは /usr/bin/irrecord
を使うことでガイドに従ってとても簡単に作成することができます。使用するリモコンが認識されている場合、以下のように起動してください:
# irrecord --device=/dev/lirc0 MyRemote
プログラムを実行するとリモコンのボタンを押して学習させるように指示されます。最終的には全てのボタンとスキャンコードがマッピングされます。全ての操作に10分もかからないはずです。マッピングが完了したら /etc/lirc/lircd.conf.d/foo.conf
にファイルが保存されます。
任意のファイル
LIRC を使用するアプリケーションの中には一部、以下のファイルを使うものがあります。例えば mplayer や mythtv は以下のファイルを使ってキーマップやアクションを定義します。全てのアプリケーションが必要とするわけではありません。例として kodi は固有の xml ファイルを使ってマッピングを行います。詳しくは各アプリケーションのドキュメントを参照してください。
~/.lircrc
- プログラムごとの lirc マップ (~/.lirc/foo
や~/.lirc/bar
など) を指定する include ステートメントを記述するファイル。~/.lirc/foo
- ユーザー個別にキーを操作に翻訳する設定。各リモコンとアプリケーション foo の固有設定。
リモコンのテスト
lircd.service
を起動してブート/シャットダウン時に実行されるように有効化してください (強く推奨)。
/usr/bin/irw
を使ってリモコンをテストしてください、リモコンのボタンを押した時に LIRC が受信したものを全て標準出力に流します。
例:
$ irw 000000037ff07bfe 00 One mceusb 000000037ff07bfd 00 Two mceusb 000000037ff07bfd 01 Two mceusb 000000037ff07bf2 00 Home mceusb 000000037ff07bf2 01 Home mceusb
このコマンドが動作しない場合 (irw が何も出力をしない): /etc/lirc/lircd.conf.d/
内の config ファイルに間違いがないかよく確認してください。
プログラムごとの設定
LIRC では同じキーでもプログラムごとに別々のコマンドになるように設定することができます。つまり、特定のキーを押した時に mplayer と vlc で挙動を変えられます。
まずは LIRC のコマンドを使用するプログラムを決めてください。一般的なプログラムの例: mplayer, mythtv, totem, vlc, kodi。
プログラム固有のマッピングを指定するファイルを作成してください:
$ mkdir ~/.lirc $ touch ~/.lircrc
~/.lirc
に各プログラムの名前が付いた設定ファイルを作成してください。例:
$ ls ~/.lirc mplayer mythtv vlc
~/.lircrc
を編集して LIRC でコントロールするプログラムの数だけ ~/.lirc/foo
を指定する include ステートメントを記述してください。例:
~/.lircrc
include "~/.lirc/mplayer" include "~/.lirc/mythtv" include "~/.lirc/vlc"
トラブルシューティング
リモコンがキーボードとして機能する
Xorg を使用している場合
Streamzap USB PC Remote など、リモコンによっては Xorg によって Human Interface Device (HID) と認識されるものがあり、物理キーボードからの入力のようにキーの一部または全てがキーストロークとして認識されます。この挙動は LIRC でデバイスを管理しようとしたときに問題になります。無効にするには、以下のファイルを作成して X を再起動してください:
/etc/X11/xorg.conf.d/90-streamzap.conf
Section "InputClass" Identifier "Ignore Streamzap IR" MatchProduct "Streamzap" MatchIsKeyboard "true" Option "Ignore" "true" EndSection
次のコマンドで得られる出力の Name
に合わせて MatchProduct
は適切に変更するようにしてください:
$ cat /proc/bus/input/devices | grep -e IR
例えば N: Name="cx88 IR (WinFast DTV2000 H rev."
の場合 WinFast
にします。
ARM デバイスで Xorg を使用していない場合
/etc/modprobed.d/streamzap.conf
を作成して問題を起こすモジュールをブラックリストに追加してください。例えば Streamzap のリモコンの場合:
install ir_sharp_decoder /bin/false install ir_xmp_decoder /bin/false install ir_rc5_decoder /bin/false install ir_nec_decoder /bin/false install ir_sony_decoder /bin/false install ir_mce_kbd_decoder /bin/false install ir_jvc_decoder /bin/false install ir_rc6_decoder /bin/false install ir_sanyo_decoder /bin/false
デフォルト設定を変更する
irw
で何も出力されない場合、/etc/lirc/lirc_options.conf
のデフォルト設定が原因である可能性があります (あるいはアップデートによって上書きされた可能性もあります)。
まず、/dev/lirc0
が存在するかどうか確認してください:
$ mode2 --driver default --device /dev/lirc0
リモコンのボタンを押してみて何か出力されないか確認してください。出力がある場合、/etc/lirc/lirc_options.conf
を編集して driver と device を適当な値に変更してください。
何も出力されない場合、適切なドライバーとデバイスの組み合わせを探します。最初に lirc がデフォルトでどの組み合わせを認識しているのか確認します。v4l-utils パッケージに含まれている ir-keytable
を実行して出力を確認してください。以下のように出力されます:
Found /sys/class/rc/rc0/ (/dev/input/event5) with: Driver ite-cir, table rc-rc6-mce Supported protocols: unknown other lirc rc-5 jvc sony nec sanyo mce-kbd rc-6 sharp xmp Enabled protocols: lirc Extra capabilities: <access denied>
上記の場合、lirc は /dev/input/event5
を赤外線デバイスとして自動的に認識して、devinput
ドライバーが使われています。以下のコマンドを実行することで組み合わせが正しいか確認します:
$ mode2 --driver devinput --device /dev/input/event5
リモコンのボタンを押してみてください。何も出力されない場合、別のドライバーとデバイスの組み合わせを試してみてください。機能する組み合わせを発見したら、/etc/lirc/lirc_options.conf
の driver と device を変更してください。
サンプル
MCE RC6 互換レシーバの設定例:
/etc/lirc/lirc_options.conf
[lircd] nodaemon = False driver = default device = /dev/lirc0 output = /var/run/lirc/lircd pidfile = /var/run/lirc/lircd.pid plugindir = /usr/lib/lirc/plugins permission = 666 allow-simulate = No repeat-max = 600 [lircmd] uinput = False nodaemon = False