phr*_*box 4 keyboard sysrq crash
在 Lenovo t440p 上的 Ubuntu 15.10 和 15.04 上,当我在 Netbeans 中编写代码并意外单击按钮AltGr时PrtSc,它崩溃并重新启动系统。这对于新安装的 Ubuntu 不适用。
这是系统日志的回溯:
Feb 5 19:47:43 mycomputername kernel: [ 15.485327] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb 5 19:47:44 mycomputername kernel: [ 16.966879] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb 5 19:47:44 mycomputername kernel: [ 17.115697] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb 5 19:47:44 mycomputername kernel: [ 17.115844] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb 5 19:47:45 mycomputername kernel: [ 17.644247] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb 5 19:47:45 mycomputername kernel: [ 17.829425] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb 5 19:47:46 mycomputername kernel: [ 18.698713] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb 5 19:47:47 mycomputername kernel: [ 20.033534] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Feb 5 19:47:48 mycomputername kernel: [ 21.061323] sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
Run Code Online (Sandbox Code Playgroud)
如何禁用 PrtSc 或防止意外点击 Lenovo 键盘上的 PrintScreen?或者这个回溯有什么问题?
谢谢
在键盘上,Print Screen (PrtSc)和System Request (SysRq)位于同一个物理按钮上,就像我所知道的大多数布局一样。
组合键Alt+ SysRq+[SPECIFIC LETTER]通常被称为Magic SysRq Commands,它直接向内核发送命令。
如果系统完全崩溃,它们主要用作冷重置的更安全替代方案,因为有例如同步和卸载文件系统的命令,以防止损坏和数据损坏以及重置/重新启动(如果按第三个键B) )或关闭电源(第三个键O)。更多信息和完整的组合列表,即使是不同的键盘布局,也可以在相应的维基百科文章Magic SysRq Key中找到。
所以你不小心做的就是直接向内核发送重新启动的命令,这就是它的作用。
不过,根据内核的编译方式,您可以指定系统运行时内核应侦听的 SysRq 命令。我刚刚在 15.10 上使用内核对此进行了测试4.2.0-27-generic,并且它有效,但如果能够了解何时或针对哪些内核启用了此功能,那就太好了。如果您知道请评论。
我们可以SysRq通过检查虚拟文件的内容来了解当前启用了哪些命令/proc/sys/kernel/sysrq:
cat /proc/sys/kernel/sysrq
Run Code Online (Sandbox Code Playgroud)
结果将是一个必须按如下方式解释的数字:
0 - disable SysRq
1 - enable SysRq completely
>1 - bitmask of enabled SysRq functions:
2 - control of console logging level
4 - control of keyboard (SAK, unraw)
8 - debugging dumps of processes etc.
16 - sync command
32 - remount read-only
64 - signalling of processes (term, kill, oom-kill)
128 - reboot/poweroff
256 - nicing of all RT tasks
Run Code Online (Sandbox Code Playgroud)
当我在桌面上时,我的默认值是176,即128+32+16。因此,根据上表,我可以重新启动、关闭电源、同步文件系统并将其重新挂载为只读。
执行以下命令并尝试SysRq此后快捷方式是否仍然有效(例如Alt+ SysRq+B重置/重新启动):
echo 0 | sudo tee /proc/sys/kernel/sysrq
Run Code Online (Sandbox Code Playgroud)
这应该禁用SysRq当前会话的所有命令,直到您下次重新启动。
要手动启用所有 SysRq命令,我们将值1写入同一个虚拟文件:
echo 1 | sudo tee /proc/sys/kernel/sysrq
Run Code Online (Sandbox Code Playgroud)您可以通过重新启动来恢复默认配置,或者如果您在调整之前检查并记住了该值,则可以再次设置该值而不是0/1来启用/禁用所有命令。
因此,在我的情况下,原始值为176,我将运行:
echo 176 | sudo tee /proc/sys/kernel/sysrq
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
2188 次 |
| 最近记录: |