Linux下重新映射Microsoft Sculpt Mobile Keyboard的功能键

Linux下重新映射Microsoft Sculpt Mobile Keyboard的功能键

情况

我有一个 Microsoft Sculpt Mobile Keyboard,通过蓝牙连接。我的笔记本电脑上运行着 xUbuntu 16.04。

F1Sculpt Mobile Keyboard的按键F12可用作功能键播放/暂停沉默的, ... 。要按预期使用 到F1F12,需要按下 键Fn,即右侧的 。如果您想按ALT+ F4... ,这会非常不舒服。我想永久切换到Fx键(或锁定Fn键)。此外,我想将PageUpPageDown键切换为HomeEnd

Windows 解决方案

按照说明使用 AutoHotKey

无效的解决方案

答案适用于另一个键盘

其他键盘的 Linux 解决方案(不起作用)

应该可以使用命令行工具xkbcompsetxkbmap按照此处所述更改或切换密钥:

根据这些问题和答案,我曾经xev找到相关密钥的密钥名称(XKB 标识符)。我想创建以下映射:

# F1 to F5 (F5 probably does not work)
I172 -> FK01
MUTE -> FK02
VOL- -> FK03
VOL+ -> FK04
FIND -> FK05

# F11 and F12
FK22 -> FK11
FK23 -> FK12

# switch Page Up and Page Down with Home and End
PGUP -> HOME
HOME -> PGUP
PGDN -> END
END  -> PGDN

因此,我创建了适当的代码:

xkb_symbols "remote" {
    key <I172> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F1,              F1,              F1,              F1, XF86Switch_VT_1 ]
    };
    key <MUTE> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F2,              F2,              F2,              F2, XF86Switch_VT_2 ]
    };
    key <VOL-> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F3,              F3,              F3,              F3, XF86Switch_VT_3 ]
    };
    key <VOL+> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F4,              F4,              F4,              F4, XF86Switch_VT_4 ]
    };
    key <FIND> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F5,              F5,              F5,              F5, XF86Switch_VT_5 ]
    };
    key <FK22> {
            type= "CTRL+ALT",
            symbols[Group1]= [             F11,             F11,             F11,             F11, XF86Switch_VT_11 ]
    };
    key <FK23> {
            type= "CTRL+ALT",
            symbols[Group1]= [             F12,             F12,             F12,             F12, XF86Switch_VT_12 ]
    };
    key <PGDN> { [ End ] };
    key <END> { [ Next ] };
    key <PGUP> { [ Home ] };
    key <HOME> { [ Prior ] };
};

并将其添加到现有的按键映射定义中,xkbcomp并添加到设备各自设备的按键映射变量+custom(remote)xkb_symbols。但是没有用。

我认为它们可能不起作用,因为键盘被识别为指针而不是键盘。输出xinput list显示:

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB Mouse                        id=11   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad          id=14   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint Stick             id=15   [slave  pointer  (2)]
⎜   ↳ Microsoft Sculpt Mobile Keyboard          id=17   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ Sleep Button                              id=10   [slave  keyboard (3)]
    ↳ Laptop_Integrated_Webcam_E4HD             id=12   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=13   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=16   [slave  keyboard (3)]

替代解决方案(未尝试)

我读到过一些文章说鼠标被识别为键盘而不是指针。修改 Linux 内核代码 + 重新编译是解决方案之一。我不想为了让键盘正常工作而重新编译内核……

硬件解决方案(有效)

在此处输入图片描述

问题

  • 我在“其他键盘的 Linux 解决方案”中的假设是错误的吗?
  • 如果第一个问题的答案是:如何在不重新编译内核的情况下解决所述基于软件的问题(切换和替换密钥)?

相关内容