如何从 BIOS 唤醒启动 Ubuntu 并以其他方式启动 Windows

如何从 BIOS 唤醒启动 Ubuntu 并以其他方式启动 Windows

我有双启动系统。我的 Ubuntu 分区需要在 BIOS 计划唤醒时自动启动(如果可能,还要唤醒局域网),否则我希望默认启动 Windows。(电源按钮)

如何配置系统仅在 BIOS 唤醒或 wakeonlan 后启动到 Ubuntu,而其他情况下则默认启动到 Windows?是否可以配置或编写 grub 脚本来执行此操作?

答案1

两种(或三种)不同方式

通过 PXE 服务器使用网络启动。

我曾经使用过类似的技巧,在用户晚上外出时备份 Windows 站点(带有ntfsclone或)。partclone

  1. 创建一个 PXE 启动服务器(dhcpd + tftpd)用于通过网络启动(您可以为网络上的每台计算机创建特定的启动菜单或组成组。网络启动菜单可以指向本地硬盘。)

  2. 在此服务器上准备两个不同的启动菜单:一个默认为ubuntu,另一个默认为window。

  3. 链接启动菜单默认为窗口,由 pxe 服务器提供服务。

  4. 准备一个醒来脚本

    1. )链接启动菜单默认为ubuntu,由pxe服务器提供服务。
    2. ) 发送网络唤醒唤醒计算机的信号
    3. )等待 TFTP 日志中的启动菜单请求(关心超时和限制,以假设异常)。
    4. ) 链接启动菜单默认为由pxe服务器提供服务的窗口。
  5. 您甚至可以尝试通过 crontab 运行相同程序以通过 BIOS 唤醒进行同步,但如果在 crontab 中,您只需运行在 处定义的脚本即可4.

这样就可以了。

(请注意,pxe 启动服务器很轻,甚至可以安装在树莓派、被黑客入侵的 NAS 或 DD-WRT 路由器上。)

使用dmidecode信息

grub-reboot windows您可以使用 dmidecode在电源开关启动时运行。

只需创建一个包含以下内容的脚本:

/bin/sh
dmidecode  | grep -q 'Wake-up Type: Power Switch' && echo grub-reboot windows
reboot

您可以在每次启动时运行此脚本,通过使用@reboot指令将其添加到 crontab 中。

(注意:对于grub-reboot,您可能需要编辑/etc/default/grub。请参阅man grub-reboot

这会起作用但会大大增加 Windows 启动时间!

为了避免这种情况,您可以创建一个特殊的initramdisk程序来完成这项工作,但这并不那么简单。

使用ipxe(可能)

我不知道此工具,但我听到了很好的反馈。

远程控制是领先的开源网络启动固件。它提供了完整的 PXE 实现,并增强了其他功能

答案2

多年来这个问题已被问过很多次,但都没有令人满意的答案:

众所周知,操作系统可以检测唤醒原因。类似的东西grub应该能够做同样的事情,这似乎是合理的,但目前情况并非如此。

我能找到的唯一“解决方案”是设置grub双启动,默认使用 Linux。照常唤醒。登录计算机(远程或其他方式)并使用类似 的命令手动重启进入 Windows sudo grub-reboot Windows。设置和使用是描述在这里

相关内容