POGO で赤外線リモコンを使用する

Pogoplug に Arch Linux をインストールして MPD による音楽再生サーバを構築しましたが、曲の操作にわざわざ PC を使わなければならないのは面倒です。iPod Touch のアプリを使用してリモコン代わりにするという手もありますが、さすがに大げさすぎると思いましたので Amazon で 790 円の USB 赤外線受光部セット RW-PCM37BK を購入してみました。安っぽい外観がいかにもリモコンという感じなので雑に扱うことができそうです。

Linux で動作している例がいくつかありましたので安心して購入に踏み切ったわけですが Pogoplug + Arch Linux は情報がなく、少々苦労しましたのでここに私の手順を掲載しておきたいと思います。

はじめに USB ポートにリモコンの受光部を接続して認識されているかどうかを確認します。

lsusb

一覧に Xenta SE340D PC Remote Control (個体によって違うかもしれませんが) というのが表示されていれば認識されています。Pogoplug Series 4 や Pogoplug Mobile で電流が足りない場合は認識されませんのでセルフパワーの USB ハブを用意する必要があります。

lirc-utils をインストールします。

pacman -S lirc-utils

lircd の自動起動を有効にして設定ファイルをコピーします。

systemctl enable lircd
cp /usr/share/lirc/devinput/lircd.conf.devinput /etc/lirc/lircd.conf

リモコンのデバイスの ID を確認し、/etc/lirc/lirc_options.conf を書き換えます。

ls /dev/input/by-id/
vi /etc/lirc/lirc_options.conf
#driver          = default
driver          = devinput
#device          = /dev/lirc0
device          = /dev/input/by-id/usb-1d57_ad02-event-kbd

lirc のサービスを起動します。

systemctl start lircd

リモコンの各ボタンを割り当てるため、キーコードを調べます。

irw

この状態でリモコンのボタンを押すとボタンに対応するキーコードが表示されます。ひとつのボタンで複数のキーコードが割り当てられているものもありますので注意してください。

# POWER
0000000080010074 00 KEY_POWER devinput

# E-MAIL
000000008001009b 00 KEY_MAIL devinput

# WWW
00000000800100ac 00 KEY_HOMEPAGE devinput

#CLOSE
0000000080010038 00 KEY_LEFTALT devinput
000000008001003e 00 KEY_F4 devinput

# A
000000008001001d 00 KEY_LEFTCTRL devinput
0000000080010038 00 KEY_LEFTALT devinput
000000008001001e 00 KEY_A devinput
0000000080010002 00 KEY_1 devinput
000000008001003b 00 KEY_F1 devinput

# B
000000008001001d 00 KEY_LEFTCTRL devinput
0000000080010038 00 KEY_LEFTALT devinput
0000000080010030 00 KEY_B devinput
0000000080010003 00 KEY_2 devinput
000000008001003c 00 KEY_F2 devinput

# C
000000008001001d 00 KEY_LEFTCTRL devinput
0000000080010038 00 KEY_LEFTALT devinput
000000008001002e 00 KEY_C devinput
0000000080010004 00 KEY_3 devinput
000000008001003d 00 KEY_F3 devinput

# D
000000008001001d 00 KEY_LEFTCTRL devinput
0000000080010038 00 KEY_LEFTALT devinput
0000000080010020 00 KEY_D devinput
0000000080010005 00 KEY_4 devinput
000000008001003e 00 KEY_F4 devinput

# PREVIOUS SONG
00000000800100a5 00 KEY_PREVIOUSSONG devinput

# NEXT SONG
00000000800100a3 00 KEY_NEXTSONG devinput

# MOUSE
NULL

# REWIND
0000000080010069 00 KEY_LEFT devinput
000000008001001d 00 KEY_LEFTCTRL devinput
000000008001002a 00 KEY_LEFTSHIFT devinput
0000000080010030 00 KEY_B devinput

# FASTFORWARD
000000008001006a 00 KEY_RIGHT devinput
000000008001001d 00 KEY_LEFTCTRL devinput
000000008001002a 00 KEY_LEFTSHIFT devinput
0000000080010021 00 KEY_F devinput

# PLAY / PAUSE
00000000800100a4 00 KEY_PLAYPAUSE devinput

# STOP
00000000800100a6 00 KEY_STOPCD devinput

# L
NULL

# R
NULL

# FULLSCREEN
0000000080010038 00 KEY_LEFTALT devinput
000000008001001c 00 KEY_ENTER devinput
000000008001001d 00 KEY_LEFTCTRL devinput
0000000080010004 00 KEY_3 devinput

# MUTE
0000000080010071 00 KEY_MUTE devinput

# VOLUME DOWN
0000000080010072 00 KEY_VOLUMEDOWN devinput

# VOLUME UP
0000000080010073 00 KEY_VOLUMEUP devinput

# 1,.?
000000008001000f 00 KEY_TAB devinput

# 2ABC
0000000080010067 00 KEY_UP devinput

# 3DEF
000000008001007e 00 KEY_RIGHTMETA devinput

# BACKSPACE
000000008001000e 00 KEY_BACKSPACE devinput

# 4GHI
0000000080010069 00 KEY_LEFT devinput

# 5JKL
000000008001001c 00 KEY_ENTER devinput

# 6MNO
000000008001006a 00 KEY_RIGHT devinput

# PAGE UP
0000000080010068 00 KEY_PAGEUP devinput

# 7PQRS
000000008001001d 00 KEY_LEFTCTRL devinput
0000000080010018 00 KEY_O devinput

# 8TUV
000000008001006c 00 KEY_DOWN devinput

# 9WXYZ
0000000080010001 00 KEY_ESC devinput

# PAGE DOWN
000000008001006d 00 KEY_PAGEDOWN devinput

# NUMLOCK
NULL

# 0_@*#
0000000080010039 00 KEY_SPACE devinput

# MY PC
000000008001007d 00 KEY_LEFTMETA devinput
0000000080010012 00 KEY_E devinput

# DESKTOP
000000008001007d 00 KEY_LEFTMETA devinput
0000000080010020 00 KEY_D devinput

リモコンのボタンに対応するコマンドを設定ファイルに記述します。ひとつのボタンで複数のキーコードが割り当てられている場合は button = を複数記述することで対応できそうですが、巻き戻しボタン、左方向ボタンなどで KEY_LEFT が両方に割り当てられているものなどは誤作動しましたので片方は使用しないようにしました。

vi /etc/lirc/lircrc
# 音符ボタン (データベース更新)
begin
	prog = irexec
	button = KEY_LEFTCTRL
	button = KEY_LEFTALT
	button = KEY_A
	button = KEY_1
	button = KEY_F1
	repeat = 0
	config = mpc update
	flags = quit
end
# 前の曲ボタン (前の曲)
begin
	prog = irexec
	button = KEY_PREVIOUSSONG
	repeat = 0
	config = mpc prev
	flags = quit
end
# 次の曲ボタン (次の曲)
begin
	prog = irexec
	button = KEY_NEXTSONG
	repeat = 0
	config = mpc next
	flags = quit
end
# 巻き戻しボタン (5秒巻き戻し)
begin
	prog = irexec
	button = KEY_LEFT
	button = KEY_LEFTCTRL
	button = KEY_LEFTSHIFT
	button = KEY_B
	repeat = 0
	config = mpc seek -00:00:05
	flags = quit
end
# 早送りボタン (5秒早送り)
begin
	prog = irexec
	button = KEY_RIGHT
	button = KEY_LEFTCTRL
	button = KEY_LEFTSHIFT
	button = KEY_F
	repeat = 0
	config = mpc seek +00:00:05
	flags = quit
end
# 再生・一時停止ボタン (再生・一時停止)
begin
	prog = irexec
	button = KEY_PLAYPAUSE
	repeat = 0
	config = mpc toggle
	flags = quit
end
# 停止ボタン (停止)
begin
	prog = irexec
	button = KEY_STOPCD
	repeat = 0
	config = mpc stop
	flags = quit
end
# 音量下げるボタン (音量 5 下げる)
begin
	prog = irexec
	button = KEY_VOLUMEDOWN
	repeat = 1
	config = mpc volume -5
	flags = quit
end
# 音量上げるボタン (音量 5 上げる)
begin
	prog = irexec
	button = KEY_VOLUMEUP
	repeat = 1
	config = mpc volume +5
	flags = quit
end
# 1 (プレイリスト 1 を読み込んで再生)
begin
	prog = irexec
	button = KEY_TAB
	repeat = 0
	config = mpc clear && mpc load playlist1 && mpc play
	flags = quit
end
# 2 (プレイリスト 2 を読み込んで再生)
begin
	prog = irexec
	button = KEY_UP
	repeat = 0
	config = mpc clear && mpc load playlist2 && mpc play
	flags = quit
end
# 3 (プレイリスト 3 を読み込んで再生)
begin
	prog = irexec
	button = KEY_RIGHTMETA
	repeat = 0
	config = mpc clear && mpc load playlist3 && mpc play
	flags = quit
end
# PAGE UP ボタン (リピート切り替え)
begin
	prog = irexec
	button = KEY_PAGEUP
	repeat = 0
	config = mpc repeat
	flags = quit
end
# PAGE DOWN ボタン (ランダム切り替え)
begin
	prog = irexec
	button = KEY_PAGEDOWN
	repeat = 0
	config = mpc random
	flags = quit
end
# MY PC ボタン (WOL で PC 起動)
begin
	prog = irexec
	button = KEY_LEFTMETA
	button = KEY_E
	repeat = 0
	config = wol xx:xx:xx:xx:xx:xx
	flags = quit
end

irexec の自動起動を有効にして起動します。

systemctl enable irexec
systemctl start irexec

ボタン割り当てはまだまだ改善の余地があるかもしれませんが、これだけでもかなり便利になりました。MPD の操作はもちろん、WOL を使用すれば LAN 内の PC もリモコンで電源を入れることができますので、よっこらせと腰をかがめて電源ボタンを押す必要がなくなります。

他にもコマンドで実行できるものであれば何でも割り当て可能ですので、例えば音声合成で天気予報をしゃべらせてみたり、ネットワーク対応の機器を操作してみたりすると面白いかもしれません。いやぁ、リモコンって本当に良いものですね。

私の環境ですと irexec が自動起動に失敗するようなので下記のように "ExecStartPre=/usr/bin/sleep 1" を入れてやると自動起動するようになりました。

vi /usr/lib/systemd/system/irexec.service
[Unit]
Description=LIRC command handler
After=network.target

[Service]
Type=forking
# 追加
ExecStartPre=/usr/bin/sleep 1
ExecStart=/usr/bin/irexec --daemon

[Install]
WantedBy=multi-user.target
Wants=lircd.service

コメントを残す