带自定义键的玩家键盘

带自定义键的玩家键盘

许多计算机和游戏爱好者使用特殊的键盘。这些键盘的一个常见功能是许多自定义键,这些键旨在绑定到特定于游戏和软件的特殊命令。

用于编辑和创建这些自定义键触发的命令的软件几乎总是在 Windows 中

EX:Tt Esports 挑战者软件挑战者职业游戏

当使用 Wine 运行软件时,它无法找到键盘或其他设备,因此无法对键绑定进行编程。

无法找到键盘

对于大多数键盘,自定义键默认绑定为ctrl+cctrl+v。因此System Settings,每当用户尝试使用这些命令时,使用设置这些键都会被覆盖。

这个问题有什么可能的解决方案,有没有办法让 Wine 检测硬件或者有其他方法来设置自定义键?

找到解决方案对 Linux 社区非常有帮助,因为在开发或使用专用软件时可以使用自定义密钥。

我的键盘是 HID 键盘,使用hid-generic.

对于默认情况下未设置的键,evtest除了它们返回的三个预设值外,不会注册任何内容

Event: time 1488397338.016750, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1488397338.016750, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0

xev只注册预设为ctrl+c的按键,例如2次按键,默认未设置的按键不注册

我有一个 Windows 系统,我可以在其中嗅探 USB 协议。但我该怎么做呢?

答案1

这可能需要几个步骤/迭代,并且问答格式不太合适。如果您遇到困难,请用更多信息更新您的问题,并在对此答案的评论中给我留言。那我会编辑我的答案。

从描述来看,特殊键到按键事件的映射似乎是在键盘中完成的,因此编程必须在键盘中进行,而不是在驱动程序中进行。

有各种适用于 Windows 的开源 USB 嗅探器,例如usbpcap或年龄较大的USB监听,谷歌可能会找到更多,以及如何使用它们的教程。

原则上,您需要在使用编程软件使用不同的按键序列对不同的特殊键进行编程时记录通信。然后查看数据包,比较它们,看看哪些字节因不同的特殊键或编程序列而变化。猜测协议,libusb在 Linux 上使用自己编写的程序重播它。

由于您的键盘是 HID,并且 HID 是高度标准化的,因此我们可以提供一些帮助。熟悉一下HID 文档(或者至少查找您需要的那些部分)。每个HID设备都带有一个描述符,描述符根据HID标准描述了与设备的所有可能的交互。如果这就是键盘的编程方式,并且如果没有太多“供应商特定”字段,我们可以直接猜测协议。

您可以通过两种方式读取描述符。

(1) 如果您的内核已debugfs启用,请以 root 身份执行

mount -t debugfs none /sys/kernel/debug
cat /sys/kernel/debug/hid/device_id/rdesc

device_id如果你的键盘的id在哪里。这会将原始描述符显示为十六进制字节,以及内核如何解析它。如果内核解析不够,请尝试赫德转换原始描述符。

(2) 设备上的问题HIDIOCGRDESCSIZEHIDIOCGRDESCioctl hidraw(查找dmesg适合您的键盘的内容)。 Linux 内核源代码samples/hidraw/hid-example.c中解释了如何做到这一点,或者使用现成的工具,例如usbhid转储

理想情况下你会看到一些特征或者输出与编程相关的描述。如果太多描述的字段不清楚或标记为“特定于供应商”,您可能仍然需要窥探软件工具。

相关内容