LIRC

提供: ArchWiki
ナビゲーションに移動 検索に移動

official website から:

LIRC (Linux 赤外線リモコン) は、一般的に使用される多くの (すべてではない) リモコンの赤外線信号をデコードして送信するパッケージです。
ノート: 4.18 以降、カーネルは BPF を使用して一部の IR リモコンの信号をデコードできるため、LIRC が重複する場合があります。[1]

この記事ではシリアル・USB 赤外線デバイスを使って LIRC "Linux Infrared Remote Control" を設定・使用する方法を説明しています。

LIRC はサポートしているリモコンのキーが押されたときにプログラムにあわせて特定のコマンドに変換することができるデーモンです。ここで、「プログラムにあわせて」とは同じキーでも実行しているプログラムによって異なる動作をさせることができることを意味します。LIRC から取得されたリモコンの情報は以下のようにプログラムに流れます:

  1. ユーザーがリモコンのボタンを押すことで IR または RF 信号が送信されます。
  2. Linux パソコンに接続されたレシーバーによって信号が受信されます。
  3. カーネル (のモジュール) によってリモコンから送信されたパルス信号が /dev/lirc0, /dev/input/eventX, /dev/ttyUSBX, /dev/ttyS0 などのデバイスに変換されます。
  4. /usr/bin/lircd/etc/lirc/lircd.conf.d/foo.conf の情報を使ってパルス信号をボタンの押下情報に変換します。
  5. LIRC を使用するプログラムは ~/.lircrc に書かれている情報に従って /usr/bin/lircd のボタン押下情報をユーザーが定義した操作に解釈します。

インストール

lirc パッケージをインストールしてください。

設定

受信機と送信機の設定

ノート: このセクションは簡単な概要です。完全なドキュメントが利用可能です upstream

適切に実行するには、LIRC サービスの ドライバー および/または デバイス を指定する必要がある場合があります。irrecord などの LIRC 依存プログラムの実行中にサービスが突然停止した場合は、journalctl 出力で次のようなメッセージを探してください。

Driver `devinput' not found or not loadable (wrong or missing -U/--plugindir?).
readlink() failed for "auto": No such file or directory

これらを設定ファイルに設定し、サービスを再起動します。

/etc/lirc/lirc_options.conf
[lircd]
driver = driver-name
device = /dev/path-to-dev

シリアルポート

ヒント: DIY 回路図については、シリアルポート 受信機 および 送信機 のドキュメントを参照してください。シリアルポートデバイスは、audio_alsaaudio よりもはるかに信頼性が高いことに注意してください。

最新のカーネルには、古い lirc_serial ドライバーに代わる serial_ir モジュールがあります。マザーボードのシリアルポートに接続された DIY 受信機および送信機もサポートします。setserialAUR をインストールして実行します:

# setserial /dev/ttyS0 uart none
# modprobe serial_ir

serial_ir モジュールをロードすると、デバイス /dev/lirc0 が、カーネルによって created になります。そうでない場合は、ジャーナル で関連するエラーがないか確認してください。シリアルデバイスの LIRC 設定例:

/etc/lirc/lirc_options.conf
[lircd]
driver          = default
device          = auto

[modinit]
code = /usr/bin/setserial /dev/ttyS0 uart none
code1 = /usr/sbin/modprobe serial_ir

サウンドカード

ノート: サウンドカードを赤外線デバイスとして使用すると、多くの落とし穴があり、他のハードウェア設定よりも利点が得られません。

外部 DIY 回路が接続されたサウンドカードは、受信 および IR コードを 送受信 できます。

audio_alsa driverlirc に含まれていますが、受信のみをサポートしています。

alsamixer でマイク入力のミュートを解除し、十分なゲインを設定します。audacity で波形とゲインを確認できます。区別できる方形パルスが存在する必要があります。平坦でも過負荷でもありません。また、良好に復調されたパルスは耳で簡単に認識できます。LIRC と irrecord右オーディオチャネルの正のパルス を読み取ることに注意してください。負のパルスは機能しません。

/etc/lirc/lirc_options.conf
driver          = audio_alsa
device          = default

lirc-gitAUR に含まれる audio driver が受信と送信の両方をサポートします。デフォルトの遅延が 0.02 程度であると、"Warning: Output underflow" が発生し、送信が破損する可能性があることに注意してください。受信機はそれに応答しません。0.05 などのより高い値を試してください。

サウンドカードの出力音量を上げて下さい。そうしないと、LED 信号が弱く、範囲が狭くなります。LEDフラッシュは赤外線の波長に敏感であるため、スマートフォンのカメラで検出できます。

/etc/lirc/lirc_options.conf
driver          = audio
device          = ALSA:default@48000:0.05

リモート設定

ディレクトリ /etc/lirc/lircd.conf.d/ には、リモートのシステム全体の設定ファイルが含まれています。各 *.conf ファイルは 1 つのデバイスに対応し、そのプロトコル、スキャンコード、キーコードが記述されています。これにより、LIRC が特定のハードウェアに対して信号を送受信できるようになります。これらのファイルは lirc パッケージには含まれていないため、ユーザーが作成する必要があります。

リモート設定の検索

多くの設定ファイルは LIRC リモートデータベース にあります。URL に従うか、irdb-get(1) を使用してデータベースを検索します。

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

特定したら、必要な .conf/etc/lirc/lircd.conf.d/ にコピーして、デーモンがそのサポートを初期化できるようにします。

# cp streamzap.lircd.conf /etc/lirc/lircd.conf.d/

リモート設定の作成

リモートコントロール設定は、ユーザーがプロセスをガイドする irrecord(1) を使用して作成できます。検出されたリモートを使用する場合は、次のように呼び出します。

# irrecord --device=/dev/lirc0 MyRemote

プログラムはユーザーにリモコンのキーを押して学習するよう指示し、最終的にすべてのボタンとそれに対応するスキャンコードをマッピングします。完了したら、結果のファイルを /etc/lirc/lircd.conf.d/foo.conf に保存します。設定ファイルを他の人と共有することを検討してください。

アプリケーション固有のアクション

ヒント: 多くのアプリケーション固有の lircrc ファイルがインターネット上で入手できます。

キーコードをアプリケーション固有のアクションにバインドするには、それぞれの設定ファイルを ~/.config/lircrc/ に配置します。必要に応じて手動で作成する必要があります。lircrc(5) を参照してください。これは、MPlayerVLCMythTVtotem などの LIRC 対応アプリケーションでのみ機能します (Kodi も LIRC をサポートしていますが、非対応-標準的な方法、Kodi#リモートコントロールの使用を参照してください。

これらのアプリケーション固有の設定を別のファイルで定義し、次のように lircrc に含めます。

include "~/.config/lircrc/mplayer"
include "~/.config/lircrc/mythtv"
include "~/.config/lircrc/vlc"

通常のユーザーとして実行する

デフォルトでは、lircd は root として実行されます。安定性とセキュリティを向上させるために、アップストリームでは通常のユーザーとして実行することをお勧めします。このリンクにある付録 14 を参照してください。

lirc-user-service の AUR パッケージを使用する

すべてを自動的に行う lirc-user-serviceAUR が提供されています。

テスト

lircd.service起動/有効化 して下さい。

コマンドの受信

irw(1) を実行し、リモコンを受信機に向けていくつかのボタンを押します。受信したコードは標準出力に出力されます。

$ irw
000000037ff07bfe 00 One mceusb
000000037ff07bfd 00 Two mceusb
000000037ff07bfd 01 Two mceusb
000000037ff07bf2 00 Home mceusb
000000037ff07bf2 01 Home mceusb

irw が出力を返さない場合:

  • mode2 または xmode2 を実行して、LIRC が実際に IR センサーから何かを読み取ったかどうかを確認します。読み取っていない場合は、ハードウェアを確認してください
  • mode2 がパルスデータを受信した場合は、/etc/lirc/lircd.conf.d/ の設定ファイルにエラーがないか確認してください。

コマンドの送信

登録されているリモート (設定ファイル) をリストします。

$ irsend LIST "" ""
LG_6710CMAP01A

特定のデバイスで利用可能なコードをリストします:

$ irsend LIST LG_6710CMAP01A ""
0000000000007887 KEY_POWER
000000000000f807 KEY_MUTE
000000000000e817 KEY_VOLUMEUP
...

検出されたデバイス LG_6710CMAP01A を選択し、コマンド KEY_POWER を送信します。

$ irsend SEND_ONCE LG_6710CMAP01A KEY_POWER

トラブルシューティング

リモコンがキーボードとして機能する

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 にします。

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 を編集して driverdevice を適当な値に変更してください。

何も出力されない場合、適切なドライバーとデバイスの組み合わせを探します。最初に 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.confdriverdevice を変更してください。

サンプル

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

参照