Linux 上的 Jelly Comb 键盘

Linux 上的 Jelly Comb 键盘

所以我买了一个 Jelly Comb 键盘作为圣诞礼物。但问题是,根据制造商的说法,键盘是打算在 Windows 上使用的。所以现在我有以下问题:

  1. 如果我按下 Num Lock,键盘就会开始变得奇怪;除了一些数字和一些充当数字的字母外,大多数按键都停止工作,而 Num Lock 无法再关闭。我尝试使用numlockx off,这样当我将键盘连接到计算机时,可以防止 Num Lock 打开,但我有时喜欢使用小键盘,但我不能这样做。

  2. F1-F12 不起作用。通过按 Fn,F 键还可以充当多媒体键,或者至少应该是这样。但就我而言,按任意一个 F 键都会导致一些随机的多媒体操作(随机与键上印制的不同),但是当我使用 Fn 键按下它时,其效果只会更改为其他一些多媒体操作,再次打印在钥匙上以外的其他东西。

  3. 当我检查 的输出时xev,我发现某些键具有相同的键码。例如,F11 打印与 Fn+F4 相同的输出。这是示例输出:

KeyRelease event, serial 28, synthetic NO, window 0x3e00001,
    root 0x5c4, subw 0x0, time 2572602, (456,941), root:(521,1045),
    state 0x0, keycode 33 (keysym 0x70, p), same_screen YES,
    XLookupString gives 1 bytes: (70) "p"
    XFilterEvent returns: False

KeymapNotify event, serial 28, synthetic NO, window 0x0,
    keys:  4294967236 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeymapNotify event, serial 28, synthetic NO, window 0x0,
    keys:  4294967236 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

第一个是一些随机字母,后两个来自 F11 和 Fn+F4。

有关更多信息,我正在运行带有 Gnome 的 Ubuntu 20.04。

所以我的问题是,是否有什么办法可以在linux上正常使用这个键盘。我想,有某种方法可以“告诉”操作系统像 Windows 一样解释键盘,但我没有成功找到类似的东西。

编辑:

因此,按照 @dirkt 的建议,我检查了 的输出evtest,并分别得到了 Fn+F11 和 F4 的以下行:

Event: time 1609244073.713496, type 1 (EV_KEY), code 113 (KEY_MUTE), value 1
Event: time 1609244073.713496, -------------- SYN_REPORT ------------
Event: time 1609244073.738779, type 1 (EV_KEY), code 113 (KEY_MUTE), value 0
Event: time 1609244073.738779, -------------- SYN_REPORT ------------
Event: time 1609244076.661538, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2
Event: time 1609244076.661538, type 1 (EV_KEY), code 113 (KEY_MUTE), value 1
Event: time 1609244076.661538, -------------- SYN_REPORT ------------
Event: time 1609244076.687504, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2
Event: time 1609244076.687504, type 1 (EV_KEY), code 113 (KEY_MUTE), value 0
Event: time 1609244076.687504, -------------- SYN_REPORT ------------

Event: time 1609244076.687504, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2两者都有相同的代码(113 KEY_MUTE),但当我不按 Fn 时,我会得到额外的一行。所有常规键(如字母和数字)也是如此。但是当我将 F1-F12 与 Fn 键组合使用时,该线消失了。所以我的后续问题是,我可以利用那条额外的行,以便 linux 区分具有相同键码的键吗?如果可以,如何区分?

答案1

部分答案:

据制造商称,该键盘适用于 Windows。

这可能意味着它有一个特定于 Windows 的驱动程序来处理该键盘的非标准部分。

由于该驱动程序在 Linux 上不可用,因此您可以选择按原样使用它,或者对差异进行逆向工程,然后尝试调整 Linux 来处理这些差异。后者需要时间和精力。

Google for Jelly Comb 显示它可能是带有 USB 接收器的无线键盘(你没有说,我必须猜测)。

关于键盘堆栈如何在 Linux 上工作的快速入门:

对于 USB 设备,有一种称为 HID(人机接口设备)协议,它是关于如何对与键盘等设备的通信进行编码的标准。用于lsusb识别您的键盘的一个或多个 USB 端点(有些键盘有多个),用于lsusb -v查明是否支持 HID。

内核对 HID 事件进行解码(您可以检查描述这些事件的 HID 描述符,搜索此 stackexchange 或超级用户 stackexchange 以获取包含详细信息的答案)。然后内核将它们传递到输入层。

输入层设备显示为/dev/event/input*。启动后查看dmesg一下您的键盘得到了哪些。您可以用来evtest检查来自它们的事件。

从输入层,X 或 Wayland 解释事件,并使用它们的键盘映射来处理事件。

evtest因此,请检查与和均不起作用的组合键,xev看看哪里发生了有趣的事情。

您的KeymapNotify事件意味着某些东西获取了导致键盘映射更改的代码。这可能是由于您正在使用的键盘映射,或桌面上安装的某些东西。

不要指望它能Fn起作用。该键是非标准的,每个笔记本电脑制造商或键盘制造商都有自己的处理方式。

相关内容