killwintel 发表于 2025-1-21 15:25

双引导简单,但无显示器的双系统引导如何切换系统?

本帖最后由 killwintel 于 2025-1-22 19:23 编辑

上个帖子是mac远程桌面/屏幕共享家里windows主机的分享,但随之而来的问题是:
家中被控制主机采用mac/win双系统。
远程登录mac系统,在启动磁盘选择windows 重启进入windows成功,但在windwos 下死活找不到重启进入mac的办法(前提:不使用显示器)。

第一步
我的想法很简单,使用OC设置默认引导系统的自带功能。
经查,在没有显示器情况下,做不到。

OpenCore 引导程序有设置默认操作系统的功能,以下是具体设置方法:


[*]方法一:使用 OpenCore Configurator 打开 EFI 目录里的 config.plist,找到 Misc->Security->AllowSetDefault,将其值设置为 true。然后重启电脑,在 OC 引导选择界面中,用键盘上下方向键将光标移至想要设置为默认启动的系统项上,按下 Ctrl+Enter,之后开机倒计时结束后就会自动进入选择的系统。
[*]方法二:若安装的是 macOS Big Sur 及之后的版本,可在系统偏好设置 -> 启动磁盘中选择需要默认启动的系统。
[*]方法三:OpenCore 支持基于 boot.efi 的原生开机快捷键,可在启动时按住 Option 或 ESC 选择引导设备,将光标移至想要设置为默认启动的系统项上,按 Command+R 也能进入恢复模式,或按住 Command+Option+P+R 重置 NVRAM,之后选择默认启动项即可。


这三种方法,不适用没有显示器,更不适合远程。放弃。

第二步
既然通过上面三种方法可以设置默认,那么肯定是OC把设置保存在了哪里,直接修改这个设置不就行了么。经查,
OpenCore将默认启动系统的信息保存在NVRAM(非易失性随机访问存储器)中。以下从程序员角度进行解释:
### 存储位置在NVRAM中,OpenCore使用特定的键值对来存储默认启动系统等引导相关信息。具体来说,它可能会使用类似于`7C436110-AB2A-4BBB-A880-FE41995C9F82`这样的GUID(全局唯一标识符)下的特定键来存储引导配置数据,默认启动系统信息就包含在其中。
### 取出信息的方式- **使用OpenCore相关API**:OpenCore提供了一些接口函数,程序员可以通过调用这些函数来访问NVRAM中的数据。比如,可能有函数用于读取特定GUID下的键值对信息,通过指定与默认启动系统相关的键,就可以获取到相应的值,从而得知默认启动系统的设置。
**直接访问NVRAM**:在底层,程序员可以通过操作系统提供的NVRAM访问接口来直接读取NVRAM中的数据。例如在macOS系统中,可以使用IOKit框架中的相关函数来与NVRAM进行交互。通过发送特定的命令和参数,请求读取特定GUID和键对应的NVRAM数据,从而获取到OpenCore存储的默认启动系统信息。

第三步,直接修改NVRAM的方法。

[*]OpenCore 写入 NVRAM:在基于 OpenCore 引导的系统中,它的默认启动信息决定了在 OpenCore 引导界面之后,系统默认选择启动的操作系统。当计算机启动进入 OpenCore 引导阶段,它会读取 NVRAM 中的此信息来确定默认引导项。

在没有显示器的远程环境中,在OpenCore中切换双系统有以下方法:
方法一:利用命令行工具BootOption1. 下面分小5步
1.下载安装(https://github.com/bootoption/bootoption)命令行工具。
2. 关闭系统的SIP和NVRAM写保护,通过OpenCore的NVRAM中`7C436110-AB2A-4BBB-A880-FE41995C9F82`的`csr-active-config`填入数据值`E7030000`,然后重启系统。
3. 运行`bootoption list`命令查看当前可启动的列表,确认Windows和macOS的选项序号。
4. 运行`sudo bootoption order [目标系统序号] [原默认系统序号]`命令,如`sudo bootoption order 2 1`将序号2和1的选项对换,把Windows设置为默认启动项。
5. 完成远程操作后,若想切换回macOS,可在Windows下使用EasyUEFI或DiskGenius将OC引导选项设置到首位。也可将`csr-active-config`参数设置为`00000000`,重启以恢复SIP开启状态。
方法二: 远程控制软件结合本地操作
1. 在控制端安装TeamViewer等远程控制软件,在被控制的电脑上也安装并设置好相应的Host。
2. 通过远程控制软件连接到目标电脑后,若电脑当前处于开机状态且在OpenCore引导界面,可以模拟键盘操作,按对应热键选择系统并回车启动。若电脑处于关机状态,则可在远程控制软件中发送开机指令,开机后按相应的按键进入BIOS设置界面或OpenCore引导界面进行系统切换操作。

第一种方法可以关闭SIP/修改NVRAM,但不适合频繁切换系统,嫌麻烦。
第二种方法,功能倒是强大,但特别奇怪,在oc出现菜单时能够远程模拟键盘,这是不是需要在OC目录里面加上自己的驱动了。teamViewer听说是收费版,不想再安装第三方实现,所以也放弃。

其实,最后也没有找到完美办法。

当下采取了一个笨办法,适合在家局域网。

OC菜单显示时间设为10秒,无论双系统,单击“重启”后的第25秒左右,必定已经进入OC菜单显示项,此时现场使用键盘选择进入另一个系统(盲打)。

抛砖引玉,希望懂的朋友多给指出新办法。谢谢











花谢花飞红 发表于 2025-1-21 15:49

默认进MOS不就行了吗?

supermage 发表于 2025-1-21 16:23


之前一直用的这个,win直接启动切换Mac,现在MAC单系统了,这玩意也好久没用了~

killwintel 发表于 2025-1-21 16:57

花谢花飞红 发表于 2025-1-21 15:49
默认进MOS不就行了吗?

mos?不明白是什么东东

killwintel 发表于 2025-1-21 17:07

supermage 发表于 2025-1-21 16:23
之前一直用的这个,win直接启动切换Mac,现在MAC单系统了,这玩意也好久没用了~
...

谢谢兄弟。这个可能是在mac下安装windows时才有的功能,适合bootcamp安装的win.

我的win在Mac之前就存在,mac在另一个新硬盘上。

下载了bootcamp,老win11无法运行,查了查原因,发现必须得从装win10重新开始,还得在mac硬盘上割出一块空间给windows .嫌麻烦,老win的软件不想重来一回了。

令我意外的是,OC没有提供简单设置设置默认的方法,非得让“ctrl+Entry"的手动一下。准备去啃OC手册再想想辙

shenlang 发表于 2025-1-22 14:16

WIN下使用EasyUEFI改一下可行不?

w258949354 发表于 2025-1-22 14:32

感谢楼主分享

supermage 发表于 2025-1-22 21:46

killwintel 发表于 2025-1-21 17:07
谢谢兄弟。这个可能是在mac下安装windows时才有的功能,适合bootcamp安装的win.

我的win在Mac之前就存 ...



你可以下载试试看,我是没有用bootcamp安装WIN就可以直接使用的,





killwintel 发表于 2025-1-22 22:13

shenlang 发表于 2025-1-22 14:16
WIN下使用EasyUEFI改一下可行不?

关键就在这里,思路如果在BIOS切换系统那就容易解决。
windows 安装好后,被OC启动(OC是最高启动项),除非主动去切换,系统是不会自己修改BIOS启动项的。好象是在安装时会自动修改BIOS启动项。

但OC启动mac系统后,如何在mac中修改BIOS启动项?我想思路还是在OC上,必须通过OC配置修改BIOS启动项。如果可行倒也是一条路。

但这有点多此一举。因为OC自己不提供设置切换默认操作系统的办法,反而去修改BIOS中的启动项顺序,脱裤子放P了哈哈。

最近啃了手册,发现一些方法。
手册上提到了boot-path 这个值可以设置,试了,手册写的与实际不符,晕。晚几天再谈。
手册版本是OC1.04, 我的OC是1.03,不会是这么巧吧。
还有一些老方法,还没有试。在新OC下这些老法子的选项都没了,不知道管不管用。

OC进化太快,变的也很快,总之,这样无显示器远程切换系统的方法,目前还没有。

killwintel 发表于 2025-1-23 00:45

本帖最后由 killwintel 于 2025-1-23 00:48 编辑

当在OC显示操作系统时,使用Ctrl+Entry设置默认启动操作系统时,nvram -p 命令也没有显示什么与boot有关的参数(OC之ExposeSensitiveData=7).看起来OC没有使用NVRAM保存这 个信息么?待查,我猜没有。或许ExposeSensitiveData=15能有更多nvram参数显示。


但在Macos 的启动磁盘 选中默认为macos自己后,NVRAM里多出了2项:efi-boot-deviceefi-boot-device-data。
很明显这个就是mac写入nvram的默认启动磁盘(默认操作系统)。可惜数据乱码,是加密的。

而OC默认情况下,是直接启动这个macos选中的磁盘。
但如果不在macos中选择启动磁盘,就没有这个变量。同时也就让OC摆脱了被macos附身的魔咒。可以根据OC自身特性做出切换默认操作系统。

简单写下,明天再实践:
第一步 在macos中绝对不能选择启动磁盘,谁默认启动,这个活交给OC 。
第二步,利用OC功能,Ctrl+Entry设置默认启动的系统,比如windows.
第三步,利用手册页PickerMode中提到的bootApple功能,快捷键X直接进入macOS系统。

虽然还需要人工操作才能完成,但我想有了摆脱macos启动磁盘选择,把方法交给OC后,再使用boot-path功能,应该就可以完成远程切换系统无需人工干预的大计了。

思路对了,后面就简单了

killwintel 发表于 2025-1-23 13:28

最终结局不是大圆满,没有实现远程无参与的无缝切换系统。
实现了99%吧。

最终效果:
双硬盘双系统,OC103引导,开机OC默认进win11;在OC启动时按住X键可进入macos 。

简单要点:
利用了PickerMode特性,选Builtin 。
解释一下,选中Builtin而放弃ShowPicker,开机OC默认操作是,启动选择器按照 启动磁盘(macOS) 偏好设置中指定的方式加载默认的启动项。这里绝招是不能在macos系统中设置启动磁盘,如果设置了就清空nvram可解决。
如果不清空,nvram里保存的启动磁盘数据会一直影响OC,让人迷惑。原因下面再说。
如果没有设置启动磁盘,OC就按照自己的逻辑处理默认操作系统,没错,就是用Ctrl+Entry 选中的那个(windows).

这里,OC启动时如果检测到X键被按下,就会进入另一个操作(同时放弃默认操作系统windows):
启动到第一个找到的 Apple 操作系统,除非 Apple 已经默认选择了操作系统。
这里的关键,macos系统如果选择了启动磁盘,即使按了X键,也会进入启动磁盘的操作系统。无论这个操作系统是mac还是其他。这会让人迷惑。

总之,不使用启动磁盘,就不会在nvram中留下相关启动数据,就不会影响OC自己的启动逻辑。就可以利用OC自己的启动逻辑完成切换系统。
如果使用了启动磁盘,就得同时考虑OC与macos的双重选择逻辑,那只能祝好运了。

结贴。期望未来有办法解决100%

killwintel 发表于 2025-1-23 21:41

supermage 发表于 2025-1-21 16:23
之前一直用的这个,win直接启动切换Mac,现在MAC单系统了,这玩意也好久没用了~
...

感谢兄弟。
在win11下使用这个小程序确实能够选择启动磁盘,重启后自动启动macos .

在macOS中用nvram -p 查看,明显多了这两项:
efi-boot-device (明码)
efi-boot-device-data (乱码)。

说明小程序写入nvram 启动磁盘。

这个程序并没有改变我上面的最终结果:
无论 启动磁盘 被设置为win11 还是 macOS ,并不影响我在OC启动时 按下 X 键后 进入macos 。与我上面理解逻辑有误,但或许这才是真相,也只是或许。
还有一种可能,就是真正的bootcamp与macos配合的好,导致即使X键也会进入“启动磁盘”的系统。但我这双硬盘独立EFI分区,并且是UEFI引导的不是bootcamp下那种传统引导,也安装不了原配bootcamp,所以歪打正着。

现在实操,发现逻辑如下:
即使 启动磁盘 被写入nvram 并被OC 看到,但OC只是会在默认状态下选择 “启动磁盘” 的系统。当我按下X键时,已经不是默认状态了。所以OC放弃已经存在的“启动磁盘国”默认系统,选择了X键后的处理方式,即启动第一个发现的apple系统。

实操逻辑与官方手册逻辑有冲突,但我这里也不是标准的官方bootcamp切换,无论什么原因,此时可以说100%完成了远程切换双系统的诉求。

同时也增加了一个X键随时进入macos系统的选择(在家的话还是X键方便)。

感谢supermage兄弟。
完美!快哉!

所谓默认,是在无人干预的OC启动状态(无键盘鼠标输入)

此时OC 的ShowPicker = false ; PickerMode = Builtin ;

killwintel 发表于 2025-1-23 22:04

实操与官方逻辑的冲突,在找到英文官方103版本后解决了。
都是中文手册惹的货,估计是前几年机器翻译的水平差。

原文是:
BootApple — this options performs booting to the first Apple operating system found unless the chosen default operating system is one from Apple. Hold the X key down to choose this option.
现在的翻译:
BootApple——此选项执行启动到第一个发现的Apple操作系统,除非所选的默认操作系统是来自Apple的操作系统。按住X键来选择此选项。

这个解释是正确的。
如果默认选择的是非苹果操作系统,按X会导致第一个被发现的macos被启动。


其实这个默认,分为两个意思。
一个是OC本身的默认操作系统,用Ctrl+Entry选择的。
另一个是苹果的默认“启动磁盘”,这个保存在nvram中,并且macos有切换功能,win下bootcamp也有切换功能,可惜苹果搞的安装bootcamp比装系统还难(对非标准安装的操作系统)。

从PickerMode看,OC是考虑了这两种默认的各种组合,采用了现在的处理模式。

如果没有“启动磁盘”的选择,那就只能是我上面说的99%那一种方法了,只能使用X键解决。
但上面朋友的小程序,是通过“启动磁盘”解决远程无人值守切换双系统的。

西马 发表于 2025-1-27 17:05

本帖最后由 西马 于 2025-1-27 17:07 编辑

没楼主说的复杂。
以下是我多年前的使用方法:
不同的系统下手动修改config.plist里的配置就能实现,原理是控制opencore启动时候扫描哪一类磁盘分区,不选nfts就不会启动windows。
可以每次手动修改,也可以config.plist备份替换,当然也可以自己做个批处理替换。

起风了~ 发表于 2025-1-27 19:15

远程控制的话直接准备两个EFI,一个进win一个进mac,想进哪个系统就ESP分区改下名字,另一个重命名下就好了

killwintel 发表于 2025-3-15 23:59

https://bbs.pcbeta.com/viewthread-2036092-1-1.html

找到了官方经典解决方案,不再用野生方法了兄弟们

hmxm 发表于 2025-3-16 00:03

supermage 发表于 2025-1-22 21:46
你可以下载试试看,我是没有用bootcamp安装WIN就可以直接使用的,




感谢分享!!

killwintel 发表于 2025-3-16 19:51



看见其他兄弟提取的bootcamp.exe,去查了查apple 的服务,进而在system32系统目录找到了这个AppleControlPanel.exe ,从文件大小以及名称,文件版本提示信息看,就是这个文件。

双击可以运行,与网友 提供的一模一样。

只不过这个是匹配机型iMac20,1更完美。因为是我使用OCLP教程下载了官方bootcamp安装 后提取的。

为了这一个文件,下载安装一堆垃圾。提取出来,方便使用。



欢迎使用。
微软杀毒 软件测试无毒。因为此类软件需要修改NVRAM,有的被 提示有毒。NND,中过景友附件的招
页: [1]
查看完整版本: 双引导简单,但无显示器的双系统引导如何切换系统?