2021/02/25(木) [n年前の日記]
#1 [hsp][raspberrypi] HSP と /dev/input/by-id について調べてる
Raspberry Pi Zero W + Raspberry Pi OS buster 上で HSP3.6beta を動かすとキーボードやマウスが無反応なる件が気になって、もうちょっと調べていたり。
OpenHSP の hsp3dish.cpp を眺めてみると、/dev/input/by-id というパスを見ているようで。
_OpenHSP/hsp3dish.cpp at master - onitama/OpenHSP
キーボードやマウスが違うと、そのあたりでも違いが出てくるのだろうかと気になって。
まず、無反応になる Logicool K400r (USB接続ワイヤレスキーボード、タッチパッド付)はこんな感じ。
反応する、Lenovo トラックポイントキーボード(USB有線接続キーボード、トラックポイント付)はこんな感じ。
無反応の、ELECOM M-BL21DBSV (USB接続ワイヤレスマウス)だけを繋いだ状態。
/dev/input/by-id 以下に何も出てこないんじゃないかと思ったけど、そんなことは無いなと…。どれもそれっぽい名前が出てきているように見える。
OpenHSP の hsp3dish.cpp を眺めてみると、/dev/input/by-id というパスを見ているようで。
_OpenHSP/hsp3dish.cpp at master - onitama/OpenHSP
キーボードやマウスが違うと、そのあたりでも違いが出てくるのだろうかと気になって。
まず、無反応になる Logicool K400r (USB接続ワイヤレスキーボード、タッチパッド付)はこんな感じ。
$ ll /dev/input 合計 0 drwxr-xr-x 4 root root 140 2月 25 22:15 ./ drwxr-xr-x 17 root root 3660 2月 25 22:15 ../ drwxr-xr-x 2 root root 100 2月 25 22:15 by-id/ drwxr-xr-x 2 root root 100 2月 25 22:15 by-path/ crw-rw---- 1 root input 13, 64 2月 25 22:15 event0 crw-rw---- 1 root input 13, 63 2月 25 22:14 mice crw-rw---- 1 root input 13, 32 2月 25 22:15 mouse0 $ ll /dev/input/by-id 合計 0 drwxr-xr-x 2 root root 100 2月 25 22:15 ./ drwxr-xr-x 4 root root 140 2月 25 22:15 ../ lrwxrwxrwx 1 root root 9 2月 25 22:15 usb-Logitech_USB_Receiver-event-if02 -> ../event0 lrwxrwxrwx 1 root root 9 2月 25 22:15 usb-Logitech_USB_Receiver-if02-event-mouse -> ../event0 lrwxrwxrwx 1 root root 9 2月 25 22:15 usb-Logitech_USB_Receiver-if02-mouse -> ../mouse0
反応する、Lenovo トラックポイントキーボード(USB有線接続キーボード、トラックポイント付)はこんな感じ。
$ ll /dev/input 合計 0 drwxr-xr-x 4 root root 240 2月 25 22:42 ./ drwxr-xr-x 17 root root 3660 2月 25 22:42 ../ drwxr-xr-x 2 root root 140 2月 25 22:42 by-id/ drwxr-xr-x 2 root root 120 2月 25 22:42 by-path/ crw-rw---- 1 root input 13, 64 2月 25 22:42 event0 crw-rw---- 1 root input 13, 65 2月 25 22:42 event1 crw-rw---- 1 root input 13, 66 2月 25 22:42 event2 crw-rw---- 1 root input 13, 67 2月 25 22:42 event3 crw-rw---- 1 root input 13, 68 2月 25 22:42 event4 crw-rw---- 1 root input 13, 69 2月 25 22:42 event5 crw-rw---- 1 root input 13, 63 2月 25 22:14 mice crw-rw---- 1 root input 13, 32 2月 25 22:42 mouse0 $ ll /dev/input/by-id 合計 0 drwxr-xr-x 2 root root 140 2月 25 22:42 ./ drwxr-xr-x 4 root root 240 2月 25 22:42 ../ lrwxrwxrwx 1 root root 9 2月 25 22:42 usb-Lenovo_ThinkPad_Compact_USB_Keyboard_with_TrackPoint-event-if01 -> ../event5 lrwxrwxrwx 1 root root 9 2月 25 22:42 usb-Lenovo_ThinkPad_Compact_USB_Keyboard_with_TrackPoint-event-kbd -> ../event0 lrwxrwxrwx 1 root root 9 2月 25 22:42 usb-Lenovo_ThinkPad_Compact_USB_Keyboard_with_TrackPoint-if01-event-mouse -> ../event1 lrwxrwxrwx 1 root root 9 2月 25 22:42 usb-Lenovo_ThinkPad_Compact_USB_Keyboard_with_TrackPoint-if01-mouse -> ../mouse0 lrwxrwxrwx 1 root root 9 2月 25 22:15 usb-Logitech_USB_Receiver-event-if02 -> ../event0
無反応の、ELECOM M-BL21DBSV (USB接続ワイヤレスマウス)だけを繋いだ状態。
$ ll /dev/input 合計 0 drwxr-xr-x 4 root root 200 2月 25 22:46 ./ drwxr-xr-x 17 root root 3640 2月 25 22:46 ../ drwxr-xr-x 2 root root 120 2月 25 22:46 by-id/ drwxr-xr-x 2 root root 100 2月 25 22:46 by-path/ crw-rw---- 1 root input 13, 64 2月 25 22:46 event0 crw-rw---- 1 root input 13, 65 2月 25 22:46 event1 crw-rw---- 1 root input 13, 66 2月 25 22:46 event2 crw-rw---- 1 root input 13, 67 2月 25 22:46 event3 crw-rw---- 1 root input 13, 63 2月 25 22:14 mice crw-rw---- 1 root input 13, 32 2月 25 22:46 mouse0 $ ll /dev/input/by-id 合計 0 drwxr-xr-x 2 root root 120 2月 25 22:46 ./ drwxr-xr-x 4 root root 200 2月 25 22:46 ../ lrwxrwxrwx 1 root root 9 2月 25 22:46 usb-ELECOM_ELECOM_BlueLED_Mouse-event-if00 -> ../event2 lrwxrwxrwx 1 root root 9 2月 25 22:46 usb-ELECOM_ELECOM_BlueLED_Mouse-event-mouse -> ../event0 lrwxrwxrwx 1 root root 9 2月 25 22:46 usb-ELECOM_ELECOM_BlueLED_Mouse-mouse -> ../mouse0 lrwxrwxrwx 1 root root 9 2月 25 22:15 usb-Logitech_USB_Receiver-event-if02 -> ../event0
/dev/input/by-id 以下に何も出てこないんじゃないかと思ったけど、そんなことは無いなと…。どれもそれっぽい名前が出てきているように見える。
◎ なんとなく分かってきた。 :
hsp3dish.cpp の initKeyboard() の中で、/dev/input/by-id/ 以下から得られる文字列に対し、正規表現を使って "event-kbd" と "event-mouse" を探して、それをキーボードとマウスとして扱うっぽいのだけど。
キーボードやマウスによっては、"event-kbd" がキーボード、"event-mouse" がマウス、とは限らない文字列を返してくる場合があるのだな…。
例えば Logicool K400r の場合、usb-Logitech_USB_Receiver-event-if02 か usb-Logitech_USB_Receiver-if02-event-mouse がキーボード、usb-Logitech_USB_Receiver-if02-mouse がマウスっぽい気配がする。mouse0 にリンクされてるし。"event-kbd" と "event-mouse" が実態に合ってない。たぶん。
ELECOM M-BL21DBSV の場合、usb-ELECOM_ELECOM_BlueLED_Mouse-mouse がマウスっぽい。これまた、"event-kbd" と "event-mouse" が実態に合ってない。たぶん。
Lenovo トラックポイント付きキーボードだけが、event-kbd はキーボード、event-mouse はマウス(トラックポイント)と返してくるっぽい。それでこの製品だけが反応するのだな。たぶん。
event0 がキーボードに相当するのかなと思ってるけど、二つ出てくるあたりが気になる…。
キーボードやマウスによっては、"event-kbd" がキーボード、"event-mouse" がマウス、とは限らない文字列を返してくる場合があるのだな…。
例えば Logicool K400r の場合、usb-Logitech_USB_Receiver-event-if02 か usb-Logitech_USB_Receiver-if02-event-mouse がキーボード、usb-Logitech_USB_Receiver-if02-mouse がマウスっぽい気配がする。mouse0 にリンクされてるし。"event-kbd" と "event-mouse" が実態に合ってない。たぶん。
ELECOM M-BL21DBSV の場合、usb-ELECOM_ELECOM_BlueLED_Mouse-mouse がマウスっぽい。これまた、"event-kbd" と "event-mouse" が実態に合ってない。たぶん。
Lenovo トラックポイント付きキーボードだけが、event-kbd はキーボード、event-mouse はマウス(トラックポイント)と返してくるっぽい。それでこの製品だけが反応するのだな。たぶん。
event0 がキーボードに相当するのかなと思ってるけど、二つ出てくるあたりが気になる…。
[ ツッコむ ]
以上です。