Ubuntu + PrtSc + AltGr = 崩溃

phr*_*box 4 keyboard sysrq crash

在 Lenovo t440p 上的 Ubuntu 15.10 和 15.04 上,当我在 Netbeans 中编写代码并意外单击按钮AltGrPrtSc,它崩溃并重新启动系统。这对于新安装的 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?或者这个回溯有什么问题?

谢谢

Byt*_*der 5

问题:

在键盘上,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命令过滤器值:

    我们可以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命令:

    执行以下命令并尝试SysRq此后快捷方式是否仍然有效(例如Alt+ SysRq+B重置/重新启动):

    echo 0 | sudo tee /proc/sys/kernel/sysrq
    
    Run Code Online (Sandbox Code Playgroud)

    这应该禁用SysRq当前会话的所有命令,直到您下次重新启动。

  • 启用所有SysRq命令:

    要手动启用所有 SysRq命令,我们将值1写入同一个虚拟文件:

    echo 1 | sudo tee /proc/sys/kernel/sysrq
    
    Run Code Online (Sandbox Code Playgroud)
  • 启用先前的默认SysRq命令过滤器:

    您可以通过重新启动来恢复默认配置,或者如果您在调整之前检查并记住了该值,则可以再次设置该值而不是0/1来启用/禁用所有命令。

    因此,在我的情况下,原始值为176,我将运行:

    echo 176 | sudo tee /proc/sys/kernel/sysrq
    
    Run Code Online (Sandbox Code Playgroud)

  • 您的解决方案仅保留到下次重新启动为止。正确的永久解决方案是编辑“/etc/sysctl.d/10-magic-sysrq.conf”文件。 (3认同)