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


35

我想兑换EscCapsLock控制台(而不是在X,和使用xev),我该怎么办呢?

我的操作系统是Ubuntu。

Answers:


59

该工具操作的键盘布局虚拟控制台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
    

    如果出现问题,您可以使用以下命令来还原键盘映射:

    $ sudo loadkeys backup.kmap
    

    如果键盘太混乱了,以至于您甚至无法做到这一点,那么不涉及古老内核魔术的唯一选择就是重启。

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

    $ showkey
    

    现在按ESC键和CAPSLOCK键。按键代码应显示在屏幕上。注意键码。在我的系统上,ESC的键码为1,而CAPSLOCK的键码为58。showkey将在闲置10秒钟后终止(至少在我的ubuntu 10.04上如此)。

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

    $ dumpkeys | grep 1
    ...
    keycode   1 = Escape
    ...
    $ dumpkeys | grep 58
    ...
    keycode  58 = CtrlL_Lock
    ...
    
  4. 注意dumpkeys中的keymap行:

    $ dumpkeys | head -1
    keymaps 0-127
    
  5. 创建一个用于切换ESC和CAPSLOCK的键盘映射文件:

    keymaps 0-127
    keycode   1 = CtrlL_Lock
    keycode  58 = Escape
    
  6. 加载键盘映射:

    $ sudo loadkeys swap_esc_capslock.kmap
    
  7. 测试:测试CAPSLOCK键是显而易见的。只需按它们的CAPSLOCK键,然后检查其他键是否大写。要测试ESC键,可以先按CTRL + V,再按ESC。它应该打印^[。CTRL + V使外壳逐字打印下一个键,而不是对其进行解释。

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

/usr/bin/loadkeys /path/to/swap_esc_capslock.kmap

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


5
您也sudo setupcon --save可以使更改永久生效,而不用编辑rc.local。这基本上与dumpkeys < /dev/tty1 | gzip > /etc/console-setup/cached.kmap.gz
bukzor 2012年

因为在此阶段不能保证设置路径环境变量/usr/bin/loadkeys/etc/rc.local所以使用起来更安全。并且sudo在中不需要rc.local
8月Karlstrom

@AugustKarlstrom rc.local每次系统引导时都会执行in命令。@ bukzor的sudo setupcon不是rc.local,这是一个一次性设置命令,替换系统默认的键盘映射,无需添加任何运行时启动代码。添加loadkeysrc.local,会添加额外的启动代码,并复制系统默认loadkey已完成的操作。该rc.local方法实际上可能不太安全,因为它依赖于键盘映射的非标准路径。
RobertL

@RobertL请详细说明该setupcon方法。添加您自己的答案或根据需要编辑我的答案。
lesmana 2015年

我无法验证@bukzor关于的声明setupcon。看来,八月作出的假设sudo setupcon --save会进入rc.local我不认为这是正确的,但如果这样做,你不需要 sudorc.local。我认为我们需要更多信息才能更新您的答案。主要问题是“如何安装修改后的键盘映射,使其在启动过程中自动加载?” 我真的不知道哪种方法更好,rc.local或者安装键盘映射,甚至安装键盘映射都可以。我最近一直在研究这个问题,我将在这里检查。
罗伯特·L

4

如果您只想拥有两个capslocks键(使用另一个名称的capslock仍然没有用),请使用“ ctrl:nocaps”而不是“ ctrl:swapcaps”。

X11:(另见:/usr/share/X11/xkb/rules/base.lst

sudo vim /etc/default/keyboard
    XKBOPTIONS="ctrl:swapcaps"
udevadm trigger --subsystem-match=input --action=change
sudo restart lightdm

文本控制台:(从setupcon窃取)

#!/bin/sh
. /etc/default/console-setup 
. /etc/default/keyboard
ckbcomp $acm_option $rules_option -model "$XKBMODEL" \
            "$XKBLAYOUT" "$XKBVARIANT" "$XKBOPTIONS" \
            | gzip -9 2>/dev/null >/etc/console-setup/cached.kmap.gz
loadkeys /etc/console-setup/cached.kmap.gz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.