loadkeys命令是Linux系统中用于加载键盘映射表的命令行工具。它可以更改虚拟控制台(tty)的键盘布局、键位映射、功能键设置等,是Linux系统键盘配置的核心工具之一。
setxkbmap或xmodmap命令。
loadkeys [选项] [键盘映射文件]
| 选项 | 说明 |
|---|---|
-d, --default |
加载默认键盘映射(通常是us.map.gz) |
-h, --help |
显示帮助信息 |
-s, --clearstrings |
清除所有字符串定义 |
-m, --mktable |
从键盘映射文件创建二进制文件 |
-c, --clearcompose |
清除所有组合键定义 |
-b, --bkeymap |
加载二进制键盘映射文件 |
-q, --quiet |
安静模式,不显示警告信息 |
-v, --verbose |
详细模式,显示更多信息 |
-V, --version |
显示版本信息 |
-u, --unicode |
使用Unicode编码 |
--console |
指定控制台设备(默认为当前控制台) |
Linux系统的键盘映射文件通常位于以下目录:
/usr/share/keymaps/ # 系统键盘映射文件目录
/usr/share/kbd/keymaps/ # 某些发行版的键盘映射目录
/etc/keymaps/ # 用户自定义键盘映射目录
~/.keymap # 用户个人键盘映射文件
| 文件 | 说明 |
|---|---|
us.map.gz |
美国英语键盘布局(默认) |
uk.map.gz |
英国英语键盘布局 |
de.map.gz |
德国德语键盘布局 |
fr.map.gz |
法国法语键盘布局 |
es.map.gz |
西班牙语键盘布局 |
jp.map.gz |
日本日语键盘布局 |
cn.map.gz |
中文键盘布局 |
ru.map.gz |
俄语键盘布局 |
loadkeys命令通常包含在kbd(键盘工具)包中,大多数Linux发行版默认已安装。如果未安装,可以使用以下命令:
sudo apt update
sudo apt install kbd
sudo yum install kbd
# 或使用dnf(Fedora/RHEL8+)
sudo dnf install kbd
sudo pacman -S kbd
加载系统默认的键盘布局(通常是美式键盘):
# 加载默认键盘布局
loadkeys
# 或明确指定默认
loadkeys -d
# 查看可用的键盘布局文件
find /usr/share/keymaps -name "*.map.gz" | head -20
加载指定国家的键盘布局:
# 加载德语键盘布局
loadkeys de
# 加载法语键盘布局
loadkeys fr
# 加载日语键盘布局
loadkeys jp
# 加载中文键盘布局(如果有)
loadkeys cn
直接指定键盘映射文件的完整路径:
# 加载指定路径的键盘映射文件
loadkeys /usr/share/keymaps/i386/qwerty/us.map.gz
# 使用相对路径
loadkeys ./mykeymap.map
使用dumpkeys命令查看当前键盘映射:
# 显示当前键盘映射
dumpkeys
# 显示简化的键位映射
dumpkeys -l
# 将当前键盘映射保存到文件
dumpkeys > mycurrent.map
# 查看特定键的映射
dumpkeys | grep -i "capslock"
创建自定义的键盘映射文件:
# 1. 将当前键盘映射保存为基础
dumpkeys > custom.map
# 2. 编辑custom.map文件
# 修改以下行,将CapsLock改为Ctrl
# keycode 58 = Caps_Lock
# 改为:
# keycode 58 = Control
# 3. 加载自定义键盘映射
loadkeys custom.map
交换Ctrl和CapsLock键的功能:
# 创建交换Ctrl和CapsLock的映射文件
cat > swap-ctrl-caps.map << 'EOF'
# 交换左侧Ctrl和CapsLock
keycode 58 = Control
keycode 29 = Caps_Lock
EOF
# 加载映射
loadkeys swap-ctrl-caps.map
设置功能键(F1-F12)显示的字符串:
# 创建功能键字符串定义
cat > function-keys.map << 'EOF'
# 设置功能键字符串
string F1 = "Help"
string F2 = "Save"
string F3 = "Load"
string F4 = "Exit"
EOF
# 加载映射(不清除现有字符串)
loadkeys function-keys.map
让键盘布局设置在系统重启后仍然有效:
# 方法1:编辑/etc/vconsole.conf(某些发行版)
echo 'KEYMAP=de' | sudo tee -a /etc/vconsole.conf
# 方法2:编辑/etc/default/keyboard(Debian/Ubuntu)
echo 'XKBMODEL="pc105"' | sudo tee -a /etc/default/keyboard
echo 'XKBLAYOUT="de"' | sudo tee -a /etc/default/keyboard
# 方法3:创建systemd服务
# /etc/systemd/system/loadkeys.service
[Unit]
Description=Load keyboard layout
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/usr/bin/loadkeys /usr/share/keymaps/i386/qwerty/de.map.gz
[Install]
WantedBy=multi-user.target
将QWERTY布局转换为Dvorak布局:
# 加载Dvorak布局(如果系统已安装)
loadkeys dvorak
# 或创建自定义Dvorak映射
cat > dvorak.map << 'EOF'
# Dvorak键盘布局映射
keycode 16 = 7 ampersand
keycode 17 = 5 percent
keycode 18 = 3 numbersign
keycode 19 = 1 exclam
keycode 20 = 9 parenleft
keycode 21 = 0 parenright
# ... 更多映射
EOF
loadkeys dvorak.map
为编程创建优化的键盘映射:
# 创建编程专用映射
cat > programmer.map << 'EOF'
# 更容易输入编程符号
keycode 26 = braceleft braceright
keycode 27 = bracketleft bracketright
keycode 39 = semicolon colon
keycode 40 = apostrophe quotedbl
keycode 41 = grave asciitilde
keycode 43 = backslash bar
EOF
loadkeys programmer.map
配置支持多种语言的键盘切换:
#!/bin/bash
# 键盘布局切换脚本
LAYOUTS=("us" "de" "fr" "es")
CURRENT=0
while true; do
echo "当前布局: ${LAYOUTS[$CURRENT]}"
echo "按Enter切换布局,按q退出"
read -n1 input
if [ "$input" = "q" ]; then
break
fi
CURRENT=$(( (CURRENT + 1) % ${#LAYOUTS[@]} ))
loadkeys "${LAYOUTS[$CURRENT]}"
echo "已切换到: ${LAYOUTS[$CURRENT]}"
done
定义键盘宏来自动输入常用文本:
# 创建宏定义
cat > macros.map << 'EOF'
# 定义宏
string F13 = "sudo apt update && sudo apt upgrade"
string F14 = "cd ~/projects"
string F15 = "git status"
string F16 = "ls -la"
# 设置组合键宏
alt keycode 49 = "Hello World!"
control alt keycode 30 = "echo 'Test'"
EOF
loadkeys macros.map
键盘映射文件的基本格式:
# 注释以#开头
# 键码定义格式:keycode <键码> = <按键符号>
keycode 1 = Escape
keycode 2 = one exclam
keycode 3 = two at
keycode 4 = three numbersign
# 字符串定义格式:string <键名> = "<字符串>"
string F1 = "Help"
string F2 = "Save"
# 组合键定义格式:<修饰键> keycode <键码> = <功能>
alt keycode 1 = Console_1
control alt keycode 59 = Boot
# 包含其他文件
include "qwerty-layout"
| 键码 | 主功能 | Shift功能 |
|---|---|---|
1 |
Escape | - |
2 |
1 | ! |
3 |
2 | @ |
16 |
q | Q |
17 |
w | W |
30 |
a | A |
31 |
s | S |
58 |
CapsLock | - |
59 |
F1 | - |
60 |
F2 | - |
| loadkeys | setxkbmap |
|---|---|
| 用于虚拟控制台(tty) | 用于X Window图形界面 |
| 加载.keymap格式文件 | 使用XKB系统配置 |
| 影响所有虚拟终端 | 只影响当前X会话 |
| 配置相对简单 | 配置更复杂但更强大 |
有多种方法可以恢复默认键盘布局:
# 方法1:加载默认键盘布局
loadkeys -d
# 方法2:加载美式键盘布局
loadkeys us
# 方法3:重启系统
sudo reboot
# 方法4:重新加载内核键盘模块
sudo modprobe -r keyboard
sudo modprobe keyboard
loadkeys -d
ls -l /usr/share/keymaps/dmesg | grep -i keyboard-v选项查看详细输出:loadkeys -v us使用showkey命令查看键盘键码:
# 显示按下的键码
showkey
# 只显示键码(无额外信息)
showkey -s
# 显示键码和ASCII码
showkey -a
# 测试功能:按Esc键退出,按下的每个键会显示其键码
根据不同发行版,有以下方法:
/etc/vconsole.conf,添加KEYMAP=布局名/etc/default/keyboard/etc/vconsole.conf或在/etc/rc.local中添加loadkeys命令~/.bashrc或~/.profile(对当前用户)显示当前键盘映射,可以导出为文件
设置X Window系统的键盘布局
显示键盘按键的扫描码和键码
systemd的本地化控制工具,可设置键盘布局