如何在不同的键盘上手动重新映射键盘映射?

如何在不同的键盘上手动重新映射键盘映射?

我的笔记本电脑上有一个通过 USB 连接的外接键盘。我想重新映射外接键盘的键码,而不更改笔记本电脑键盘的键码。

更具体地说,我希望功能键(F1-F12)能够按原样运行,而不是像调高/调低音量/亮度这样的功能。

让我们以 F12 为例。当我专注于 Chrome 时,

Laptop keyboard  : F12    -> open console
                   FN+F12 -> volume up

External keyboard: F12    -> volume up
                   FN+F12 -> open console

完全搞砸了。当我使用时xev,输出如下

External keyboard (xev)
----------------------------------------
[F11] (volume down)
FocusOut event, serial 33, synthetic NO, window 0x4000001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 33, synthetic NO, window 0x4000001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 33, synthetic NO, window 0x0,
    keys:  2   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   
----------------------------------------
[F12] (volume up)
FocusOut event, serial 33, synthetic NO, window 0x4000001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 33, synthetic NO, window 0x4000001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 33, synthetic NO, window 0x0,
    keys:  2   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 

----------------------------------------
[FN+F12]
KeyPress event, serial 33, synthetic NO, window 0x4000001,
    root 0x5d1, subw 0x0, time 16400865, (-850,446), root:(706,511),
    state 0x0, keycode 96 (keysym 0xffc9, F12), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x4000001,
    root 0x5d1, subw 0x0, time 16400985, (-850,446), root:(706,511),
    state 0x0, keycode 96 (keysym 0xffc9, F12), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

如您所见,F11(降低音量)和 F12(提高音量)在 中没有区别xev。但在 中acpi_listen,我有

External keyboard (acpi_listen)
----------------------------------------
[F11]
button/volumedown VOLDN 00000080 00000000 K
----------------------------------------
[F12]
button/volumeup VOLUP 00000080 00000000 K

xinput -list外接键盘(不确定为什么有 2 个条目)

⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ ...
    ↳ SONiX USB DEVICE                          id=13   [slave  keyboard (3)]
    ↳ SONiX USB DEVICE                          id=23   [slave  keyboard (3)]

我的问题是,如何在不干扰笔记本电脑键盘的情况下更改外接键盘的按键映射?外接键盘没有“FN锁”或类似的东西。

先感谢您。


附言:实际上,Win 键和 ALT_L 键已经互换了,但我认为如果上述问题得到解决,那么这个问题也会得到解决。

PS2: 我已阅读但它只能将键盘的布局更改为另一个预定义的布局映射,这并不能解决我的问题。


编辑 1:我使用的是 Ubuntu 20.04 和内核 5.4.0-33-generic。我的笔记本电脑是华硕 UX550。

相关内容