setleds命令是Linux系统中用于查询和设置键盘LED指示灯状态的工具。它可以控制键盘上的NumLock、CapsLock和ScrollLock指示灯,这些指示灯通常位于键盘的右上角。
setleds [选项] [+-][num] [+-][caps] [+-][scroll]
| 选项 | 说明 |
|---|---|
-F |
使用标准格式显示状态(默认格式) |
-D |
改变默认设置(影响以后的登录会话) |
-L |
只改变LED状态,不改变键盘模式 |
-v |
详细模式,显示更多信息 |
-h, --help |
显示帮助信息 |
-V, --version |
显示版本信息 |
+num |
打开NumLock指示灯 |
-num |
关闭NumLock指示灯 |
+caps |
打开CapsLock指示灯 |
-caps |
关闭CapsLock指示灯 |
+scroll |
打开ScrollLock指示灯 |
-scroll |
关闭ScrollLock指示灯 |
数字锁定指示灯
数字小键盘输入数字
数字小键盘作为方向键
大写锁定指示灯
输入大写字母
输入小写字母
滚动锁定指示灯
在某些程序中控制滚动
正常滚动模式
setleds命令通常包含在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、dumpkeys、showkey等。
不带任何参数运行setleds可以查看当前键盘LED状态:
# 查看当前LED状态
setleds
# 输出示例:
# Current flags: NumLock off CapsLock off ScrollLock off
# Current leds: NumLock off CapsLock off ScrollLock off
开启NumLock指示灯:
# 开启NumLock指示灯
setleds +num
# 验证状态
setleds | grep NumLock
同时控制多个指示灯:
# 开启NumLock和CapsLock,关闭ScrollLock
setleds +num +caps -scroll
# 全部开启
setleds +num +caps +scroll
# 全部关闭
setleds -num -caps -scroll
使用-D选项改变默认设置,影响以后的登录会话:
# 设置默认开启NumLock
setleds -D +num
# 这会将设置写入配置,下次登录时NumLock默认开启
使用-L选项只改变LED指示灯状态,不影响键盘的实际功能:
# 只打开CapsLock灯,但实际CapsLock功能不变
setleds -L +caps
# 这只会点亮指示灯,不会实际启用大写锁定功能
在shell脚本中根据条件控制LED:
#!/bin/bash
# 根据时间控制ScrollLock灯
HOUR=$(date +%H)
if [ $HOUR -ge 18 ] || [ $HOUR -lt 6 ]; then
echo "晚上时间,开启ScrollLock灯"
setleds +scroll
else
echo "白天时间,关闭ScrollLock灯"
setleds -scroll
fi
显示详细的键盘状态信息:
# 使用-v选项显示详细信息
setleds -v
# 输出示例:
# KDGETLED: 0x0
# LED flags: NumLock off CapsLock off ScrollLock off
# LED flags: NumLock off CapsLock off ScrollLock off
编写切换LED状态的脚本:
#!/bin/bash
# 切换NumLock状态
if setleds | grep -q "NumLock on"; then
setleds -num
echo "NumLock已关闭"
else
setleds +num
echo "NumLock已开启"
fi
在系统启动时自动设置键盘LED状态:
# 在/etc/rc.local中添加(如果系统使用rc.local)
setleds -D +num +caps -scroll
# 或者创建systemd服务
# /etc/systemd/system/setleds.service
[Unit]
Description=Set keyboard LEDs
After=getty.target
[Service]
Type=oneshot
ExecStart=/usr/bin/setleds -D +num
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
编写脚本监控LED状态变化:
#!/bin/bash
# 监控LED状态变化
PREV_STATE=$(setleds | grep -o "NumLock [onf]*" | awk '{print $2}')
while true; do
CURRENT_STATE=$(setleds | grep -o "NumLock [onf]*" | awk '{print $2}')
if [ "$PREV_STATE" != "$CURRENT_STATE" ]; then
echo "$(date): NumLock状态从 $PREV_STATE 变为 $CURRENT_STATE"
PREV_STATE="$CURRENT_STATE"
fi
sleep 1
done
通过SSH远程控制另一台机器的键盘LED:
# 远程开启NumLock
ssh user@remotehost "setleds +num"
# 需要确保在虚拟控制台中执行
# 可以先切换到tty再执行命令
ssh user@remotehost "sudo chvt 1 && sleep 1 && setleds +num"
结合loadkeys等工具进行高级键盘配置:
# 保存当前键盘映射和LED状态
dumpkeys > mykeymap.kmap
setleds > myleds.state
# 恢复时同时恢复LED状态
loadkeys mykeymap.kmap
eval "$(cat myleds.state | sed 's/Current/setleds/')"
setleds主要工作在虚拟控制台(tty)。在图形界面(X Window)中,可以使用以下替代方法:
Ctrl+Alt+F1~F6,然后执行setledsxset led 3(打开NumLock)xkbset led有几种方法可以在启动时自动开启NumLock:
setleds -D +numScrollLock在现代系统中的用途较少,但在某些场景下仍有使用:
可能的原因:
sudo showkey --leds通常情况下:
-D选项通常需要root权限sudo setleds +numX Window系统显示设置工具,可以控制X环境下的键盘LED
加载键盘映射表,配合setleds进行完整键盘配置
显示键盘按键扫描码和LED状态
-D选项时要小心,可能影响所有用户的默认设置