2021年12月29日 星期三

[RPi] 無中生有的 /dev/input/js0

今天在測試 Donkey Car 的搖桿,發現插上 2.4GHz 接收器竟然會變成 /dev/input/js1

因此 python3 manage.py drive --js 就讀不到搖桿資訊了,因為預設會使用 /dev/input/js0

還好這篇文章給了一些線索,可以使用 udevadm 指令去觀察這些裝置節點。

觀察結果如下。

$ sudo udevadm info /dev/input/js0

```

P: /devices/virtual/input/input4/js0
N: input/js0
L: 0
E: DEVPATH=/devices/virtual/input/input4/js0
E: DEVNAME=/dev/input/js0
E: MAJOR=13
E: MINOR=0
E: SUBSYSTEM=input
E: USEC_INITIALIZED=33222115
E: ID_INPUT=1
E: ID_INPUT_MOUSE=1
E: ID_SERIAL=noserial

```

$ sudo udevadm test-builtin input_id /class/input/js0 

```

Load module index
Skipping empty file: /etc/systemd/network/99-default.link
Created link configuration context.
ID_INPUT=1
ID_INPUT_MOUSE=1
Unload module index
Unloaded link configuration context.

```

不過最有收穫的竟然還是使用 jstest 去測試

jstest /dev/input/js0 

```

Driver version is 2.1.0.
Joystick (vnc-abspointer) has 2 axes (X, Y)
and 3 buttons (LeftBtn, RightBtn, MiddleBtn).
Testing ... (interrupt to exit)
Axes:  0:-32767  1:-32767 Buttons:  0:off  1:off  2:off 

```

發現這 Joystick 是 vnc-abspointer,也就是因為啟動 VNC Server 之後跑出來的...

因此解決方法有三個。

1. 不要開啟 VNC Server。

2. 修改 donkeypart_ps3_controller/donkeypart_ps3_controller/part.py

把所有 /dev/input/js0 改為 /dev/input/js1 之後重新安裝。

3. 最簡單,把接收器插在 Pi 上以後重開機,HID 裝置會比 vnc-abspointer 早載入,因此會拿到 js0

沒有留言: