我有一个肮脏的解决方案,即插入 USB 键盘并执行以下命令:
setxkbmap -rules evdev -layout us -model evdev
之后我的键盘就可以工作了。
此解决方案仅在我手边有 USB 键盘时才有效,但这种情况很少发生,并且我被迫重新启动我的笔记本电脑。我尝试通过添加以下内容在系统唤醒时自动执行命令:
set -e
if [ "${1}" = "resume" ] && [ "${2}" != "standby" ]; then
setxkbmap -rules evdev -layout us -model evdev
fi
exit 0
到: /etc/apm/event.d/enable_xkb 但这不起作用。我猜测是因为它不是由适当的用户运行的。
所以这个问题有两个可能的答案:1)如何让上面的脚本在我的系统唤醒后执行。如果我能让它工作,我可以简单地让我的计算机进入睡眠状态并将其唤醒并让键盘再次工作。 2)(首选)我如何实际解决这个问题。
有关我需要回答的情况的更多详细信息 2)由于此问题的随机性,我不知道此问题何时开始。我确实知道它存在于 Debian Unstable 上,并且正在测试但不是稳定的。它也存在于 current Arch linux 上,但不早于 2012 年 11 月。我的系统是 Lenovo w520。
另请注意:这有点像 heisenbug,因此在它工作几天之前我无法接受回复。
进一步说明:发生这种情况时,我无法切换到任何 tty#s,因此没有控制台无法工作。我还尝试过“饲养瘦大象非常无聊”组合,但这也不起作用......在我发布后,我将检查当我的键盘功能正常时这是否有效。这是非常随机的,有时几天都可以,但我的键盘不起作用。
答案1
您的脚本无法通过恢复挂钩运行的原因是它不知道要与哪个 X 服务器通信。您DISPLAY
可能XAUTHORITY
还需要设置环境变量。看我可以以 root 身份在另一个用户的桌面上启动图形程序吗?以获得更多解释。
下面是一个在所有活动显示器上运行所需命令的 shell 片段。
if [ "${1}" = "resume" ] && [ "${2}" != "standby" ]; then
for p in $(ps -C Xorg -o pid=); do
</proc/$p/cmdline awk -v RS='\0' '/^:[0-9]$/ {print} $0=="-auth" {getline; print}' | {
read DISPLAY; export DISPLAY
read XAUTHORITY && export XAUTHORITY || unset XAUTHORITY
setxkbmap -rules evdev -layout us -model evdev
}
done
fi