setxkbmap 选项 -rules 要采用什么文件,如何向该文件添加键盘变体?

E.P*_*.P. 8 keyboard-layout xkb

我正在尝试安装没有 sudo 访问权限的自定义键盘布局,如我在没有 sudo 访问权限的情况下是否可以使用自定义键盘布局中所述?如果是这样,如何?,我有一个关于setxkbmap当前答案所说的命令可能很有效的特定问题。

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

- 规则文件

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

但是,它并没有确切说明要放在那里的文件类型,我正在努力理解这个选项。

据我所知,这意味着要么是/usr/share/X11/xkb/rules/xorg,要么是它的别名/usr/share/X11/xkb/rules/base,事实上,如果我将所有内容复制/usr/share/X11/xkb/~/xkb/然后运行类似的东西

setxkbmap -model pc105 -layout "gb" -variant "extd" -rules ~/xkb/rules/base
Run Code Online (Sandbox Code Playgroud)

那么它似乎工作。

但是,我完全不确定如何修改该文件。在我有 sudo 访问权限的机器上,我按照本教程进行操作:我在gb里面制作了一个键盘变体xkb/symbols/gb,然后将变体添加到xkb/rules/evdev.xmlvia

<variant>
  <configItem>
    <name>custom</name>
    <description>English (UK, custom)</description>
  </configItem>
</variant>
Run Code Online (Sandbox Code Playgroud)

xkb/rules/base文件中,但是,没有包括这样一个变体明显的地方,确实其他相关的gb键盘变体,如extdintl,这出现在例如xkb/rules/evdev.lst,是无处可看。

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

qui*_*tic 16

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)
Run Code Online (Sandbox Code Playgroud)

上面最后几行中提到的每个组件都是 中系统数据库的子目录,/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 <FOO>
??? rules        # "evdev" is the important one; *.lst & *.xml are descriptions
??? symbols      # main layouts, variants, optional overrides
??? types        # ??? dark magic here, avoid
Run Code Online (Sandbox Code Playgroud)

如果您想覆盖这些文件或提供您自己的布局,而不将它们合并到系统数据库中,您要做的就是为您自己的文件创建一个类似的目录结构。你可能不会需要做任何事情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
...
Run Code Online (Sandbox Code Playgroud)

一旦您的目录结构就位,您可以使用以下-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
Run Code Online (Sandbox Code Playgroud)

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


使用自定义位置可能不适用于其他 XKB 配置系统,例如localectlGNOME 的设置守护程序或无法使用setxkbmap.

资源: