永久更改 xkb 键绑定?

永久更改 xkb 键绑定?

我有一个自定义键盘布局位于/usr/share/X11/xkb/symbols/us.每次更新时,该文件都会更新为标准键盘布局。有没有办法永久更改此设置,或者有方法在用户空间中更改此设置而不是发行版级别的配置?

如果有更好的方法来处理自定义键盘布局,请告诉我。据我所知,解决这个问题的最佳方法是使用 xkb 符号文件,并且没有太多关于这些的文档。

谢谢。

答案1

建立一个目录树,/home/<user>/其下的结构与/usr/share/X11/xkb/.换句话说:

$ tree -L 1
.
├── compat
├── geometry
├── keycodes
├── rules
├── symbols
└── types

因此,将相关文件放入compatsymbols等中。显然您不需要创建空目录,只需创建您需要的文件的目录即可。

然后考虑将符号文件重命名为不同于us.可能有一种方法可以消除您自己的us符号文件与 中的符号文件的歧义/usr/share/X11/xkb/,但选择一个未出现在 中的新名称会更容易/usr/share/X11/xkb/symbols/mine会做得很好。

假设您将自定义 Xkb 目录放在 ,/home/<user>/my-xkb并且自定义符号文件名为mine.

如果您使用setxkbmap(1)设置布局,则只需更改它即可打印其输出并将其通过管道传输到xkbcomp(1).因此,如果这是您的setxkbmap调用:

setxkbmap mine

您需要将其更改为:

setxkbmap mine -print |
    xkbcomp -I"/home/<user>/my-xkb" - "$DISPLAY"

答案2

Guildenstern 的解决方案不适用于我的系统,所以我不得不寻找其他解决方案。我做了以下事情:

  1. 我创建了一个自定义的键绑定。
  2. 我将其命名为与我选择的标准键绑定完全相同的名称系统设置(我使用 Manjaro)。
  3. 我将其保存在我的主目录中。
  4. 10-restxkbmap.sh我创建了一个名为in 的bash 脚本,/etc/X11/xinit/xinitrc.d/内容如下:
    #!/bin/bash
    diff -q /home/neo/.config/neo/xkb/symbols/us /usr/share/X11/xkb/symbols/us >/dev/null
    if [ $? -eq 1 ]
    then
      sudo cp /home/neo/.config/neo/xkb/symbols/us /usr/share/X11/xkb/symbols/us
    fi
    
  5. 该脚本是~/.xinitrc在需要时(最重要的是)在显示登录提示之前从内部运行,用我的自定义版本替换标准键绑定,因此当我必须输入密码时,我的绑定处于活动状态。

答案3

最简单的方法可能是使用自定义布局创建一个新的符号文件。复制 us 符号文件,在默认布局中进行编辑,并将其另存为同一目录中的 milquetoast。然后您可以简单地加载这些符号

setxkbmap milquetoast

只要没有突然出现一种名为 milquetoast 的新语言,这个文件就永远不会被更新覆盖。

相关内容