固定デバイス名を設定する

問題点

デバイスは、差し込む順番により、/dev/input/下において、event0になったり、event1になったりと名称が変わる。 キーバインドを変更する際、指定先のデバイス名が変わってしまうと適用されない。

解決方針

udevを用いて、参照先をエイリアスという形式で固定できるようにする。 具体的には、/etc/udev/rules.d/下にudevルールを記載したファイルを作成することで固定する。

解決ステップ

参照したいデバイスの情報を集める

evtestコマンドで、udevルールに必要なデバイスのパスを取得する

evtestコマンドでエイリアス設定をしたいデバイスのパスを取得します。

$ evtest
No device specified, trying to scan all of /dev/input/event*
Not running as root, no devices may be available.
Available devices:
/dev/input/event0:	AT Translated Set 2 keyboard
/dev/input/event1:	Video Bus
/dev/input/event2:	ETPS/2 Elantech Touchpad
/dev/input/event3:	ELECOM ELECOM BlueLED Mouse
/dev/input/event4:	ADATA Technology Co., Ltd XPG Summoner Gaming Keyboard
/dev/input/event5:	ADATA Technology Co., Ltd XPG Summoner Gaming Keyboard Mouse
/dev/input/event6:	ADATA Technology Co., Ltd XPG Summoner Gaming Keyboard System Control
/dev/input/event7:	ADATA Technology Co., Ltd XPG Summoner Gaming Keyboard Consumer Control
/dev/input/event8:	ADATA Technology Co., Ltd XPG Summoner Gaming Keyboard
/dev/input/event9:	ADATA Technology Co., Ltd XPG Summoner Gaming Keyboard Keypad
〜省略〜
Select the device event number [0-30]:

ここでは、下記デバイスを固定したいものとします。

/dev/input/event4: ADATA Technology Co., Ltd XPG Summoner Gaming Keyboard

このままでは、毎回デバイスのパス、つまりevent4が変わり得ます。

udevadmコマンドで、デバイス情報を取得する

先程取得した固定したいデバイスのパスを用いて、そのデバイス情報をudevadmコマンドで取得します。

udevadm info -a -n /dev/input/event4
ATTRS{phys}=="usb-0000:03:00.3-3.4/input0"
ATTRS{name}=="ADATA Technology Co., Ltd XPG Summoner Gaming Keyboar
d"
〜省略〜

指定したパスにあるデバイス情報が一覧で出ます。 同じ名称のデイバイスがなければ、名前(name)だけでも指定できます。 今回は、先程のevtestの出力の通り、同じデバイス名があるので、別の情報(phys)も用いて、絞ります。

udevルールの記述

/etc/udev/rules.d/下に、udevルールを記述したファイルを用意します。

$ pwd
/etc/udev/rules.d

$ ls -l
-rw-r--r-- 1 root root  761 Jun 19 16:06 99-input-custom.rules

$ cat 99-input-custom.rules
SUBSYSTEM=="input", ATTRS{name}=="ADATA Technology Co., Ltd XPG Summoner Gaming Keyboard", ATTRS{phys}=="usb-0000:03:00.3-3.4/input0", SYMLINK+="input/event-keyboard1"

ルールを記述したら、リロードのため、下記を実行します

$ sudo udevadm control --reload-rules && sudo udevadm trigger
# もしくは下記コマンド
$ sudo udevadm control --reload && sudo udevadm trigger --action=add

その後、エイリアスで固定したデバイス(udevルール内のSYMLINK+=で指定したデバイス名)が表示されるか確認します。

$ evtest
No device specified, trying to scan all of /dev/input/event*
Not running as root, no devices may be available.
Available devices:
/dev/input/event-keyboard1:	ADATA Technology Co., Ltd XPG Summoner Gaming Keyboard
〜省略〜

表示されていれば、参照先のデバイスを、指定したデバイス名(event-keyboard1)にすることができます。

その他の方法

lsusbコマンドを用いて、デバイス情報(ベンダーID、プロダクトID)を取得する方法もあるみたいです。

参考にしたサイト

    Tags: