【shell】禁用/启用ubuntu笔记本键盘
安装evtest
apt install evtest -y
kb_disabled.sh
#!/bin/bash
# 临时禁用笔记本内置键盘(基于 evtest --grab)
# 用法: sudo ./kb_disable.sh
PIDFILE="/tmp/kb_disabled.pid"
DEVNAME="AT Translated Set 2 keyboard"
# 自动查找内置键盘对应的 event 设备
find_device() {
awk -v name="$DEVNAME" '
/^I: / { path=$0 }
$0 ~ "Name=\"" name "\"" { found=1 }
/^H: Handlers=/ {
if (found) {
if (match($0, /event[0-9]+/)) {
print "/dev/input/" substr($0, RSTART, RLENGTH)
exit
}
}
}
' /proc/bus/input/devices
}
DEVICE=$(find_device)
if [ -z "$DEVICE" ]; then
echo "❌ 没找到内置键盘,请检查名称或设备列表 (libinput list-devices)"
exit 1
fi
echo "🔍 使用设备: $DEVICE"
# 如果已经在运行,提示并退出
if [ -f "$PIDFILE" ]; then
OLD_PID=$(cat "$PIDFILE")
if sudo kill -0 "$OLD_PID" 2>/dev/null; then
echo "⚠️ 键盘已经是禁用状态 (PID: $OLD_PID)"
exit 0
else
sudo rm -f "$PIDFILE"
fi
fi
# 提前获取 sudo 权限,避免后台进程卡在密码输入
sudo -v || exit 1
# 后台启动 evtest 并记录真实 PID
sudo sh -c "nohup evtest --grab '$DEVICE' >/dev/null 2>&1 & echo \$! > '$PIDFILE'"
sleep 0.5
PID=$(cat "$PIDFILE" 2>/dev/null)
if [ -n "$PID" ] && sudo kill -0 "$PID" 2>/dev/null; then
echo "✅ 内置键盘已禁用 (PID: $PID)"
echo " 恢复请运行: sudo ./kb_enable.sh"
else
echo "❌ 启动失败,请确认设备路径: $DEVICE"
sudo rm -f "$PIDFILE"
exit 1
fi
kb_enable.sh
#!/bin/bash
# 恢复笔记本内置键盘
# 用法: sudo ./kb_enable.sh
PIDFILE="/tmp/kb_disabled.pid"
if [ -f "$PIDFILE" ]; then
PID=$(cat "$PIDFILE")
if sudo kill -0 "$PID" 2>/dev/null; then
sudo kill "$PID"
echo "✅ 已恢复键盘 (结束 PID: $PID)"
else
echo "⚠️ 进程 $PID 已不存在,清理记录文件"
fi
sudo rm -f "$PIDFILE"
else
# 兜底:按名字清理所有 evtest --grab 进程
if pgrep -f "evtest --grab" >/dev/null; then
sudo pkill -f "evtest --grab"
echo "✅ 已清理残留的 evtest --grab 进程"
else
echo "ℹ️ 当前没有禁用的键盘进程,无需恢复"
fi
fi

浙公网安备 33010602011771号