我有一个自定义键盘布局位于/usr/share/X11/xkb/symbols/us
.每次更新时,该文件都会更新为标准键盘布局。有没有办法永久更改此设置,或者有方法在用户空间中更改此设置而不是发行版级别的配置?
如果有更好的方法来处理自定义键盘布局,请告诉我。据我所知,解决这个问题的最佳方法是使用 xkb 符号文件,并且没有太多关于这些的文档。
谢谢。
答案1
建立一个目录树,/home/<user>/
其下的结构与/usr/share/X11/xkb/
.换句话说:
$ tree -L 1
.
├── compat
├── geometry
├── keycodes
├── rules
├── symbols
└── types
因此,将相关文件放入compat
、symbols
等中。显然您不需要创建空目录,只需创建您需要的文件的目录即可。
然后考虑将符号文件重命名为不同于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 的解决方案不适用于我的系统,所以我不得不寻找其他解决方案。我做了以下事情:
- 我创建了一个自定义的键绑定。
- 我将其命名为与我选择的标准键绑定完全相同的名称系统设置(我使用 Manjaro)。
- 我将其保存在我的主目录中。
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
- 该脚本是
~/.xinitrc
在需要时(最重要的是)在显示登录提示之前从内部运行,用我的自定义版本替换标准键绑定,因此当我必须输入密码时,我的绑定处于活动状态。
答案3
最简单的方法可能是使用自定义布局创建一个新的符号文件。复制 us 符号文件,在默认布局中进行编辑,并将其另存为同一目录中的 milquetoast。然后您可以简单地加载这些符号
setxkbmap milquetoast
只要没有突然出现一种名为 milquetoast 的新语言,这个文件就永远不会被更新覆盖。