情况
我有一个 Microsoft Sculpt Mobile Keyboard,通过蓝牙连接。我的笔记本电脑上运行着 xUbuntu 16.04。
F1Sculpt Mobile Keyboard的按键F12可用作功能键播放/暂停,沉默的, ... 。要按预期使用 到F1键F12,需要按下 键Fn,即右侧的 。如果您想按ALT+ F4... ,这会非常不舒服。我想永久切换到Fx键(或锁定Fn键)。此外,我想将PageUp和PageDown键切换为Home和End。
Windows 解决方案
按照说明使用 AutoHotKey
无效的解决方案
其他键盘的 Linux 解决方案(不起作用)
应该可以使用命令行工具xkbcomp
或setxkbmap
按照此处所述更改或切换密钥:
- 超级用户:如何在 Linux 下为特定键盘重新映射按键
- AskUbuntu:setxkbmap -option ctrl:nocaps 的反义词是什么?
- Stackoverflow:创建自定义 setxkbmap 选项
- GitHub 上的 xkbcomp 键盘映射概述
- AskUbuntu:仅更改蓝牙键盘的键盘映射
- Unix 和 Linux:使用 setxkbmap 交换左 Shift 和左 Control
根据这些问题和答案,我曾经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 解决方案”中的假设是错误的吗?
- 如果第一个问题的答案是不:如何在不重新编译内核的情况下解决所述基于软件的问题(切换和替换密钥)?