我有一个脏的解决方案,即插入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
to:/etc/apm/event.d/enable_xkb
但这不起作用.我猜是因为它不是由适当的用户运行的.
所以这个问题有两个可能的答案:
1)如何在系统唤醒后执行上述脚本.如果我可以让它工作,我可以简单地让我的电脑进入睡眠状态并将其唤醒并让键盘再次工作.
2)(首选)我如何实际修复此探测器.
关于我需要回答的情况的更多细节2)
由于这个问题的随机性,我不知道这个问题何时开始.我知道它存在于Debian Unstable,测试但不稳定.它也存在于当前的Arch Linux上但不是在2012年11月之前.我的系统是联想w520.
另请注意:这是一个heisenbug,因此我不能接受回应,直到它工作了几天.
进一步澄清:
当发生这种情况时,我无法切换到任何tty#s,因此没有控制台不起作用.我也试过“提高瘦大象是完全无聊”组合,这也不起作用…我发布后,我将检查我的键盘功能是否有效.这是非常随机的,有时它会好几天,而我的键盘不起作用.
解决方法:
您的脚本无法从resume钩子工作的原因是它不知道要与哪个X服务器通信.您需要设置DISPLAY环境变量,也可以设置XAUTHORITY.有关更多说明,请参见Can I launch a graphical program on another user’s desktop as 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