如何禁用Solaris 10 x86易误触发的重启按键绑定?
我之前维护Solaris 10 x86虚拟机时也碰到过一模一样的坑——误触一下就丢了所有未保存的工作,简直头疼。结合当时的解决经验,给你几个可行的方案:
首先得明确:你碰到的这个「类似Stop-A的立即重启」,在Solaris 10 x86里对应的是键盘紧急终止序列(Keyboard Stop Sequence),默认触发组合是Alt+SysRq+R,但因为VirtualBox的按键映射差异,可能被识别成Win键相关的组合误触发。下面从虚拟机配置和系统内部设置两个层面解决:
一、先调整VirtualBox的按键捕获设置
先排除宿主机按键被误传递给虚拟机的可能:
- 打开VirtualBox,选中你的Solaris 10虚拟机,进入设置 -> 输入 -> 键盘:
- 确认「自动捕获键盘」的触发逻辑(默认是点击虚拟机窗口时捕获),避免宿主机的Win键组合被误传给虚拟机;
- 可以修改「主机键」(默认是右Ctrl),确保操作虚拟机时,不会因为误按Win键触发冲突快捷键;
- 进入VirtualBox的全局设置 -> 热键,检查有没有和Win-R冲突的快捷键,如有可以直接修改或禁用。
二、在Solaris系统内部禁用或重映射紧急重启序列
这是最彻底的解决方式,直接从系统层面控制这个功能:
1. 临时禁用(立即生效,重启后失效)
打开终端执行:
kbd -s stop=off
执行后可以用kbd -s stop验证,输出应该显示stop: off。
2. 永久禁用(重启系统后依然生效)
编辑/etc/default/kbd配置文件,添加或修改以下一行:
KEYBOARD_STOP=OFF
保存后执行以下命令让设置立即生效(无需重启系统):
kbdadm reload
或者也可以把kbd -s stop=off添加到/etc/rc2.d/S99local脚本中,确保系统启动时自动执行。
3. 重映射为不易误触的序列(如果不想完全禁用)
如果你需要保留紧急重启功能,但想改成更难触发的组合,可以用kbd命令修改触发序列。首先查看当前序列:
kbd -l stopseq
输出会是类似stopseq: 0x13,0xe0,0x38的键码(对应默认的Alt+SysRq+R)。然后用kbd -s stopseq=新键码修改,比如改成Alt+PrintScreen+F12(可以用kbd -l keys查看所有键的编码)。修改后同样要加到/etc/default/kbd或启动脚本中,确保永久生效。
额外提示
因为你说无法随意复现,建议优先尝试永久禁用的方案,这样不管误触什么按键,都不会触发重启了。如果之后确实需要紧急重启虚拟机,直接用VirtualBox的「重启」按钮即可,完全不影响日常维护工作。
内容的提问来源于stack exchange,提问作者Kaz

