什么文件是setxkbmap选项-rules要采取的,以及如何将键盘变体添加到该文件?

我正在尝试安装没有sudo访问的自定义键盘布局,正如我所描述的那样是否可以使用没有sudo访问的自定义键盘布局? 如果是这样,怎么样? ,我有一个关于setxkbmap命令的具体问题,当前的答案说可能会有效。

更具体地说,该命令的手册页使您能够指定规则文件:

-rules 文件

指定用于将请求的布局和模型解析为一组组件名称的规则文件的名称。

但是,它并没有确切地说出那个文件应该放在哪个文件上,而我正在努力理解这个选项。

据我所知,这应该是/usr/share/X11/xkb/rules/xorg ,或者它的别名/usr/share/X11/xkb/rules/base ,如果我复制了所有的/usr/share/X11/xkb/ into ~/xkb/然后运行类似的东西

 setxkbmap -model pc105 -layout "gb" -variant "extd" -rules ~/xkb/rules/base 

那它似乎工作。

但是,我完全不确定如何修改该文件。 在我有sudo访问权限的机器上,我遵循本教程 :我在xkb/symbols/gb中创建了gb键盘的变体,我将变体添加到xkb/rules/evdev.xml

   custom English (UK, custom)   

然而,在xkb/rules/base文件中,没有明显的地方可以包含这样的变体,事实上其他相关的gb键盘变体,例如extdintl ,例如在xkb/rules/evdev.lst ,无处可去可见。

那么:如何在-rules文件选项中指定一个文件,使我能够设置自己的变体? (不幸的是没有sudo访问权限)

XKB的系统键盘配置数据库存储在/usr/share/X11/xkb 。 XKB布局在RMLVO模型中定义:规则,模型,布局,变体,选项。 这些天使用的主要规则文件实际上是evdev ; 你可以用setxkbmap看到这个:

 $ setxkbmap -query -verbose 10 ... Trying to load rules file /usr/share/X11/xkb/rules/evdev... Success. Applied rules from evdev: rules: evdev model: pc105 layout: us variant: altgr-intl options: caps:hyper,compose:menu Trying to build keymap using the following components: keycodes: evdev+aliases(qwerty) types: complete compat: complete symbols: pc+us(altgr-intl)+inet(evdev)+capslock(hyper)+compose(menu) geometry: pc(pc105) 

上面最后几行中提到的每个组件都是/usr/share/X11/xkb系统数据库的子目录,显示的值是该子目录中的文件名 (用+分隔),这些文件将被用于构建此特定内容键盘映射。 括号标记指定文件中的特定子句 (通常是变体和选项)。

XKB工具( setxkbmapxkbcomp等)可以使用参数来搜索文件的其他位置,但此自定义位置必须与系统数据库的格式相同。 这是系统数据库的样子。 有关详细信息,请参阅每个目录中的README

 /usr/share/X11/xkb/ ├── compat # ??? dark magic here, avoid ├── geometry # as in physical, eg for generating layout maps ├── keycodes # helpful for translating keycodes (from xev) to  ├── rules # "evdev" is the important one; *.lst & *.xml are descriptions ├── symbols # main layouts, variants, optional overrides └── types # ??? dark magic here, avoid 

如果要覆盖这些文件或提供自己的布局,而不将它们合并到系统数据库中,您将要为自己的文件创建类似的目录结构。 除非您从头开始构建自己的键盘,否则您可能不需要对geometrykeycodes进行任何操作。

对于每用户配置, $HOME/.xkb/$HOME/.config/xkb/是理想的:

 $HOME/.config/xkb/ ... ├── rules │ ├── evdev-local │ ├── evdev-local.lst │ └── evdev-local.xml ├── symbols │ ├── my-fun-capslock-options │  ├── my-US-Dvorak-layout │  └── my-ZWERTY-layout ... 

一旦您的目录结构到位,您可以使用-I /path/to/local/xkb参数加载自定义:

 setxkbmap -I $HOME/.config/xkb \ -rules evdev-local \ -layout my-ZWERTY-layout \ -option myZWERTY:option1,compose:menu,fun:caps_is_insert 

您可以将fun:caps_is_insert等本地选项与compose:menu等系统选项fun:caps_is_insert使用,只要指定的规则文件定义了它们。 (符号文件可以包含其他符号文件,但我没有找到规则文件的包含语法。您可能必须将整个系统evdev规则复制到本地版本并添加修改。)


使用自定义位置可能无法与其他XKB配置系统一起使用,例如localectl ,GNOME的设置守护程序或无法使用setxkbmap配置的Wayland合成setxkbmap

资源: