如何在 Mac 上使用神奇的 sysreq 键?

如何在 Mac 上使用神奇的 sysreq 键?

我最近才知道魔法系统请求密钥。如何在安装了基于 Linux 的操作系统的 Mac 上,或者在键盘没有按键的情况下,通过键盘使用它们?是否有与-SysReq等效的序列,或者有创建该序列的方法?metaSysReq

答案1

如果没有生成相同扫描码的键(您没有),唯一的选择是echo <char> > /proc/sysrq-trigger,其中<char>是您要与 一起按下的键。(这当然假设您正在运行一个编译了魔术 SysRq 的内核,并且之前已在或类似中M-SysRq完成过。)echo 1 > /proc/sys/kernel/sysrq/etc/rc.local

如果您想要真正神奇的 SysRq 功能,而不是通过回显随机 /proc 条目获得的苍白模仿,您需要找到一个带有 SysRq 键的 PC 式 USB 键盘。无论在哪种架构上运行,Linux 都会正确解释扫描代码;在这种情况下,棘手的部分是首先生成扫描代码,而这无法通过标准 Mac 键盘完成。

(另一方面,似乎可以编译内核来识别不同的扫描代码,例如 Mac 的弹出键,而不是 SysRq;我从来没有想过要降级我的 MBP,所以无法第一手了解,但我想有人已经这样做了。或者也许你是第一个;毕竟,自定义破解内核是运行 Linux 的乐趣的一半,或者我是这样理解的。)

更新:显然这是可以做到的来自用户空间

目前最好的方法是安装(手动编译)keyfuzz 程序并

echo "786616 99" | keyfuzz -s -d /dev/input/by-id/usb-Apple_Inc._Apple_Internal_Keyboard___Trackpad-event-kbd

例如,在您的 /etc/profile 中。这将典型 Apple Macbook Pro(我的是 2010 年中,6,2)上的 Alt-Eject 映射到 Alt-SysRq 组合。

如果您正在寻找更多老式的“Linux 的双拳故事”类型的体验,那么该评论线程中链接了一些内核补丁,它们可能会提供在内核级别重新映射键码的指导。

答案2

这个答案也发布在这里

经过 3 到 4 个小时的艰苦搜索、阅读和反复试验,这是一个更全面和通用的答案,应该适用于任何Apple/Mac 笔记本电脑或键盘不过,就我的特殊情况而言,我将此解决方案用于运行 Xubuntu 16.04 LTS 的 2008 年白色 MacBook。

非常感谢Bengt Olsson 的出色指导这让我开始弄清楚缺失的细节。

该解决方案是在用户空间完成的,不需要像某些建议那样重新编译内核。

  1. 下载 keyfuzz 的源代码(http://0pointer.de/lennart/projects/keyfuzz/keyfuzz-0.2.tar.gz),然后将其提取出来(例如,我可以在我的 GUI 文件管理器中右键单击它并转到“在此处提取”以将其提取出来)。要了解有关 keyfuzz 的更多信息,看这里。它是根据 GNU GPL 2.0 或更高版本的开源许可证发布的(开源啊!)。

    • 不要使用太深的目录(或可能有空格),否则./configure下面的命令将失败。
  2. 安装依赖项,否则./configure下面运行可能会出现一些错误:

    sudo apt-get update
    sudo apt-get install lynx xmltoman gengetopt
    
  3. 使用常用命令编译并安装keyfuzz:

    ./configure
    make
    sudo make install
    
  4. 导航/dev/input/by-id并找到以“-event-kbd”结尾的 Apple 键盘:

    cd /dev/input/by-id
    ls
    
    • 对我来说它是“usb-Apple_Computer_Apple_Internal_Keyboard___Trackpad-event-kbd”
  5. 将以下行添加到您的/etc/rc.local文件中(请参阅下面的注释),以使此命令在每次计算机启动并加载此用户时运行。请注意,我们使用的是我们刚刚在上面找到的 Apple 键盘条目。此命令使用 keyfuzz 来将 Apple 键盘或笔记本电脑上的 F12 或 F13 映射到系统“神奇的 SysRq 键,进行软重启。

    • 地图F12至 SysRq:458821 99。非常感谢“pjjjv”在这里解决了这个问题!https://ubuntuforums.org/archive/index.php/t-762665.html

    • 地图F13到 SysRq: 458856 99

    • 由于我的 MacBook 2008 没有 F13,因此我使用上面的 F12 选项。另外请记住使用我们上面找到的正确键盘输入。我rc.local为我的情况添加的命令是:echo "458821 99" | keyfuzz -s -d /dev/input/by-id/usb-Apple_Computer_Apple_Internal_Keyboard___Trackpad-event-kbd

    • 笔记:在最近的 Ubuntu 版本中,/etc/rc.local默认情况下不存在,但正如这个答案这个答案,如果 1)存在,2)至少可由 root 用户执行,并且 3)包含哈希邦在顶部,例如#!/bin/sh -e。确保它由 root 拥有且可执行(sudo gedit /etc/rc.localORgedit /etc/rc.local后跟sudo chown root:root rc.local; 然后sudo chmod u+x /etc/rc.local)。

    • 这是我的整个/etc/rc.local文件,包含适当的条目:

    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.
    
    echo "458821 99" | keyfuzz -s -d /dev/input/by-id/usb-Apple_Computer_Apple_Internal_Keyboard___Trackpad-event-kbd
    
    exit 0
    
  6. 重启。

现在我可以按 Alt+F12(或者您可以按照上面所述使用 Alt+F13)并发出 REISUB 来软重启您的计算机。在运行 Xubuntu 16.04 LTS 的 MacBook 2008 笔记本电脑上完美运行。

请注意,您可以看到发出 REISUB 后按每个键时返回的结果,方法是先使用 跳转到备用会话,然后Ctrl+Alt+F1 (F1 through F6 work actually)再发出命令。要返回主 X Window 会话,请使用Ctrl+Alt+F7

如果您得到的结果是“此 sysrq 操作已禁用”,这对于几个命令来说都是正常的,因为它们会带来潜在的安全风险。但是,Boot 命令应该仍然有效,允许您软重启计算机。以下是有关此问题的更多信息,来自 mniess

从 Ubuntu 12.10 开始,可以更细粒度地控制启用哪些 Magic-SysRq 功能。只需编辑文件/etc/sysctl.d/10-magic-sysrq.conf

该文件有详尽的文档,并会告诉您如何启用哪些功能。当前默认设置是出于安全目的而选择的,只有在您知道为什么需要更改时才应更改(有关安全影响,请参阅错误 #194676)。

答案3

不是神奇的 sysreq 键,但如果您想在冻结状态下重新启动或关闭电源,那么您可以使用 SMC 重置键。

[Ctrl] + [Shift] + [Option] + [电源按钮]

相关内容