建议为 CH9329 鼠标增加“混合模式/相对点击”开关,改善 Linux 被控端绝对鼠标兼容性
关联:#93、#192
我的环境:
- One-KVM 主机:Debian 13 amd64
- HID:CH340 + CH9329,
Vendor=1a86 Product=e129
- 被控端:Ubuntu 22.04,kernel 6.8,X11
- 现象:相对鼠标正常;绝对鼠标能产生
ABS_X/ABS_Y,但左键/右键/滚轮不生效
定位结果:
- 被控端执行
sudo evtest /dev/input/eventX,绝对移动时能看到 EV_ABS ABS_X/ABS_Y。
- 发送 CH9329 绝对鼠标包时,
buttons=0x01 不产生 BTN_LEFT。
- 发送 CH9329 相对鼠标包时,
dx=0,dy=0,buttons=0x01 可以正常产生 BTN_LEFT。
- 判断问题原因是部分 Linux 被控端不接受/不解析 CH9329 绝对鼠标包里的 button/wheel 字段。
建议:
在鼠标配置里增加一个兼容开关,例如:
混合模式
强制使用相对鼠标包发送点击/滚轮
强制使用绝对移动
- 或其他更合适的设置选项
行为建议:
MoveAbs:继续发送绝对鼠标包
Down/Up:发送相对鼠标包,dx=0,dy=0
Scroll:发送相对鼠标包,dx=0,dy=0
我尝试了简单修改 src/hid/ch9329.rs 绝对鼠标模式下的代码逻辑:
// MoveAbs 保持不变
self.send_mouse_absolute(buttons, x, y, 0)?;
// Down / Up 改为
self.send_mouse_relative(new_buttons, 0, 0, 0)?;
// Scroll 改为
self.send_mouse_relative(buttons, 0, 0, event.scroll)?;
安装修改后的版本,左右键和滚轮已经可以在 Ubuntu 22.04 被控端触发。
另外,Linux/X11 下还可能需要让 Xorg 使用 CH9329 的绝对轴。我的被控端额外配置如下:
sudo apt install -y xserver-xorg-input-evdev
sudo mkdir -p /etc/X11/xorg.conf.d
sudo tee /etc/X11/xorg.conf.d/99-ch9329-evdev.conf >/dev/null <<'EOF'
Section "InputClass"
Identifier "CH9329 absolute mouse via evdev"
MatchUSBID "1a86:e129"
MatchProduct "WWW.WCH.CN WCH UART TO KB-MS_V1.8 Mouse"
MatchIsPointer "on"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
Option "IgnoreRelativeAxes" "true"
Option "IgnoreAbsoluteAxes" "false"
Option "Mode" "Absolute"
EndSection
EOF
sudo reboot
注:若其他用户想尝试复现,MatchUSBID 和 MatchProduct 可用下面命令获取:
lsusb
cat /proc/bus/input/devices | grep -i -A8 -B3 'wch\|ch9329\|mouse'
综上,希望能在设置中加入这个兼容选项,默认保持现有行为,需要时用户手动开启,避免影响已有设备。
建议为 CH9329 鼠标增加“混合模式/相对点击”开关,改善 Linux 被控端绝对鼠标兼容性
关联:#93、#192
我的环境:
Vendor=1a86 Product=e129ABS_X/ABS_Y,但左键/右键/滚轮不生效定位结果:
sudo evtest /dev/input/eventX,绝对移动时能看到EV_ABS ABS_X/ABS_Y。buttons=0x01不产生BTN_LEFT。dx=0,dy=0,buttons=0x01可以正常产生BTN_LEFT。建议:
在鼠标配置里增加一个兼容开关,例如:
混合模式强制使用相对鼠标包发送点击/滚轮强制使用绝对移动行为建议:
我尝试了简单修改
src/hid/ch9329.rs绝对鼠标模式下的代码逻辑:安装修改后的版本,左右键和滚轮已经可以在 Ubuntu 22.04 被控端触发。
另外,Linux/X11 下还可能需要让 Xorg 使用 CH9329 的绝对轴。我的被控端额外配置如下:
注:若其他用户想尝试复现,
MatchUSBID和MatchProduct可用下面命令获取:综上,希望能在设置中加入这个兼容选项,默认保持现有行为,需要时用户手动开启,避免影响已有设备。