如何在 Mac 上使用魔法 sysreq 键?

Bla*_*ing 14 linux mac hotkeys

我最近才发现魔法系统请求键。如何在安装了基于 Linux 的操作系统的 Mac 上通过键盘使用它们,或者在键盘没有SysReq键的其他情况下使用它们?是否有一个相当于meta-的序列SysReq,或者一种创建序列的方法?

Aar*_*ler 8

如果没有生成相同扫描代码的键(您没有),唯一的选择是echo <char> > /proc/sysrq-trigger<char>您要与 一起按下的键在哪里M-SysRq。(当然,这假设你正在运行与魔术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
Run Code Online (Sandbox Code Playgroud)

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

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


Gab*_*les 7

这个答案也贴在这里

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

非常感谢Bengt Olsson 在这里的出色指导,这让我有必要开始找出缺失的细节。

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

  1. 下载 keyfuzz 的源代码 ( http://0pointer.de/lennart/projects/keyfuzz/keyfuzz-0.2.tar.gz ),并解压缩它(我可以右键单击它并转到“Extract Here”以将其解压缩到我的GUI 文件管理器,例如)。要阅读有关 keyfuzz 的更多信息,请参见此处。它是在 GNU GPL 2.0 或更高版本的开源许可证下发布的(yaaay 开源!)。

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

    sudo apt-get update
    sudo apt-get install lynx xmltoman gengetopt
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用常用命令编译和安装 keyfuzz:

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

    cd /dev/input/by-id
    ls
    
    Run Code Online (Sandbox Code Playgroud)
    • 对我来说是“usb-Apple_Computer_Apple_Internal_Keyboard___Trackpad-event-kbd”
  5. 将以下行添加到您的/etc/rc.local文件中(请参阅下面的注释),以便在您的计算机每次启动并加载此用户时运行此命令。请注意,我们正在使用我们刚刚在上面找到的 Apple 键盘条目。此命令使用 keyfuzz 将Apple 键盘或笔记本电脑上的 F12 或 F13 映射到系统“ Magic 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) 包含一个hashbang,则使用它顶部,例如#!/bin/sh -e。确保它由 root 和可执行文件拥有(sudo gedit /etc/rc.localORgedit /etc/rc.local后跟sudo chown root:root rc.local; thensudo 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
    
    Run Code Online (Sandbox Code Playgroud)
  6. 重启。

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

请注意,通过Ctrl+Alt+F1 (F1 through F6 work actually)在发出命令之前首先跳转到替代会话,您可以在按下每个键时通过发出 REISUB 来查看返回的结果。要返回您的主要 X Window 会话,请使用Ctrl+Alt+F7.

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

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

该文件有详细记录,并准确地告诉您如何启用哪些功能。当前的默认值是出于安全目的选择的,只有在您知道为什么需要时才应该更改(有关安全隐患,请参阅错误 #194676)。