Centos 7 - 通过终端自定义键盘布局

Centos 7 - 通过终端自定义键盘布局

我使用的是没有 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 压缩文件,使用zcatzless轻松访问其内容。

要获取某些键盘按键的代码,请使用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 个修饰符。这些修饰符被标记为(完全任意)ShiftAltGrControlAltShiftLShiftRCtrlLCtrlRCapsShift根据下表,每个修饰符都有一个相关的 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+002disHyphen-MinusU+005fis 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          |
|          |                        |                            |
+----------+------------------------+----------------------------+

相关内容