本教程针对于无 nvram 的机型,为了黑苹果,使用某些奇技淫巧来固化自己的 nvram。
本教程仅适用于Clover,OC用户请参照官方文档 LogoutHook 和 OpenCore(OC)引导模拟NVRAM
nvram 即非易失性随机存取储存器(Non-Volatile Random Access Memory),是一块 macOS 或者说白苹果机器用来存储一些希望能在关机之后保存下来少量数据的记忆体,这些数据包括亮度大小、音量大小等。但是对于很多Windows主机来说,主板上并没有 nvram 的设计。这导致了一些恼人的小问题,比如开机时亮度会变成最大值,而不是关机时设置的值,之类的。本教程将教你如何把 nvram 的内容保存在硬盘上,以便开机时读取。
声明:
这不是正确的保存 nvram 的方式,然而对于现代 macOS 来说,传统的 rc 脚本已经被弃用,所以我们需要将 rc 脚本改为 Launchd 的方式来在关机时调用保存 nvram 的脚本。这个方法对我来说可以用,但是不代表所有人都可以。如果你的黑苹果在使用了我的方法后出现了任何问题,本人概不负责。
本文根据 Reddit 社区的 The bodgers guide to getting NVRAM working 一文改编而来,原文需要一些上网技巧才能访问。
准备
- 一台黑苹果电脑💻
- Clover 引导
-
将 EmuVariableUefi-64.efi 放在检查nvram是否正常工作时不要放入此efi driverCLOVER/drivers64UEFI/
目录下(通常安装Clover的时候都会自动装上) - 打了 SSDT-PNLF 补丁并且可以正常调节亮度
如何检查你的 nvram 是否工作
打开终端,输入以下命令
sudo nvram foo=bar && sudo nvram -p | grep foo
此处回显应为
foo bar
接着重启你的电脑。
重启完成后再次打开终端,输入
sudo nvram -p | grep foo
如果你看到回显为
foo bar
那么你可以关掉这篇文章了。
如果你的回显是空的,证明你的 nvram 没有正常工作,而这正是导致你的电脑亮度/音量每次重启都会重置为最大值的原因。
此时再放入 EmuVariableUefi-64.efi
我们接着往下看吧!
建立 dump 脚本
由于 macOS 在很久以前就弃用了 rc.local 的启动项管理方式,转而使用 launchd 作为启动项管理,因此我们需要使用 launchd 来控制脚本的执行。
又由于 launchd 的启动命令不能太长,所以我们将要执行的命令放到一个脚本中。
sudo mount -rw /
sudo nano /usr/bin/dump-nvram.sh
在打开的文件中粘贴如下内容
#!/bin/bash
# This script is used to dump nvram while shutting down.
mount -rw /
nvram -xp | sed -n '/<key>csr-active-config<\/key>/,/<\/data>/d;p' | sed -n '/<key>fakesmc-key-.*<\/key>/,/<\/data>/d;p' > /nvram.plist
echo NVRAM Saved!"
然后 ^X 保存退出。接下来我们要赋予脚本以可执行权限
sudo chmod -x /usr/bin/dump-nvram.sh
sudo chown 0:0 /usr/bin/dump-nvram.sh
这样子我们的 dump 脚本就准备好啦!
其中的两句 sed 命令是用来删除掉 nvram 中一些不应该被保存的数据的。
这个脚本将会把 nvram 的变量内容以 xml 格式保存到 /nvram.plist
下。
配置 Launchd
输入命令
sudo nano /Library/LaunchDaemon/com.eric.nvram.dump.plist
在其中粘贴如下内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.eric.nvram.dump.plist</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/dump-nvram.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>LOG_PATH/boot-shutdown.log</string>
<key>StandardErrorPath</key>
<string>LOG_PATH/boot-shutdown.err</string>
</dict>
</plist>
然后同样地,^X 保存并退出。
再次测试 nvram
试试看把亮度调到一格,然后重启看看效果吧!
如果你的 nvram 没有正常工作
请再次检查是否安装了 EmuVariableUefi-64.efi
如果确定已经安装,请前往原帖,参照原帖的 Step 2 配置读取 /nvram.plist
的脚本。