Skip to content

功能请求:改善 Linux 被控端绝对鼠标兼容性 #266

Description

@fdeo

建议为 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,但左键/右键/滚轮不生效

定位结果:

  1. 被控端执行 sudo evtest /dev/input/eventX,绝对移动时能看到 EV_ABS ABS_X/ABS_Y
  2. 发送 CH9329 绝对鼠标包时,buttons=0x01 不产生 BTN_LEFT
  3. 发送 CH9329 相对鼠标包时,dx=0,dy=0,buttons=0x01 可以正常产生 BTN_LEFT
  4. 判断问题原因是部分 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

注:若其他用户想尝试复现,MatchUSBIDMatchProduct 可用下面命令获取:

lsusb
cat /proc/bus/input/devices | grep -i -A8 -B3 'wch\|ch9329\|mouse'

综上,希望能在设置中加入这个兼容选项,默认保持现有行为,需要时用户手动开启,避免影响已有设备。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions