奇怪的是,这似乎应该是以前做的事情:我想交换键盘上的1 – 0键上的数字和符号 ,以便:
*
而不是6
。 6
将显示而不是*
。 还有其他几个我想做的修改,但是很快就发现其他人在使用setxkbmap
选项之前已经完成了这些布局修改(比如caps:swapescape
)。
鉴于上述情况,这是一个由3部分组成的问题:
/usr/share/X11/xkb/rules/
的*.lst
和*.xml
文件? setxkbmap
创build一个选项,那么这将是一个理想的方法,我将如何看待将我的选项提供给社区? 至于问题3:
setxkbmap
默默地失败,我甚至没有信心在我的方法)。 man setxkbmap
和涉及这个主题的各种博客文章之外,我还找不到任何这方面的文档。 有关所有可用选项的列表,您可以执行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参考) *
如果您正在查找与交换数字有关的内容,可以追加| grep -i num
| grep -i num
,揭示了使用数字键盘/键盘的几个选项。 不幸的是,我认为所有的布局都有与字母数字字符相关的模板中的数字 ,这意味着它们被内置到区域布局本身(或者在dvorak
的情况下是变体)。
有三种方法可以采取。
xmodmap
覆盖布局 您可以创建一个多用途的方法,在家中创建一个.Xmodmap
文件来覆盖映射,如Arch维基在这里所述 。
这是一个示例配置: 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>
! 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
: setxkbmap -layout us -variant workman-programmer -option
尽可能地尝试,在开始查找位于xorg
生态系统内的xkb
文档之前,您不会找到文档。
这里最好写的是这个:
https://www.charvolant.org/doug/xkb/html/index.html
引用:
在你阅读本文之前,请明白我从来不想写这个文件,严重缺乏资格,但我一直想读它,这是唯一的方法。
此外,这里还有一个链接列表,以及开始学习xorg
xkb
系统的所有复杂性: https : //www.x.org/wiki/XKB/
注意:大部分文档都会在系统上安装xkb
文件时引用相对路径。 这通常在/usr/share/X11/xkb
如果你想贡献,这个项目生活在xorg
,它提供了开发者文档在这里: https : //www.x.org/wiki/guide/ ,或更好的,在这里: https : //www.x.org/wiki /开发/