Linux

Linux - 使用 efivar 修改 efi var

  • August 31, 2019

我在 MacBook Air 2018 硬體上安裝了單啟動 Kali Linux。

在解決了一些問題以使所有工作正常後,我遇到了麻煩:

我正在嘗試在啟動前禁用啟動聲音。MacBook 的典型聲音。

我在 Apple 文件上發現可以修改從終端執行的聲音

sudo nvram SystemAudioVolume=%80

nvram命令在 Linux 上不可用;但是,還有另一個名為nvramtool.

閱讀man of nvramtoolit’s possible to get all coreboot parameters running 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從那裡執行。但我認為,正如 Apple 文件所建議的那樣,需要管理員權限。

嘗試執行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

你知道如何修改值嗎?(如果可能的話)

PS。

我無法創建 TAG,***efivar***因為我不到 300。但我認為應該添加它。

根據這篇文章,在 Linux 中禁用 MacBook 啟動聲音

一些 Internet 來源表明,從 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

引用自:https://unix.stackexchange.com/questions/536436