Linux - 使用 efivar 修改 efi var

Linux - 使用 efivar 修改 efi var

我在 MacBook Air 2018 硬件上安装了单引导 Kali Linux。

解决了一些问题以使所有工作正常后,我遇到了麻烦:

我正在尝试在启动前禁用启动声音。 MacBook 的典型声音。

我在Apple文档中发现可以修改从终端运行的声音

sudo nvram SystemAudioVolume=%80

nvram命令在 Linux 上不可用;然而,还有另一个程序称为nvramtool.

阅读 mannvramtool可以让所有 coreboot 参数运行,nvramtool -a但命令的输出是:

nvramtool: coreboot table not found. coreboot does not appear to be
installed on this system.

因此,经过一番调查后,我发现了一个名为 的程序,efivar它允许修改 EFI 变量。

键入efivar -l | grep -i SystemAudioVolume我得到 Apple ( ) 指示的变量,SystemAudioVolume其值如下:

7c436110-ab2a-4bbb-a880-fe41995c9f82-SystemAudioVolume

现在输入,

efivar --print --name 7c436110-ab2a-4bbb-a880-fe41995c9f82-SystemAudioVolume

我得到这样的输出:

     GUID: 7c436110-ab2a-4bbb-a880-fe41995c9f82
     Name: "SystemAudioVolume"
     Attributes:
         Non-Volatile
         Boot Service Access
         Runtime Service Access
     Value:
     00000000  69        |i        |

编辑
我尝试创建 macOS Mojave 的可启动 USB 闪存盘。
打开Mac,插入密钥并按住“alt我可以”进入安装过程,从那里我可以获得一个实例,这样我就可以尝试从那里Terminal.app运行。nvram但我认为,正如苹果文档所建议的那样,需要管理员权限。
尝试执行nvram -p我得到所有变量的列表,执行nvram -p | grep -i SystemAudioVolume我得到

7c436110-ab2a-4bbb-a880-fe41995c9f82-SystemAudioVolume=i

打字nvram SystemAudioVolume=%80并重新运行nvram -p | grep -i SystemAudioVolume我得到

7c436110-ab2a-4bbb-a880-fe41995c9f82-SystemAudioVolume=%80

但重新启动后声音仍然存在并在安装过程中返回运行nvram -p | grep -i SystemAudioVolume我再次得到

7c436110-ab2a-4bbb-a880-fe41995c9f82-SystemAudioVolume=i

你知道如何修改这个值吗? (如果可能的话)

附言。
我无法创建 TAGefivar因为我还不到300。但我认为应该加上。

答案1

根据这篇文章,在 Linux 中禁用 MacBook 启动声音,

一些互联网来源表明,从 Linux 写入 EFI 变量有时可能会损坏您的 Apple 固件。我没有进一步研究这个。如果您碰巧知道如何在 Linux 下成功写入这些变量,请在评论中告知大家(以防 OS X 恢复模式丢失,您知道)。

他们的解决方案是简单地nvram通过以下命令禁用声音:

nvram SystemAudioVolume=%00

他们还使用恢复模式通过按住Cmd+ Option+来执行此操作R

printf另一种选择是使用博客评论中讨论的方法简单地写入变量。

注意:此方法有潜在危险,建议先使用前一种方法。

# Ensure efivars are mounted
mount | grep efivars
efivarfs on /sys/firmware/efi/efivars type efivarfs (rw,relatime)

# Remove immutable bit, allows modification
chattr -i /sys/firmware/efi/efivars/SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82

# Set volume to 00
printf "\x07\x00\x00\x00\x00" > /sys/firmware/efi/efivars/SystemAudioVolume-7c436110-ab2a-4bbb-a880-fe41995c9f82

# Display new value
efivar -n 7c436110-ab2a-4bbb-a880-fe41995c9f82-SystemAudioVolume -p
GUID: 7c436110-ab2a-4bbb-a880-fe41995c9f82
Name: "SystemAudioVolume"
Attributes:
    Non-Volatile
    Boot Service Access
    Runtime Service Access
Value:
00000000  00

相关内容