如何在 Linux 中更改控制台键盘映射?

Vay*_*ayn 37 linux console keymap

我想交换EscCapsLock在控制台中(不是在 X 中,并使用xev),我该怎么做?

我的操作系统是 Ubuntu。

les*_*ana 64

虚拟控制台上操作键盘布局的工具是loadkeysdumpkeysshowkey。阅读他们的联机帮助页并了解他们的复杂性。

请注意,这些工具只能在虚拟控制台中运行,而不能在 gnome 等图形环境中的终端模拟器中运行。了解差异阅读此问题和答案:https : //askubuntu.com/questions/14284/why-is-a-virtual-terminal-virtual-and-what-why-where-is-the-real-terminal .

这是做您想做的事情的简短指南:

  1. 保存您当前的键盘布局:

    $ dumpkeys > backup.kmap
    
    Run Code Online (Sandbox Code Playgroud)

    如果出现问题,您可以使用以下命令恢复您的键盘映射:

    $ sudo loadkeys backup.kmap
    
    Run Code Online (Sandbox Code Playgroud)

    如果键盘乱七八糟,您甚至无法执行此操作,那么您唯一不涉及古老内核魔法的选择就是重新启动。

  2. 检查分配给您的键的键码:

    $ showkey
    
    Run Code Online (Sandbox Code Playgroud)

    现在按下 ESC 键和 CAPSLOCK 键。键码应该显示在屏幕上。记下键码。在我的系统上,ESC 的键码为 1,CAPSLOCK 的键码为 58。showkey将在 10 秒不活动后终止(至少在我的 ubuntu 10.04 上是这样)。

  3. 请注意转储键中的 ESC 和 CAPSLOCK 键的名称:

    $ dumpkeys | grep 1
    ...
    keycode   1 = Escape
    ...
    $ dumpkeys | grep 58
    ...
    keycode  58 = CtrlL_Lock
    ...
    
    Run Code Online (Sandbox Code Playgroud)
  4. 请注意 dumpkeys 中的 keymap 行:

    $ dumpkeys | head -1
    keymaps 0-127
    
    Run Code Online (Sandbox Code Playgroud)
  5. 创建一个切换 ESC 和 CAPSLOCK 的键盘映射文件:

    keymaps 0-127
    keycode   1 = CtrlL_Lock
    keycode  58 = Escape
    
    Run Code Online (Sandbox Code Playgroud)
  6. 加载键盘映射:

    $ sudo loadkeys swap_esc_capslock.kmap
    
    Run Code Online (Sandbox Code Playgroud)
  7. 测试:测试 CAPSLOCK 键是显而易见的。只需按他们的 CAPSLOCK 键并检查其他键是否大写。要测试 ESC 键,您可以使用 CTRL+V 后跟 ESC。它应该打印^[. CTRL+V 使 shell 逐字打印下一个键而不是解释它。

要在每次重新启动时加载此修改,请将以下行放入您的/etc/rc.local文件中:

/usr/bin/loadkeys /path/to/swap_esc_capslock.kmap
Run Code Online (Sandbox Code Playgroud)

从各个页面收集的信息,包括但不限于:

  • 您还可以使用 `sudo setupcon --save` 使更改永久化,而不是编辑 rc.local。这与`dumpkeys < /dev/tty1 | 本质上是一样的。gzip > /etc/console-setup/cached.kmap.gz` (5认同)