2021/02/26(金) [n年前の日記]
#1 [hsp][raspberrypi][linux] HSP と /dev/input/by-id についてもう少し調べてる
_昨日に続いて作業。
Raspberry Pi Zero W + Raspberry Pi OS buster 上で HSP3.6beta を動かすとキーボードやマウスが無反応なる件が気になって、もうちょっと調べていたり。
HSP3.6betaでは無反応だった入力機器について、/dev/input/by-id でどんな文字列を返してくるのか調べてみる。
昨日は書き忘れてたけど、メモ内に出てくる ll は、ls -alF のエイリアス。
無反応だった、USB接続ワイヤレスマウス Logicool VX Nano。マウスのみ接続してある状態。
無反応だった、USB有線接続マウス Logicool(Logitech) MX300。マウスのみ接続してある状態。
反応した、USB接続ワイヤレスキーボード BUFFALO BSKBW03WH。キーボードのみ接続してある状態。
反応する時もあった、USB有線接続マウス A4Tech XL-755BK。マウスのみ接続してある状態。
USB接続ワイヤレスキーボード BUFFALO BSKBW03WHと、USB有線接続マウス A4Tech XL-755BK の2つを接続した状態。キーボードは反応するけど、マウスは反応しない。
USB接続ワイヤレスキーボード BUFFALO BSKBW03WHと、USB有線接続マウス A4Tech XL-755BK の2つを接続した状態。マウスを接続した後からキーボードを接続してみた。マウスは反応するけど、キーボードは反応しない。
キーボードもマウスも接続してない状態。
さて、ここから分かることは何だろう。 _昨日調べた件 も眺めつつ考えると…。
となると、"event-kbd" や "event-mouse" という文字列を頼りに、それがキーボードかマウスかを判別するのは難しい、ということになってしまうのだろうか…。自信無いけど。
しかし、Linux のデスクトップ画面は、それらの入力機器でフツーに操作できているわけで…。ということは、Linux で入力機器の情報を読み取るときはえてしてこうすればいいのだ、てな作法が存在してそうな気がするなと…。
HSP3.6betaでは無反応だった入力機器について、/dev/input/by-id でどんな文字列を返してくるのか調べてみる。
昨日は書き忘れてたけど、メモ内に出てくる ll は、ls -alF のエイリアス。
無反応だった、USB接続ワイヤレスマウス Logicool VX Nano。マウスのみ接続してある状態。
$ ll /dev/input 合計 0 drwxr-xr-x 4 root root 160 2月 25 23:40 ./ drwxr-xr-x 17 root root 3660 2月 25 23:41 ../ drwxr-xr-x 2 root root 100 2月 25 23:40 by-id/ drwxr-xr-x 2 root root 100 2月 25 23:40 by-path/ crw-rw---- 1 root input 13, 64 2月 25 23:40 event0 crw-rw---- 1 root input 13, 65 2月 25 23:40 event1 crw-rw---- 1 root input 13, 63 2月 25 23:40 mice crw-rw---- 1 root input 13, 32 2月 25 23:40 mouse0 $ ll /dev/input/by-id 合計 0 drwxr-xr-x 2 root root 100 2月 25 23:40 ./ drwxr-xr-x 4 root root 160 2月 25 23:40 ../ lrwxrwxrwx 1 root root 9 2月 25 23:40 usb-Logitech_USB_Receiver-event-if01 -> ../event1 lrwxrwxrwx 1 root root 9 2月 25 23:40 usb-Logitech_USB_Receiver-event-mouse -> ../event0 lrwxrwxrwx 1 root root 9 2月 25 23:40 usb-Logitech_USB_Receiver-mouse -> ../mouse0
無反応だった、USB有線接続マウス Logicool(Logitech) MX300。マウスのみ接続してある状態。
$ ll /dev/input 合計 0 drwxr-xr-x 4 root root 140 2月 26 07:52 ./ drwxr-xr-x 16 root root 3620 2月 26 07:52 ../ drwxr-xr-x 2 root root 80 2月 26 07:52 by-id/ drwxr-xr-x 2 root root 80 2月 26 07:52 by-path/ crw-rw---- 1 root input 13, 64 2月 26 07:52 event0 crw-rw---- 1 root input 13, 63 2月 25 23:40 mice crw-rw---- 1 root input 13, 32 2月 26 07:52 mouse0 $ ll /dev/input/by-id 合計 0 drwxr-xr-x 2 root root 80 2月 26 07:52 ./ drwxr-xr-x 4 root root 140 2月 26 07:52 ../ lrwxrwxrwx 1 root root 9 2月 26 07:52 usb-B16_b_02_USB-PS_2_Optical_Mouse-event-mouse -> ../event0 lrwxrwxrwx 1 root root 9 2月 26 07:52 usb-B16_b_02_USB-PS_2_Optical_Mouse-mouse -> ../mouse0 $ cat /proc/bus/input/devices I: Bus=0003 Vendor=046d Product=c024 Version=0110 N: Name="B16_b_02 USB-PS/2 Optical Mouse" P: Phys=usb-20980000.usb-1.2/input0 S: Sysfs=/devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/0003:046D:C024.0006/input/input10 U: Uniq= H: Handlers=leds mouse0 event0 B: PROP=0 B: EV=20017 B: KEY=f0000 0 0 0 0 0 0 0 0 B: REL=903 B: MSC=10 B: LED=100
反応した、USB接続ワイヤレスキーボード BUFFALO BSKBW03WH。キーボードのみ接続してある状態。
$ ll /dev/input 合計 0 drwxr-xr-x 4 root root 200 2月 26 07:04 ./ drwxr-xr-x 17 root root 3680 2月 26 07:04 ../ drwxr-xr-x 2 root root 120 2月 26 07:04 by-id/ drwxr-xr-x 2 root root 120 2月 26 07:04 by-path/ crw-rw---- 1 root input 13, 64 2月 26 07:04 event0 crw-rw---- 1 root input 13, 65 2月 26 07:04 event1 crw-rw---- 1 root input 13, 66 2月 26 07:04 event2 crw-rw---- 1 root input 13, 67 2月 26 07:04 event3 crw-rw---- 1 root input 13, 63 2月 25 23:40 mice crw-rw---- 1 root input 13, 32 2月 26 07:04 mouse0 $ ll /dev/input/by-id 合計 0 drwxr-xr-x 2 root root 120 2月 26 07:04 ./ drwxr-xr-x 4 root root 200 2月 26 07:04 ../ lrwxrwxrwx 1 root root 9 2月 26 07:04 usb-JME_RF_Receiver-event-if02 -> ../event2 lrwxrwxrwx 1 root root 9 2月 26 07:04 usb-JME_RF_Receiver-event-kbd -> ../event0 lrwxrwxrwx 1 root root 9 2月 26 07:04 usb-JME_RF_Receiver-if01-event-mouse -> ../event1 lrwxrwxrwx 1 root root 9 2月 26 07:04 usb-JME_RF_Receiver-if01-mouse -> ../mouse0 $ cat /proc/bus/input/devices I: Bus=0003 Vendor=05af Product=3063 Version=0110 N: Name="JME RF Receiver" P: Phys=usb-20980000.usb-1.2/input0 S: Sysfs=/devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/0003:05AF:3063.0003/input/input4 U: Uniq= H: Handlers=sysrq kbd leds event0 B: PROP=0 B: EV=120013 B: KEY=10000 7 ff9f207a c14057ff febeffdf ffefffff ffffffff fffffffe B: MSC=10 B: LED=1f I: Bus=0003 Vendor=05af Product=3063 Version=0110 N: Name="JME RF Receiver" P: Phys=usb-20980000.usb-1.2/input1 S: Sysfs=/devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.1/0003:05AF:3063.0004/input/input5 U: Uniq= H: Handlers=mouse0 event1 B: PROP=0 B: EV=17 B: KEY=1f0000 0 0 0 0 0 0 0 0 B: REL=1943 B: MSC=10 I: Bus=0003 Vendor=05af Product=3063 Version=0110 N: Name="JME RF Receiver Consumer Control" P: Phys=usb-20980000.usb-1.2/input2 S: Sysfs=/devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.2/0003:05AF:3063.0005/input/input7 U: Uniq= H: Handlers=kbd event2 B: PROP=0 B: EV=1f B: KEY=300ff 0 0 0 0 483ffff 17aff32d bfd44446 0 0 1 130c73 b17c000 267bfa d9415fed 9e1680 4400 0 10000002 B: REL=1040 B: ABS=1 0 B: MSC=10 I: Bus=0003 Vendor=05af Product=3063 Version=0110 N: Name="JME RF Receiver System Control" P: Phys=usb-20980000.usb-1.2/input2 S: Sysfs=/devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.2/0003:05AF:3063.0005/input/input8 U: Uniq= H: Handlers=kbd event3 B: PROP=0 B: EV=13 B: KEY=c000 100000 0 0 0 B: MSC=10
反応する時もあった、USB有線接続マウス A4Tech XL-755BK。マウスのみ接続してある状態。
$ ll /dev/input 合計 0 drwxr-xr-x 4 root root 220 2月 26 07:57 ./ drwxr-xr-x 17 root root 3660 2月 26 07:57 ../ drwxr-xr-x 2 root root 120 2月 26 07:57 by-id/ drwxr-xr-x 2 root root 120 2月 26 07:57 by-path/ crw-rw---- 1 root input 13, 64 2月 26 07:57 event0 crw-rw---- 1 root input 13, 65 2月 26 07:57 event1 crw-rw---- 1 root input 13, 66 2月 26 07:57 event2 crw-rw---- 1 root input 13, 67 2月 26 07:57 event3 crw-rw---- 1 root input 13, 68 2月 26 07:57 event4 crw-rw---- 1 root input 13, 63 2月 25 23:40 mice crw-rw---- 1 root input 13, 32 2月 26 07:57 mouse0 $ ll /dev/input/by-id 合計 0 drwxr-xr-x 2 root root 120 2月 26 07:57 ./ drwxr-xr-x 4 root root 220 2月 26 07:57 ../ lrwxrwxrwx 1 root root 9 2月 26 07:57 usb-A4TECH_USB_Device-event-if00 -> ../event1 lrwxrwxrwx 1 root root 9 2月 26 07:57 usb-A4TECH_USB_Device-event-kbd -> ../event0 lrwxrwxrwx 1 root root 9 2月 26 07:57 usb-A4TECH_USB_Device-if01-event-mouse -> ../event4 lrwxrwxrwx 1 root root 9 2月 26 07:57 usb-A4TECH_USB_Device-if01-mouse -> ../mouse0 $ cat /proc/bus/input/devices I: Bus=0003 Vendor=09da Product=9090 Version=0111 N: Name="A4TECH USB Device Keyboard" P: Phys=usb-20980000.usb-1.2/input0 S: Sysfs=/devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/0003:09DA:9090.0007/input/input11 U: Uniq= H: Handlers=sysrq kbd leds event0 B: PROP=0 B: EV=120013 B: KEY=10000 7 ff800000 7ff febeffdf ffefffff ffffffff fffffffe B: MSC=10 B: LED=1f I: Bus=0003 Vendor=09da Product=9090 Version=0111 N: Name="A4TECH USB Device System Control" P: Phys=usb-20980000.usb-1.2/input0 S: Sysfs=/devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/0003:09DA:9090.0007/input/input12 U: Uniq= H: Handlers=kbd event1 B: PROP=0 B: EV=1b B: KEY=400000 1000000 12 0 0 0 8 0 4000 10cc00 101680 0 0 0 B: ABS=100 0 B: MSC=10 I: Bus=0003 Vendor=09da Product=9090 Version=0111 N: Name="A4TECH USB Device Consumer Control" P: Phys=usb-20980000.usb-1.2/input0 S: Sysfs=/devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/0003:09DA:9090.0007/input/input13 U: Uniq= H: Handlers=kbd event2 B: PROP=0 B: EV=1f B: KEY=300ff 0 0 0 0 483ffff 17aff32d bfd44446 0 0 1 130c73 b17c000 267bfa d9415fed 9e1680 4400 0 10000002 B: REL=1040 B: ABS=1 0 B: MSC=10 I: Bus=0003 Vendor=09da Product=9090 Version=0111 N: Name="A4TECH USB Device" P: Phys=usb-20980000.usb-1.2/input0 S: Sysfs=/devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/0003:09DA:9090.0007/input/input14 U: Uniq= H: Handlers=event3 B: PROP=0 B: EV=9 B: ABS=100 0 I: Bus=0003 Vendor=09da Product=9090 Version=0111 N: Name="A4TECH USB Device" P: Phys=usb-20980000.usb-1.2/input1 S: Sysfs=/devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.1/0003:09DA:9090.0008/input/input15 U: Uniq= H: Handlers=mouse0 event4 B: PROP=0 B: EV=17 B: KEY=ffff0000 0 0 0 0 0 0 0 0 B: REL=1943 B: MSC=10
USB接続ワイヤレスキーボード BUFFALO BSKBW03WHと、USB有線接続マウス A4Tech XL-755BK の2つを接続した状態。キーボードは反応するけど、マウスは反応しない。
$ ll /dev/input 合計 0 drwxr-xr-x 4 root root 320 2月 26 08:02 ./ drwxr-xr-x 17 root root 3720 2月 26 08:02 ../ drwxr-xr-x 2 root root 200 2月 26 08:02 by-id/ drwxr-xr-x 2 root root 200 2月 26 08:02 by-path/ crw-rw---- 1 root input 13, 64 2月 26 08:02 event0 crw-rw---- 1 root input 13, 65 2月 26 08:02 event1 crw-rw---- 1 root input 13, 66 2月 26 08:02 event2 crw-rw---- 1 root input 13, 67 2月 26 08:02 event3 crw-rw---- 1 root input 13, 68 2月 26 08:02 event4 crw-rw---- 1 root input 13, 69 2月 26 08:02 event5 crw-rw---- 1 root input 13, 70 2月 26 08:02 event6 crw-rw---- 1 root input 13, 71 2月 26 08:02 event7 crw-rw---- 1 root input 13, 72 2月 26 08:02 event8 crw-rw---- 1 root input 13, 63 2月 25 23:40 mice crw-rw---- 1 root input 13, 32 2月 26 08:02 mouse0 crw-rw---- 1 root input 13, 33 2月 26 08:02 mouse1 $ ll /dev/input/by-id 合計 0 drwxr-xr-x 2 root root 200 2月 26 08:02 ./ drwxr-xr-x 4 root root 320 2月 26 08:02 ../ lrwxrwxrwx 1 root root 9 2月 26 08:02 usb-A4TECH_USB_Device-event-if00 -> ../event7 lrwxrwxrwx 1 root root 9 2月 26 08:02 usb-A4TECH_USB_Device-event-kbd -> ../event4 lrwxrwxrwx 1 root root 9 2月 26 08:02 usb-A4TECH_USB_Device-if01-event-mouse -> ../event8 lrwxrwxrwx 1 root root 9 2月 26 08:02 usb-A4TECH_USB_Device-if01-mouse -> ../mouse1 lrwxrwxrwx 1 root root 9 2月 26 08:02 usb-JME_RF_Receiver-event-if02 -> ../event2 lrwxrwxrwx 1 root root 9 2月 26 08:02 usb-JME_RF_Receiver-event-kbd -> ../event0 lrwxrwxrwx 1 root root 9 2月 26 08:02 usb-JME_RF_Receiver-if01-event-mouse -> ../event1 lrwxrwxrwx 1 root root 9 2月 26 08:02 usb-JME_RF_Receiver-if01-mouse -> ../mouse0
USB接続ワイヤレスキーボード BUFFALO BSKBW03WHと、USB有線接続マウス A4Tech XL-755BK の2つを接続した状態。マウスを接続した後からキーボードを接続してみた。マウスは反応するけど、キーボードは反応しない。
$ ll /dev/input 合計 0 drwxr-xr-x 4 root root 320 2月 26 08:06 ./ drwxr-xr-x 17 root root 3720 2月 26 08:06 ../ drwxr-xr-x 2 root root 200 2月 26 08:06 by-id/ drwxr-xr-x 2 root root 200 2月 26 08:06 by-path/ crw-rw---- 1 root input 13, 64 2月 26 08:06 event0 crw-rw---- 1 root input 13, 65 2月 26 08:06 event1 crw-rw---- 1 root input 13, 66 2月 26 08:06 event2 crw-rw---- 1 root input 13, 67 2月 26 08:06 event3 crw-rw---- 1 root input 13, 68 2月 26 08:02 event4 crw-rw---- 1 root input 13, 69 2月 26 08:02 event5 crw-rw---- 1 root input 13, 70 2月 26 08:02 event6 crw-rw---- 1 root input 13, 71 2月 26 08:02 event7 crw-rw---- 1 root input 13, 72 2月 26 08:02 event8 crw-rw---- 1 root input 13, 63 2月 25 23:40 mice crw-rw---- 1 root input 13, 32 2月 26 08:06 mouse0 crw-rw---- 1 root input 13, 33 2月 26 08:02 mouse1 $ ll /dev/input/by-id 合計 0 drwxr-xr-x 2 root root 200 2月 26 08:06 ./ drwxr-xr-x 4 root root 320 2月 26 08:06 ../ lrwxrwxrwx 1 root root 9 2月 26 08:02 usb-A4TECH_USB_Device-event-if00 -> ../event7 lrwxrwxrwx 1 root root 9 2月 26 08:02 usb-A4TECH_USB_Device-event-kbd -> ../event4 lrwxrwxrwx 1 root root 9 2月 26 08:02 usb-A4TECH_USB_Device-if01-event-mouse -> ../event8 lrwxrwxrwx 1 root root 9 2月 26 08:02 usb-A4TECH_USB_Device-if01-mouse -> ../mouse1 lrwxrwxrwx 1 root root 9 2月 26 08:06 usb-JME_RF_Receiver-event-if02 -> ../event2 lrwxrwxrwx 1 root root 9 2月 26 08:06 usb-JME_RF_Receiver-event-kbd -> ../event0 lrwxrwxrwx 1 root root 9 2月 26 08:06 usb-JME_RF_Receiver-if01-event-mouse -> ../event1 lrwxrwxrwx 1 root root 9 2月 26 08:06 usb-JME_RF_Receiver-if01-mouse -> ../mouse0
キーボードもマウスも接続してない状態。
$ ll /dev/input 合計 0 drwxr-xr-x 3 root root 80 2月 26 08:36 ./ drwxr-xr-x 16 root root 3600 2月 26 08:36 ../ drwxr-xr-x 2 root root 60 2月 26 08:36 by-path/ crw-rw---- 1 root input 13, 63 2月 25 23:40 mice
さて、ここから分かることは何だろう。 _昨日調べた件 も眺めつつ考えると…。
- キーボードしか接続していないのに、/dev/input/by-id/ 以下に "event-mouse" を含む文字列を返してくる機器がある。
- マウスしか接続していないのに、/dev/input/by-id/ 以下に "event-kbd" を含む文字列を返してくる機器がある。
- キーボードとマウスを接続すると、"event-kbd"、"event-mouse" を含む文字列が2回出現してしまう機器の組み合わせがある。
- マウスが "event-mouse" を含む文字列を返してきても、それが event0 にリンクされてる時がある。(※ これは問題無いっぽい?)
となると、"event-kbd" や "event-mouse" という文字列を頼りに、それがキーボードかマウスかを判別するのは難しい、ということになってしまうのだろうか…。自信無いけど。
しかし、Linux のデスクトップ画面は、それらの入力機器でフツーに操作できているわけで…。ということは、Linux で入力機器の情報を読み取るときはえてしてこうすればいいのだ、てな作法が存在してそうな気がするなと…。
◎ event0にもマウスの入力が入ってるっぽい。 :
hexdump /dev/input/event0 と打って、Logicool K400r のタッチパッドを操作したら、何かの値がずらずらと出てきた。てっきり、event0 がキー入力で、mouse0 がマウス入力と思い込んでた…。event0 にもマウスの入力値が含まれていて、/dev/input/mouse0 がマウス入力、というわけではないのだな…。
hexdump /dev/input/mouse0 も、タッチパッドを操作すると何かの値がずらずらと出てくる。ただ、キー入力をしても、何の値も出てこない。もしかして、mouse0 はマウス座標関係を返してくる、てな感じなのだろうか…? 分からんけど。
以下のページを眺めたら、event0 にはマウス関連情報も含まれている、と書いてあった。
_Linux Input Subsystemの使い方
event0 は、time(おそらく8byte), type(2byte), code(2byte), value(4byte) を返すらしい。
hexdump /dev/input/mouse0 も、タッチパッドを操作すると何かの値がずらずらと出てくる。ただ、キー入力をしても、何の値も出てこない。もしかして、mouse0 はマウス座標関係を返してくる、てな感じなのだろうか…? 分からんけど。
以下のページを眺めたら、event0 にはマウス関連情報も含まれている、と書いてあった。
_Linux Input Subsystemの使い方
event0 は、time(おそらく8byte), type(2byte), code(2byte), value(4byte) を返すらしい。
◎ evtestをインストール。 :
evtest というツールを使うと、入力機器がどんな値を返してきているかを分かりやすく表示してくれる、という話を見かけた。Raspberry Pi OS buster なら、以下でインストールできる。
evtest と打つと、event? を質問されるので、0 を打ってEnter。Shiftキーを押してみたり、タッチパッドを操作してみると、EV_MSC、EV_KEY(キー入力)、EV_REL(マウスの動き)等々が表示された。何のキーが押されたか、マウスはX座標とY座標のどちらに動いたか、等も表示してくれる。
sudo apt install evtest
evtest と打つと、event? を質問されるので、0 を打ってEnter。Shiftキーを押してみたり、タッチパッドを操作してみると、EV_MSC、EV_KEY(キー入力)、EV_REL(マウスの動き)等々が表示された。何のキーが押されたか、マウスはX座標とY座標のどちらに動いたか、等も表示してくれる。
◎ lsinputをインストール。 :
lsinput なるツールを使うと、入力機器の情報が得られるかもという話を見かけたのでインストールしてみる。input-utils というパッケージに入っているらしい。
sudo apt install input-utils
$ lsinput /dev/input/event0 bustype : BUS_USB vendor : 0x46d product : 0x4024 version : 273 name : "Logitech K400" phys : "usb-20980000.usb-1.1/input2:1" uniq : "4024-73-8d-f5-e4" bits ev : EV_SYN EV_KEY EV_REL EV_ABS EV_MSC EV_LED EV_REPEV_KEY と EV_REL が出ているあたり、この機器はキー入力とマウス入力を返すよ、ということなんだろうか。
[ ツッコむ ]
以上です。