我使用預置功能來建立自訂 Debian 10 x64 系統。一切都進展順利,除了在 Late_command 步驟期間,我正在執行 shell 腳本來配置和部署各種內容,並且我希望能夠存取實體音訊介面。
通常,我會使用以下命令來執行此操作pacmd list-sinks
,然後我可以輕鬆存取不同的聲卡名稱。但在這種情況下,使用chroot /target/ sudo -u device pacmd list-sinks
,我唯一看到的是一個名為 的虛擬介面audio_null
:
我還指出,安裝後系統重新啟動後,我就可以正常存取實體音訊介面。
(作為訊息,我需要訪問物理接口名稱來配置 Pulseaudio 預設設定檔中的預設接口,因為根文件系統在安裝後立即設定為唯讀,這是一次性執行此操作的最終時間)。
我認為這是預期的行為,因為安裝過程中不需要所有模組,然後可能會跳過一些所需的服務/配置步驟。
所以到目前為止我已經嘗試過:
- 手動(重新)加載一些聽起來相關的模組:
chroot /target/ sudo modprobe soundcore
- 重新載入 PulseAudio 服務(顯然尚未啟動)
- 從目標系統和外部列出 (
chroot /target/ pacmd list-sinks
,pacmd list-sinks
) 為了使前面的命令起作用,我需要重新啟動 Pulsechroot /target/ sudo -u device pulseaudio --start
,否則我會遇到錯誤訊息No PulseAudio daemon running or not running as session daemon
之前的嘗試都沒有成功,我已經沒有想法了。我可能錯過/誤解了一個明顯的概念,歡迎外部觀點。
即使這不是我的最終目的,將問題擴展到更廣泛的問題可能會更容易:如何在late_command
Debian 安裝步驟中播放聲音。
PS:就其價值而言,我目前正在部署到虛擬機,使用 VmWare 以及橋接到它的實體音效卡。
答案1
此階段仍在 chroot 中運行,因此不存在 systemd 實例,並且任何依賴後台運行的 systemd 的內容都會被破壞。
您也執行為安裝程式建置的核心映像,雖然它可能與安裝到目標系統中的核心映像相同,但通常並非如此,因為安裝程式會選擇以下位置提供的最新核心:安裝時間——因此系統上安裝的模組可能不適合目前運行的核心。
最好的選擇是尋找安裝程式核心的聲音模組(我相信這些模組存在於可選的安裝程式模組中以實現可訪問性)並使用 ALSA 工具來播放聲音。
答案2
這樣做可能會是作為在第一次啟動時運行的腳本要容易得多而不是從安裝程式內部。
也就是說,透過手動執行“從安裝媒體載入安裝程式元件”,然後正確選擇“sound-modules-5.10-8-amd64-di:聲音支援”(在Debian 11 中,但也可能在Debian 10 上)進行快速測試插入必要的核心模組。在 VirtualBox 上安裝 alsa-utils(目標內)是開箱即用的。運行aplay
也可以,前提是您首先使用該卡取消靜音amixer
。
Debian 11 所需的預種子行如下所示:
d-i preseed/early_command string anna-install sound-modules
(......還有其他方法,這對我有用)
然後您還需要確保目標上有 alsa-utils。如果您使用的是桌面環境等“任務”,則不需要任何東西。
d-i pkgsel/include string alsa-utils
最後,製造一些噪音(雙關語):
d-i preseed/late_command string in-target /bin/sh -c \
"amixer set Master 80% unmute; amixer set PCM 80% unmute; aplay /usr/share/sounds/alsa/Noise.wav"
aplay -l
借助有效的 alsa 堆疊,您可以透過執行或類似操作(目標內)輕鬆獲取硬體音訊設備列表,並稍後在設定腳本中使用該資訊。
雖然這可行,但我可以想像,使用不同的硬體設定來實現這一點確實很棘手。有些聲卡需要選擇額外的開關或輸出等modprobe
。