我需要为 VNC 会话中的神奇 sysrq 功能发送哪些数字键代码?

use*_*104 4 linux vnc magic-sysrq

我可以通过 VNC 访问 KVM 来宾的系统控制台。我需要什么样的键码发送对有Magic SysRq序列(Ctrl+Alt在Linux下+“REISUB”)?

编辑:在 Linux 下qemu,在 QEMU 监视器中运行showkey和命令sendkey alt-sysrq-h显示键码 99 ( SysRq?)、56 ( Alt) 和 35 ( H)。使用 UltraVNC 查看器的“发送自定义键”命令,在通过showkey.

小智 7

其文档sysrq位于 linux 源代码 ( https://github.com/torvalds/linux/blob/master/Documentation/sysrq.txt ) 中。 我强烈建议您阅读它。

是否启用了 SysRq 密钥?

首先,请确保SysRq启用了魔术键的使用:

$ cat /proc/sys/kernel/sysrq
1
Run Code Online (Sandbox Code Playgroud)

如果它说0然后SysRq被禁用。您可以通过以下方式启用它:

$ echo 1 > /proc/sys/kernel/sysrq
Run Code Online (Sandbox Code Playgroud)

并且会立即生效。启用魔法密钥有安全隐患,TLDP 网站上有一些很好的文档

基于在 wikipedia 上找到的一些键盘布局。您可以尝试包含PrtScr/的组合Print Screen

在我的系统上:Alt+ PrtScr+“其他”。这与这篇维基百科文章中描述的顺序相同

获取 SysRq 键码:

您可以运行showkey扫描键码/获取扫描码:

$ showkey -s
0x38                 - i'm pressing Alt
0xb8                 - releasing Alt
0xe0 0x2a 0xe0 0x37  - print screen
0xe0 0xaa 0xe0 0xb7  - release print screen
0x38                 - i'm pressing Alt
0x54                 - i'm also pressing print screen
0x23                 - letter H
0xa3                 - bye bye letter H
0xd4                 - releasing print screen
0xb8                 - releasing Alt
Run Code Online (Sandbox Code Playgroud)

0x54= 84 将变成Alt+ 。PrtScrSysRq

让我们确认一下:

$ getkeycodes 
Plain scancodes xx (hex) versus keycodes (dec)
for 1-83 (0x01-0x53) scancode equals keycode

 0x50:   80  81  82  83  99   0  86  87
 0x58:   88 117   0   0  95 183 184 185
 0x60:    0   0   0   0   0   0   0   0
 0x68:    0   0   0   0   0   0   0   0
...
Run Code Online (Sandbox Code Playgroud)

我的系统将该扫描0x54码映射到键码99,即KEY_SYSRQ. 双重检查:

# rpm -ql kernel-headers | grep input.h | xargs grep KEY_SYSRQ
/usr/include/linux/input.h:#define KEY_SYSRQ        99
Run Code Online (Sandbox Code Playgroud)

SysRq 有用的组合:

  • Alt+ PrtScr+ D- 这对我的系统来说是一个糟糕的组合并给了我帮助

    SysRq : HELP : loglevel(0-9) reBoot Crash terminate-all-tasks(E)
    memory-full-oom-kill(F) kill-all-tasks(I) thaw-filesystems(J) saK
    show-backtrace-all-active-cpus(L) show-memory-usage(M) nice-all-RT-tasks(N)
    powerOff show-registers(P) show-all-timers(Q) unRaw Sync show-task-states(T)
    Unmount show-blocked-tasks(W) dump-ftrace-buffer(Z)
    
    Run Code Online (Sandbox Code Playgroud)
  • Alt+ PrtScr+ H- 实际帮助按键

    SysRq : HELP : loglevel(0-9) reBoot Crash terminate-all-tasks(E)
    memory-full-oom-kill(F) kill-all-tasks(I) thaw-filesystems(J) saK
    show-backtrace-all-active-cpus(L) show-memory-usage(M) nice-all-RT-tasks(N)
    powerOff show-registers(P) show-all-timers(Q) unRaw Sync show-task-states(T)
    Unmount show-blocked-tasks(W) dump-ftrace-buffer(Z)
    
    Run Code Online (Sandbox Code Playgroud)
  • Alt+ PrtScr+ B- 重启
  • Alt+ PrtScr+ C- 使系统崩溃(使用崩溃转储)
  • Alt+ PrtScr+ E- SIGTERM 除 init 之外的每个任务
  • Alt+ PrtScr+ F- 调用 OOM 杀手
  • Alt+ PrtScr+ M- 输出内存/交换统计
  • Alt+ PrtScr+ O- 关机
  • Alt+ PrtScr+ S- sync所有挂载的文件系统
  • Alt+ PrtScr+ U- 将所有文件系统重新挂载为只读
  • Alt+ PrtScr+ T- 输出带有跟踪的任务列表