奇怪的是,这似乎应该是之前已经完成的事情:我想在 1上交换数字和符号 / kbd> - 0 键盘顶部的键,以便:
*
而不是6
。6
而不是*
。我还想进行其他几项修改,但在使用setxkbmap
的选项(例如caps:swapescape
)之前,很快发现其他人已经完成了这些布局修改。
鉴于上述情况,这是一个由三部分组成的问题:
*.lst
中的*.xml
和/usr/share/X11/xkb/rules/
文件的情况下查明是否存在此类内容?setxkbmap
创建一个选项,那么什么是理想的方法,我将如何看待将我的选项贡献回社区?至于问题3:
setxkbmap
默默地失败,我对我的方法甚至没有信心。)man setxkbmap
以及涉及该主题的各种博客文章之外,我还无法找到任何相关文档。答案 0 :(得分:4)
有关所有可用选项的列表,您可以执行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
如果您正在寻找与交换号码相关的内容,您可以附加| grep -i num
,显示使用小键盘/小键盘的几个选项。不幸的是,我认为所有布局都有与字母数字字符相关的模板中的数字,这意味着它们已经内置于区域布局本身(或者是变体,在这种情况下) dvorak
)。
您可以采取三种方法。
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
行会从您在文件中所选的变体中借用您需要的所有内容(此处,它是workman-intl
布局中的us
变体)。然后,您想要的定义如下。 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>
! variant
的{{1}}部分:/usr/share/X11/xkb/rules/base.lst
重新启动您的Xorg服务器。
设置 workman-programmer us: English (Workman, intl., with dead keys and num/sys swapped)'
命令以使用新变体运行。以下是此演示的内容:setxkbmap
尽可能尝试,在开始寻找位于setxkbmap -layout us -variant workman-programmer -option
生态系统内的xkb
文档之前,您不会找到文档。
最好的写作可能就是这个:
https://www.charvolant.org/doug/xkb/html/index.html
<强> QUOTE:强>
在你读到这篇文章之前,请理解我从来没有想过写这篇文章,严重不合格,但我一直想读它,这是唯一的方法。
此外,这里还有一个链接列表,以便开始学习xorg
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/