我有双启动系统。我的 Ubuntu 分区需要在 BIOS 计划唤醒时自动启动(如果可能,还要唤醒局域网),否则我希望默认启动 Windows。(电源按钮)
如何配置系统仅在 BIOS 唤醒或 wakeonlan 后启动到 Ubuntu,而其他情况下则默认启动到 Windows?是否可以配置或编写 grub 脚本来执行此操作?
答案1
两种(或三种)不同方式
通过 PXE 服务器使用网络启动。
我曾经使用过类似的技巧,在用户晚上外出时备份 Windows 站点(带有ntfsclone
或)。partclone
创建一个 PXE 启动服务器(dhcpd + tftpd)用于通过网络启动(您可以为网络上的每台计算机创建特定的启动菜单或组成组。网络启动菜单可以指向本地硬盘。)
在此服务器上准备两个不同的启动菜单:一个默认为ubuntu,另一个默认为window。
链接启动菜单默认为窗口,由 pxe 服务器提供服务。
准备一个醒来脚本
- )链接启动菜单默认为ubuntu,由pxe服务器提供服务。
- ) 发送网络唤醒唤醒计算机的信号
- )等待 TFTP 日志中的启动菜单请求(关心超时和限制,以假设异常)。
- ) 链接启动菜单默认为由pxe服务器提供服务的窗口。
您甚至可以尝试通过 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
。设置和使用是描述在这里。