setxkbmap 选项 -rules 适用于哪个文件,我如何向该文件添加键盘变体?

setxkbmap 选项 -rules 适用于哪个文件,我如何向该文件添加键盘变体?

我正在尝试安装没有 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

那么它似乎有效了。

但是,我完全不知道如何修改该文件。在具有 sudo 访问权限的机器上,我按照本教程gb:我在里面制作了一个键盘变体xkb/symbols/gb,然后xkb/rules/evdev.xml通过

<variant>
  <configItem>
    <name>custom</name>
    <description>English (UK, custom)</description>
  </configItem>
</variant>

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

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

答案1

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 <FOO>
├── rules        # "evdev" is the important one; *.lst & *.xml are descriptions
├── symbols      # main layouts, variants, optional overrides
└── types        # ??? dark magic here, avoid

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

对于每个用户的配置,$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将它们混合搭配。(符号文件可以包含其他符号文件,但我没有找到规则文件的包含语法。您可能必须将整个系统evdev规则复制到本地版本并添加修改。)


使用自定义位置可能无法与其他 XKB 配置系统(如localectl、GNOME 的设置守护进程或无法使用 进行配置的 Wayland 合成器)一起使用setxkbmap

资源:

相关内容