我有一只鼠标(Canyon CND-SGM14RGB),上面有多个可编程按钮,其中一半被设置为多媒体按钮。配置软件仅适用于 Windows,这些按钮在 Windows 中可以正常工作——即使没有特殊驱动程序。
然而,在 Linux 中,只有映射到标准鼠标操作的按钮才有效(lmb、rmb、中、前进/后退)。多媒体按钮不起作用。
我尝试过以下诊断步骤:
启动
wev
(xev
wayland 的替代方案)并按下所有按钮:常规按钮可以使用,但多媒体按钮不行。
执行
cat /dev/input/eventX
并寻找新数据:根据
/proc/bus/input/devices
与鼠标相关的两个文件,其中一个在进行常规鼠标活动时确实发出垃圾,而在按下多媒体按钮时两个文件都没有声音。启动 Wireshark 并寻找鼠标数据包,我发现:
- 握手 (???) 从设备 2.27.0(总线 2、设备 27、端点 0)发送
- 常规鼠标事件(在 中发出的事件
/dev/input/eventX
)从设备 2.27.1 发送 - 多媒体按钮按下从设备 2.27.2 发送。
我可以做些什么来让这些按钮正常工作吗?如果需要,我可以提供 Wireshark 转储文件。
编辑1:lsusb
输出
Bus 002 Device 027: ID 258a:0027 SINOWEALTH Wired Gaming Mouse
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x258a
idProduct 0x0027
bcdDevice 1.02
iManufacturer 1 SINOWEALTH
iProduct 2 Wired Gaming Mouse
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x003b
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xa0
(Bus Powered)
Remote Wakeup
MaxPower 480mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 2 Mouse
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 71
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 1 Keyboard
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 213
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 1
Device Status: 0x0000
(Bus Powered)
编辑2:相关libinput list-devices
输出
Device: SINOWEALTH Wired Gaming Mouse
Kernel: /dev/input/event9
Group: 9
Seat: seat0, default
Capabilities: pointer
Tap-to-click: n/a
Tap-and-drag: n/a
Tap drag lock: n/a
Left-handed: disabled
Nat.scrolling: disabled
Middle emulation: disabled
Calibration: n/a
Scroll methods: button
Click methods: none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles: flat *adaptive
Rotation: n/a
Device: SINOWEALTH Wired Gaming Mouse Keyboard
Kernel: /dev/input/event10
Group: 9
Seat: seat0, default
Capabilities: keyboard
Tap-to-click: n/a
Tap-and-drag: n/a
Tap drag lock: n/a
Left-handed: n/a
Nat.scrolling: n/a
Middle emulation: n/a
Calibration: n/a
Scroll methods: none
Click methods: none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles: n/a
Rotation: n/a
答案1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 1 Boot Interface Subclass
bInterfaceProtocol 1 Keyboard
看起来鼠标并没有使用普通的USB HID协议,而是一个单独的USB HID 启动协议usbkbd
,由单独的内核模块处理usbmouse
。绝大多数 USB 鼠标hid
更喜欢该协议,某些发行版甚至可能不会自动加载鼠标的启动协议驱动程序。
由于该usbhid
模块通常声明所有识别为通用 USB 鼠标和键盘设备的设备,因此您可能必须明确确定该鼠标的启动协议驱动程序的优先级。
您可以通过创建包含/etc/modprobe.d/canyonmouse.conf
以下内容的文件来完成此操作:
# Prioritize boot protocol for the multimedia keys of this mouse
install usbhid /sbin/modprobe usbkbd; /sbin/modprobe -i usbhid
alias usb:v258ap0027* usbkbd
创建此文件后,您应该更新 initrd/initramfs 文件。
这将强制键盘启动协议模块在模块之前首先加载,使其有机会在驱动程序接管usbhid
之前控制鼠标(特别是其“键盘”接口) 。usbhid
我必须做同样的事情来使服务器具有基于 AST2400 的远程管理界面,以响应基于 Web 的远程管理连接上的击键:事实证明,远程管理连接为服务器提供了虚拟鼠标和键盘设备,两者都只支持启动协议。对于鼠标功能来说,这不是问题,但显然仅支持启动协议的键盘非常罕见,目前还没有对它们的自动支持。
由于使用 HID 启动协议的要求非常罕见,因此某些发行版(例如 Debian 11)已停止在其标准内核中提供启动协议驱动程序。因此,如果modprobe usbkbd
作为 root 导致错误表明此类模块不可用,则您可能需要CONFIG_USB_KBD
启用内核构建时配置选项的备用/自定义内核。
答案2
https://askubuntu.com/a/1460840/906557
我现在不知道为什么,但它正在工作:
使用这个特殊的鼠标(我相信还有许多其他鼠标),您可以使用 Windows 软件将附加按钮绑定到任何组合键,例如Ctrl+ Alt+ Arrow button,然后将它们用作 Ubuntu 中媒体的自定义快捷方式。