问题 2:
对于所有可用选项的列表,您可以执行localectl list-x11-keymap-options。这似乎只为您提供选项本身,而不是描述,因此更好的方法可能是在 XKB *.lst 文件上执行以下操作:
for f in /usr/share/X11/xkb/rules/*.lst; do sed -ne '/^\! option$/{s///; :a' -e 'n;p;ba' -e '}' $f; done | sort -u
(sed reference)*
如果您正在寻找与交换号码相关的内容,您可以附加 | grep -i num,其中显示了使用小键盘/小键盘的几个选项。不幸的是,我认为所有布局都在模板中列出了与 字母数字 字符相关的数字,这意味着它们内置于区域布局本身(或变体,在 @ 的情况下) 987654332@).
问题一:
您可以采取三种方法。
使用xmodmap覆盖布局
您可以通过在您的家中创建 .Xmodmap 文件来覆盖映射来创建一种通用方法,如 Arch Wiki here 中所述。
这是一个示例配置:https://github.com/karma0/layouts/blob/master/home/.Xmodmap
步骤:
- 把
.Xmodmap放到你家。
- 将
xmodmap $HOME/.Xmodmap 添加到您的.profile
一种快速而肮脏但灵活的方法:
- 运行
xkbcomp -xkb $DISPLAY xkbmap 以生成包含您当前配置的文件xkbmap。
- 修改它以匹配所需的配置。这是一个例子:
原文:
key <AE01> { [ 1, exclam ] };
key <AE02> { [ 2, at ] };
key <AE03> { [ 3, numbersign ] };
key <AE04> { [ 4, dollar ] };
key <AE05> { [ 5, percent ] };
key <AE06> { [ 6, asciicircum ] };
key <AE07> { [ 7, ampersand ] };
key <AE08> { [ 8, asterisk ] };
key <AE09> { [ 9, parenleft ] };
key <AE10> { [ 0, parenright ] };
修改:
key <AE01> { [ exclam, 1 ] };
key <AE02> { [ at, 2 ] };
key <AE03> { [ numbersign, 3 ] };
key <AE04> { [ dollar,i 4 ] };
key <AE05> { [ percent, 5 ] };
key <AE06> { [ asciicircum, 6 ] };
key <AE07> { [ ampersand, 7 ] };
key <AE08> { [ asterisk, 8 ] };
key <AE09> { [ parenleft, 9 ] };
key <AE10> { [ parenright, 0 ] };
- 执行命令
xkbcomp -w 0 xkbmap $DISPLAY加载新配置。
- 使用
xinitrc 或类似方法获取在启动时运行的命令。
修改布局并添加新变体
- 打开您喜欢的布局文件(可能在
/usr/share/X11/xkb/symbols 下)。我们将在此示例中使用 us 文件。
- 在文件中找到您最喜欢的变体;
workman-intl 如果你和我一样。
- 假设您要复制
workman-intl 布局,您可以复制该部分,并像我在此处所做的那样对其进行修改(请注意,这是从intl 模板复制/粘贴的,第一列和第二列是简单地交换):
partial alphanumeric_keys
xkb_symbols "workman-programmer" {
include "us(workman-intl)"
name[Group1]= "English (Workman, intl., with dead keys and num/sym swapped)";
key <AE01> { [ exclam, 1, exclamdown, onesuperior ] };
key <AE02> { [ at, 2, twosuperior, dead_doubleacute ] };
key <AE03> { [ numbersign, 3, threesuperior, dead_macron ] };
key <AE04> { [ dollar, 4, currency, sterling ] };
key <AE05> { [ percent, 5, EuroSign, dead_cedilla ] };
key <AE06> { [ dead_circumflex,6, onequarter, asciicircum ] };
key <AE07> { [ ampersand, 7, onehalf, dead_horn ] };
key <AE08> { [ asterisk, 8, threequarters, dead_ogonek ] };
key <AE09> { [ parenleft, 9, leftsinglequotemark, dead_breve ] };
key <AE10> { [ parenright, 0, rightsinglequotemark, dead_abovering ] };
};
xkb_symbols 行定义了变体的名称; include 行从文件中您选择的变体中借用了您需要的所有内容(这里是us 布局中的workman-intl 变体)。然后,您想要的定义如下。
4. 将您的新定义添加到/usr/share/xkb/rules/base.xml 到variantList 标记的末尾。这是我用的那个:
<variant>
<configItem>
<name>workman-programmer</name>
<description>English (Workman, intl., with dead keys and num/sym swapped)</description>
</configItem>
</variant>
- 将新变体和描述添加到
/usr/share/X11/xkb/rules/base.lst 的! variant 部分,如下所示:
workman-programmer us: English (Workman, intl., with dead keys and num/sys swapped)'
重新启动您的 Xorg 服务器。
设置setxkbmap 命令以使用新变体运行。这是此演示的一个:setxkbmap -layout us -variant workman-programmer -option
问题 3:
尽你所能,在你开始寻找位于xorg 生态系统中的xkb 文档之前,你不会找到文档。
最好的文章可能是这个:
https://www.charvolant.org/doug/xkb/html/index.html
引用:
在您阅读本文之前,请理解我从来不想写这份文件,我的资质严重不足,但我一直想读它,这是唯一的方法。
此外,这里还有一个链接列表,用于开始学习xkb 系统的所有复杂性xorg:https://www.x.org/wiki/XKB/
注意:大多数文档引用了xkb 中的相对路径,因为它安装在您的系统上。这通常位于/usr/share/X11/xkb
如果您愿意贡献,该项目位于 xorg 下,它在此处提供开发人员文档:https://www.x.org/wiki/guide/,或者更好的是,此处:https://www.x.org/wiki/Development/