AIGC标识 【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
posted @ 2026-10-21 16:07  仰望星河Leon  阅读(3)  评论(0)    收藏  举报