我使用的是没有 GUI 的 CentOS 7。如何创建自定义键盘布局并将其永久用作默认键盘布局?我应该编辑哪个文件?
编辑:
我可以让它在 GUI 下工作,通过编辑文件/usr/share/X11/xkb/symbols
并重新启动来设置键盘映射,但它不会影响终端(至少不会影响我使用 启动的终端Ctrl+Alt+F5
。在这个终端中,我仍然使用美国标准。在 GNOME 下启动终端使用我的布局。
我将键盘映射文件放在/lib/kbd/keymaps/legacy/i386/xxx/
as下xxx.map.gz
,它实际上可以很好地加载loadkeys
,当我运行时,localectl
我看到:
# localectl
System Locale: LANG=en_US.UTF-8
VC Keymap: xxx
X11 Layout: us
但在使用 Ctrl+Alt+F5 打开的终端中,键盘布局是旧的。
答案1
从现有配置开始:
- 可以使用 转储当前键盘布局
dumpkeys
。 - 其他默认布局通常位于/lib/kbd/键盘映射目录作为 gzip 压缩文件,使用
zcat
或zless
轻松访问其内容。
要获取某些键盘按键的代码,请使用showkey
。
要手动加载键盘布局文件,请使用loadkeys
.它接受自定义文件的路径作为参数。
一旦您对结果感到满意,您可以设置默认使用的新布局的名称/etc/vconsole.conf:
KEYMAP="your-layout"
答案2
只是为了添加已接受答案的一些细节,以下是我所看到的以及我为使其发挥作用而所做的工作;如果我遇到它们,我会添加更多的技巧和曲折。
使用sudo dumpkeys
会给你这样的输出:
keycode 12 = minus
shift keycode 12 = underscore
shift altgr keycode 12 = underscore
control keycode 12 = Control_underscore
shift control keycode 12 = Control_underscore
altgr control keycode 12 = Control_underscore
shift altgr control keycode 12 = Control_underscore
alt keycode 12 = Meta_minus
...
而且,如果您打开 下的键盘映射文件/lib/kbd/keymaps/xkb/
,您可以看到一行中有几个(有时太多)列,例如:
keycode 12 = U+002d U+005f U+002d U+005f Control_underscore Control_underscore Control_underscore ...
根据keymaps
: ( man 5 keymaps
) 的手册页,我们有:
按下某个键时,将执行绑定到给定键的哪些操作取决于当时有效的修饰符。键盘驱动程序支持 9 个修饰符。这些修饰符被标记为(完全任意)Shift、AltGr、Control、Alt、ShiftL、ShiftR、CtrlL和CtrlR。CapsShift根据下表,每个修饰符都有一个相关的 2 次方权重:
modifier weight
Shift 1
AltGr 2
Control 4
Alt 8
ShiftL 16
ShiftR 32
CtrlL 64
CtrlR 128
CapsShift 256
通过将所有有效修饰符的权重相加即可得出某个键的有效操作。默认情况下,没有任何修饰符生效,因此当按下或释放键时,将执行第 0 号操作,即键定义行中第一列中的操作。例如,当 Shift 和 Alt 修饰键生效时,第 9 号操作(从第 10 列开始)是有效的。
通过将适当的按键操作绑定到所需的按键,可以更改修改器的有效状态。例如,将符号 Shift 绑定到某个键会在按下该键时设置 Shift 修饰符生效,并在释放该键时取消该修饰符的效果。将 AltGr_Lock 绑定到某个键可设置 AltGr 在该键被按下时生效,并在再次按下该键时取消该效果。 (默认情况下,Shift、AltGr、Control 和 Alt 绑定到具有类似标签的键;AltGr 可能表示右侧 Alt 键。)
我们知道U+002d
isHyphen-Minus
和U+005f
is low-line
,所以我们现在看得很清楚:键盘映射文件中的每一行都是按键本身、shift+key、shift+altgr+key、...按下时的键码及其 keysys 字符输出,以该顺序。
(如果您忘记了表格,我们可以用来dumpkeys --long-info
显示它)。
它们相互对应:第一部分中的行与第二部分中的列相对应。
最好在表格中查看:
+----------+------------------------+----------------------------+
| | | |
| col. | key to press(+ keycode)| chars to produce (keysys) |
| | | |
+----------------------------------------------------------------+
| | | |
| 0 | keycode 12 | minus |
| | | |
+----------------------------------------------------------------+
| | | |
| 1 | shift | underscore |
| | | |
+----------------------------------------------------------------+
| | | |
| 2 | altgr | underscore |
| | | |
+----------------------------------------------------------------+
| | | |
| 3(1+2) | shift + altgr | underscore |
| | | |
+----------------------------------------------------------------+
| | | |
| 4 | ctrl | ctrl + underscore |
| | | |
+----------------------------------------------------------------+
| | | |
| 5(4+1) | ctrl + shift | ctrl + underscore |
| | | |
+----------+------------------------+----------------------------+
| | | |
| 6(4+2) | ctrl + alt | ctrl + underscore |
| | | |
+----------+------------------------+----------------------------+