我最近才知道魔法系统请求密钥。如何在安装了基于 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 的出色指导这让我开始弄清楚缺失的细节。
该解决方案是在用户空间完成的,不需要像某些建议那样重新编译内核。
下载 keyfuzz 的源代码(http://0pointer.de/lennart/projects/keyfuzz/keyfuzz-0.2.tar.gz),然后将其提取出来(例如,我可以在我的 GUI 文件管理器中右键单击它并转到“在此处提取”以将其提取出来)。要了解有关 keyfuzz 的更多信息,看这里。它是根据 GNU GPL 2.0 或更高版本的开源许可证发布的(开源啊!)。
- 不要使用太深的目录(或可能有空格),否则
./configure
下面的命令将失败。
- 不要使用太深的目录(或可能有空格),否则
安装依赖项,否则
./configure
下面运行可能会出现一些错误:sudo apt-get update sudo apt-get install lynx xmltoman gengetopt
使用常用命令编译并安装keyfuzz:
./configure make sudo make install
导航
/dev/input/by-id
并找到以“-event-kbd”结尾的 Apple 键盘:cd /dev/input/by-id ls
- 对我来说它是“usb-Apple_Computer_Apple_Internal_Keyboard___Trackpad-event-kbd”
将以下行添加到您的
/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.local
ORgedit /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
重启。
现在我可以按 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] + [电源按钮]