运行 Ubuntu 的 Mac mini 如何在断电后重启?

运行 Ubuntu 的 Mac mini 如何在断电后重启?

我在 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

经过一番研究,我验证了这一点。我采取了以下措施来找出答案,理论上这些机器的未来迭代也可以这样做:

  1. 寻找 LPC 设备:

    $ lspci | grep LPC
    00:1f.0 ISA bridge: Intel Corporation HM77 Express Chipset LPC Controller (rev 04)
    

    在这种情况下,它是 00:1f.0。

  2. 查找设备的数据表。例如,通过 Google 搜索“英特尔 hm77 lpc 控制器数据表”产量此数据表

  3. 现在你只需要找到正确的寄存器,根据数据表的不同,这可能是一个挑战。在这里,我在目录中找到了“5.13.7.5 Sx-G3-Sx,处理电源故障,第 180 页”,其中描述了控制位AFTERG3_EN

  4. 在文档中搜索该内容,我们在第 530 页表格底部的第 13.8.1.3 节(通用 PM 配置寄存器 3)中找到了它。从中我们看到它是 0xA4 处 16 位寄存器的第 0 位。

然后就可以用它来构建相关的setpci命令了。

因此,如果将来再次发生变化,请找到设备,找到数据表,构建命令,进行测试,然后举起胜利的拳头。

但基本上,设备和寄存器地址在不同的机器上可能有所不同,它特定于 LPC 控制器;因此,在确定使用哪个命令之前,您必须首先检查硬件。

答案2

我发现答案隐藏在这个帖子。新的 setpci 命令是

sudo setpci -s 00:03.0 0x7b.b=19

顺便说一句,此设置不是“粘性的”,并且在重启后不会持续存在 - 必须在每次启动时进行设置。

您可以将此命令放入 bash 脚本中并在启动时运行。请参阅这里有关启动脚本的详细信息。

答案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

将使其在断电时重新启动。

相关内容