Ich verwende die Voreinstellungsfunktion, um ein benutzerdefiniertes Debian 10 x64-System zu gestalten. Alles läuft gut, außer dass ich während des late_command-Schritts ein Shell-Skript ausführe, um verschiedene Dinge zu konfigurieren und bereitzustellen, und ich möchte auf die physischen Audioschnittstellen zugreifen können.
Normalerweise mache ich das mit pacmd list-sinks
und dann kann ich einfach auf die Namen der verschiedenen Audiokarten zugreifen. Aber in diesem Fall chroot /target/ sudo -u device pacmd list-sinks
sehe ich bei Verwendung nur eine Dummy-Schnittstelle mit dem Namen audio_null
:
Ich stelle außerdem klar, dass ich, sobald das System nach der Installation neu startet, ganz normal auf die physische Audioschnittstelle zugreifen kann.
(Zur Information: Ich muss auf den Namen der physischen Schnittstelle zugreifen, um die Standardschnittstelle im Pulseaudio-Standardprofil zu konfigurieren, da das Root-Dateisystem direkt nach der Installation auf schreibgeschützt gesetzt wird. Dies ist der ultimative Zeitpunkt, dies ein für alle Mal zu tun.)
Ich nehme an, dass es sich um ein erwartetes Verhalten handelt, da bei einer Installation nicht alle Module erforderlich sind und daher einige erforderliche Dienste/Konfigurationsschritte übersprungen werden könnten.
Also, was ich bisher versucht habe:
- Laden Sie einige Module, die relevant erscheinen, manuell (neu):
chroot /target/ sudo modprobe soundcore
- PulseAudio-Dienst neu laden (der anscheinend noch nicht gestartet wurde)
- Auflistung von und außerhalb des Zielsystems (
chroot /target/ pacmd list-sinks
,pacmd list-sinks
) Damit die vorherigen Befehle funktionieren, musste ich Pulse neu starten,chroot /target/ sudo -u device pulseaudio --start
ohne dass ich eine Fehlermeldung erhieltNo PulseAudio daemon running or not running as session daemon
Keiner der vorherigen Versuche war erfolgreich und mir gehen die Ideen aus. Wahrscheinlich habe ich ein offensichtliches Konzept übersehen/missverstanden und eine externe Sichtweise wäre willkommen.
Auch wenn dies nicht mein endgültiges Ziel ist, ist es möglicherweise einfacher, das Problem auf ein umfassenderes Problem zusammenzufassen: Wie spielt man während des late_command
Schritts einer Debian-Installation einen Ton ab?
PS: Ich stelle derzeit auf einer virtuellen Maschine bereit, verwende VmWare und eine damit verbundene physische Soundkarte.
Antwort1
Diese Phase wird noch in einem Chroot-Modus ausgeführt, es ist also keine Systemd-Instanz vorhanden und alles, was von im Hintergrund ausgeführtem Systemd abhängt, ist defekt.
Sie führen außerdem ein Kernel-Image aus, das für das Installationsprogramm erstellt wurde. Dieses kann zwar mit dem identisch sein, das auf dem Zielsystem installiert wurde. Dies ist jedoch häufig nicht der Fall, da das Installationsprogramm den aktuellsten Kernel auswählt, der zum Installationszeitpunkt verfügbar ist. Daher passen die auf dem System installierten Module wahrscheinlich nicht zum aktuell ausgeführten Kernel.
Am besten suchen Sie nach Soundmodulen für den Installationskernel (ich glaube, diese sind in einem optionalen Installationsmodul für die Zugänglichkeit vorhanden) und verwenden ALSA-Tools zum Abspielen des Sounds.
Antwort2
Dies wäre wahrscheinlichviel einfacher als ein Skript, das beim ersten Booten ausgeführt wirdund nicht direkt im Installationsprogramm.
Ein kurzer Test, bei dem Sie manuell „Installerkomponenten vom Installationsmedium laden“ ausführen und dann „sound-modules-5.10-8-amd64-di: Soundunterstützung“ auswählen (in Debian 11, aber wahrscheinlich auch in Debian 10), fügt die erforderlichen Kernelmodule korrekt ein. Die Installation von alsa-utils (im Ziel) funktioniert auf VirtualBox sofort. Das Ausführen aplay
funktioniert auch, vorausgesetzt, Sie schalten die Karte amixer
zuerst mit stumm.
Die für Debian 11 erforderliche Preseed-Zeile würde folgendermaßen aussehen:
d-i preseed/early_command string anna-install sound-modules
(...es gibt andere Möglichkeiten, diese hat bei mir funktioniert)
Dann müssen Sie auch sicherstellen, dass Sie alsa-utils auf dem Ziel haben. Wenn Sie eine „Aufgabe“ wie eine Desktop-Umgebung usw. verwenden, ist nichts erforderlich. Wenn es sich jedoch um ein reines System handelt, benötigen Sie:
d-i pkgsel/include string alsa-utils
Und zum Schluss noch etwas Lärm (Wortspiel beabsichtigt):
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"
Mit einem funktionierenden Alsa-Stack können Sie problemlos eine Liste der Hardware-Audiogeräte abrufen, indem Sie dies aplay -l
oder Ähnliches (im Ziel) tun und diese Informationen später in Ihrem Setup-Skript verwenden.
Obwohl das funktionieren könnte, kann ich mir vorstellen, dass es mit unterschiedlichen Hardware-Setups wirklich schwierig wäre, das richtig hinzubekommen. Manche Soundkarten würden zusätzliche Schalter oder Ausgänge benötigen, die ausgewählt werden müssen usw. Außerdem modprobe
könnten die Optionen im endgültigen System erheblich von der DI-Umgebung abweichen und Kartenindizes usw. beeinflussen. Viel Spaß beim Hacken!