添加自定义 XKBOption

添加自定义 XKBOption

我正在寻找一种可以在 X 和具有控制台设置的控制台中工作的方法(例如 xkboptions,没有像 X 专有的方法xmodmap)。使用 XKBoptions,组合ctrl:swapcapscaps:swapescape没有达到预期的效果 - 它将控制放在大写锁定(好)上,并将大写锁定放在控制键和转义键上。

对于好奇/困惑的人来说,其基本原理是通过将更常用的功能放在易于触及的按键上来优化键盘布局。

因为我从来不使用大写锁定,所以我也会选择一种解决方案,将 Control 放在 CapsLock 上,将 Escape 放在 Control 上,并按原样保留 Escape 键(让我没有 CapsLock 功能)。

答案1

添加自定义 XKBOption

Debian 对 Xorg 和控制台都使用 XKB 系统,因此一种方法是添加自定义 XKBOption。 Debian 上的相关文件位于/usr/share/X11/xkb, files下假如xkb-data包裹

  1. 创造symbols/custom

    // rotate the caps lock, left control, and escape keys so left control is on
    // the caps lock key
    partial modifier_keys
    xkb_symbols "rotatectrlcapsescape" {
        replace key <CAPS>      {  [ Control_L ] };
        replace key <LCTL>      {  [ Escape    ] };
        replace key <ESC>       {  [ Caps_Lock ] };
    };
    
  2. 修改rules/xorg:查找该部分! option = symbols并添加

    custom:rotatectrlcapsescape = +custom(rotatectrlcapsescape)
    
  3. (可选)更新rules/xorg.lstrules/xorg.xml(留给读者练习)。

现在custom:rotatectrlcapsescape自定义 XKBOptions 可供使用。根据 Debian 说明,默认情况下是在 中配置的/etc/default/keyboard,带有简单的XKBOPTIONS="custom:rotatectrlcapsescape".

Ubuntu/Gnome 似乎使用rules/evdev*而不是rules/xorg*.

缺点

  • 修改下面的存储库包文件/usr/并不是一个好主意。修改后的文件可能会在下次所属包 ( xkb-data) 更新时被破坏。

答案2

控制台键盘输入和 XWindow 的共同点是,在这两种情况下,内核中的 USB 键盘驱动程序都会与 USB 键盘对话并生成扫描代码。系统该组件的更改将影响所有键盘输入。

请参阅内核树中源文件中的静态表usb_kbd_keycode和相关代码。drivers/hid/usbhid/usbkbd.c

相关内容