LIRC
この記事ではシリアル・USB 赤外線デバイスを使って LIRC "Linux Infrared Remote Control" を設定・使用する方法を説明しています。
目次
概要
LIRC はサポートしているリモコンのキーが押されたのをプログラムにあわせてコマンドに変換することができるデーモンです。ここで、「プログラムにあわせて」とは実行しているプログラムによってキーの押下で異なる動作をさせることができることを意味します。
LIRC の役割
LIRC を使ってリモコンからの情報がプログラムに流れる過程は以下の通りです:
- ユーザーがリモコンのボタンを押すことで IR または RF 信号が送信されます。
- 信号が Linux が入ったパソコンに接続されたレシーバーによって受信されます。
- カーネル (の適切なモジュール) は
/dev/lirc0
でレシーバーからのパルス幅の情報をキャラクタライズします。 /usr/bin/lircd
は/etc/lirc/lircd.conf.d/foo.conf
からの情報でパルス幅をボタンの押下情報に変換します。- LIRC を使用するプログラムは
/usr/bin/lircd
のボタン押下情報を~/.lircrc
によってユーザーが定義した操作に解釈します。
必要なファイル
/etc/lirc/lircd.conf.d/foo.conf
- スキャンコード --> キーに変換するシステムレベルの設定。このディレクトリには複数の conf ファイルを入れることができ、それぞれがシステムの各リモートコントローラ・レシーバー固有です。
任意のファイル
LIRC を使用するアプリケーションによっては、以下のファイルは任意です。例えば mplayer や mythtv は以下のファイルを使ってキーマップやアクションを定義します。全てのアプリケーションが必要とするわけではありません。例として、kodi は自分の xml ファイルを使ってマッピングを行います。
~/.lircrc
- プログラムごとの lirc マップ (~/.lirc/foo
,~/.lirc/bar
など) を指定する include ステートメントを記述するファイル。~/.lirc/foo
- キー --> 操作に翻訳するユーザーレベルの設定。各リモコンとアプリケーション foo の固有設定。
インストール
公式リポジトリにある lirc パッケージをインストールします。
設定
リモコンによっては LIRC がなくても"キーボード"として認識されそのように動作することがあります。このように認識されているとコマンドを二重に実行してしまう可能性があります。シェルやテキストエディタを開いて、リモコンのボタンを押してキーボードとして認識されていないかテストして下さい。文字や数字が打ち込まれたり、物理キーボードの上・下・右・左矢印キーのように動く場合、無効にする必要があります。次に進む前に #リモコンがキーボードとして機能する を見て下さい。
LIRC の設定ファイル
LIRC がリモコンを扱えるようにするにはスキャンコードとキーマップの定義が必要です。適当な conf ファイルを /etc/lirc/lircd.conf.d
にコピーすることでマッピングできます。
選択肢 1. 上流の設定ファイル
使用するリモコン/レシーバを確認して /usr/share/lirc/configs
に設定済みの設定ファイルが存在しないか見てください。存在したら、デーモンが初期化をできるように、必要な conf を /etc/lirc/lircd.conf.d
にコピーします。
選択肢 2. ユーザーが作成した設定ファイル
サポートされていないハードウェアを使用する場合、誰かが作った設定ファイルを (google) 検索するか自分で作成する必要があります。/usr/bin/irrecord
を使うことでとても簡単に作成することができ、必要な手順についてガイドが出て来ます。認識されているリモコンを使用する場合、以下のように起動してください:
# irrecord --device=/dev/lirc0 MyRemote
プログラムを実行するとリモコンにあるボタンを押して学習させるように表示されます。最終的には全てのボタンとスキャンコードがマッピングされます。全ての操作に10分もかからないはずです。完了したら、/etc/lirc/lircd.conf.d/foo.conf
に作成したファイルが保存されます。
リモコンのテスト
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。
Users should create the expected files showing LIRC where the various program-specific maps reside:
$ 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"
トラブルシューティング
リモコンがキーボードとして機能する
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
にします。