Linux で入力デバイスファイルのパスを特定する

入力デバイスの出力(?)を知りたい場合、/dev/input などを見ると思います。 ただ、このディレクトリには event16 みたいなワケわからん名前しかないので困る、ということで ID でリンクしてある /dev/input/by-id を見たりします。 しかし、ID でリンクしてくれないデバイスも結構あったりします。 そこで /proc/bus/input/devices を見たりするんですが、ここからデバイスファイルを抜きだすのはちょっと面倒。 ということで書いた簡易なスクリプトです。

引数なしでデバイスのリスト

$ find-input-devices
/home/anekos/bin/find-input-device <DEVICE_NAME>

Current deivces:
Sleep Button
...
Keebio The Nyquist Keyboard
...
DELL Dell TP713 Wireless Touchpad Mouse

バイスリストの名前を指定でデバイスファイルのパスを出力

$ find-input-device 'Keebio The Nyquist Keyboard'
/dev/input/event18

ソースコード

#!/bin/bash

set -euC

# exec 5> /tmp/xmosh/shell-script-debug.out
# BASH_XTRACEFD="5"
# PS4='$LINENO: '
# set -x

if [ "$#" -lt 1 ]
then
  exec >&2
  echo "$0 <DEVICE_NAME>"
  echo ''
  echo 'Current deivces:'
  grep '^N: Name=' /proc/bus/input/devices | sed 's/.*="//' | sed 's/"$//'
  exit 1
fi

function die {
  exit 1
}

NAME="$1"

dev="$(grep -A 10 "$NAME" /proc/bus/input/devices | grep '^H:')" || die
dev="$(expr "$dev" : '.*\(event[0-9]\+\)')" || die

echo "/dev/input/$dev"