我在 2010 年的 Mac Mini (4,1) 上运行着 Ubuntu 10.04.1 (Lucid)。这是一台服务器,所以我希望它能够在断电后重新启动(“服务器模式”)。
在 Mac OS X 中,您可以在“节能”系统偏好设置中选中“断电后自动启动”。但是,选中此值似乎不会影响 Ubuntu 中的“服务器模式”行为(即断电后不会重新启动)。
这似乎是因为“服务器模式”值没有保留在 pram/efi 中,而是在每次启动时由 Mac OS X 设置。
我发现本教程关于如何为 Mac Mini 启用“服务器模式”,但它不起作用:
$ setpci -s 0:1f.0 0xa4.b=0
setpci: Warning: No devices selected for `0xa4.b=
新款 4.1 Mac Mini 发生了很多变化——仅仅是安装 Ubuntu 就已是了不起的成就。也许“服务器模式”的咒语也发生了变化?
我的问题是:如何在新的 4,1 Mac Mini 上启用“服务器模式”?
答案1
在某些 Mac Mini 上(我大约在 2014 年测试过一台),情况似乎仍然是:
sudo setpci -s 00:1f.0 0xa4.b=0
经过一番研究,我验证了这一点。我采取了以下措施来找出答案,理论上这些机器的未来迭代也可以这样做:
寻找 LPC 设备:
$ lspci | grep LPC 00:1f.0 ISA bridge: Intel Corporation HM77 Express Chipset LPC Controller (rev 04)
在这种情况下,它是 00:1f.0。
查找设备的数据表。例如,通过 Google 搜索“英特尔 hm77 lpc 控制器数据表”产量此数据表。
现在你只需要找到正确的寄存器,根据数据表的不同,这可能是一个挑战。在这里,我在目录中找到了“5.13.7.5 Sx-G3-Sx,处理电源故障,第 180 页”,其中描述了控制位
AFTERG3_EN
。在文档中搜索该内容,我们在第 530 页表格底部的第 13.8.1.3 节(通用 PM 配置寄存器 3)中找到了它。从中我们看到它是 0xA4 处 16 位寄存器的第 0 位。
然后就可以用它来构建相关的setpci
命令了。
因此,如果将来再次发生变化,请找到设备,找到数据表,构建命令,进行测试,然后举起胜利的拳头。
但基本上,设备和寄存器地址在不同的机器上可能有所不同,它特定于 LPC 控制器;因此,在确定使用哪个命令之前,您必须首先检查硬件。
答案2
答案3
这里有关于此事的很好的总结:http://www.macfreek.nl/memory/Reboot_Mac_running_Linux_after_power_failure
简而言之,高级配置和电源接口 (ACPI) 的配置取决于 Mac 中使用的南桥型号。
为了配置断电自动启动,请通过查找 LPC 设备来识别南桥型号,并创建一个 cron 选项卡或 systemd 服务来相应地设置位寄存器。
$ lspci | grep LPC
对于 2006 年初的 Mac Mini / MacMini1,1 / A1176:
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)
对于 2009 年初的 Mac Mini / MacMini3,1 / A1283:
00:03.0 ISA bridge: NVIDIA Corporation MCP79 LPC Bridge (rev b2)
对于 2010 年初的 Mac Mini / MacMini4,1 / A1347:
00:03.0 ISA bridge: NVIDIA Corporation MCP89 LPC Bridge (rev a2)
对于 Mac Mini Server 2011:
00:1f.0 ISA bridge: Intel Corporation HM65 Express Chipset Family LPC Controller (rev 05)
请注意,配置在重启后不会持久,因此需要在启动时进行配置(例如通过@Juan Carlos Méndez 建议的系统)。
要创建 systemd 启动服务,请创建一个文件etc/systemd/system/reboot_on_power_failure.service
:
[Unit]
Description=Reboot after power failure
[Service]
Type=oneshot
# Please select the appropriate ISA bridge for your MAC below:
# reboot register for Mac Mini with nVidia ISA bridge
# ExecStart=setpci -s 00:03.0 0x7b.b=0x19
# reboot register for Mac Mini with Intel ISA bridge
# ExecStart=sudo setpci -s 0:1f.0 0xa4.b=0
# reboot register for PPC Mac Mini (not tested myself):
# ExecStart=echo server_mode=1 > /proc/pmu/options
[Install]
WantedBy=sysinit.target
并运行sudo systemctl enable --now reboot_on_power_failure.service
答案4
我可以在 Mac Mini(2012 年末)上确认将其添加到 root cron:
@reboot /usr/bin/setpci -s 00:1f.0 0xa4.b=0
将使其在断电时重新启动。