Ich verwende Pulseaudio, um Audio zwischen einem Desktop und einem Raspberry Pi zu teilen.
Pulseaudio benötigt jedoch dbus und dbus benötigt eine X-Sitzung. Ohne grafische Sitzung kann Pulseaudio nur im Systemmodus ausgeführt werden, der offiziell nicht empfohlen wird.
Abgesehen von einem Himbeer-Pi sind die Kosten für eine X-Sitzung dramatisch hoch, daher möchte ich sie auf die effizienteste (kostengünstigste) Weise loswerden.
Wie kann ich die kleinste X-Sitzung starten, in die Pulseaudio eintreten soll?
x11
pulseaudio
kursus
quelle
quelle
Antworten:
Sie können Xvfb verwenden , einen X-Server mit einem virtuellen Framebuffer, dh einen X-Server, der nur im Arbeitsspeicher angezeigt wird und keine Verbindung zu Hardware herstellt. Sie müssen auf diesem Server keinen Client ausführen, den Sie nicht möchten, insbesondere keine Desktop-Umgebung oder keinen Fenstermanager.
Danach:
Nach dem Start müssen Sie etwas warten, bis
Xvfb
das Display verfügbar ist. Mit können Siexinit
einen X-Server starten und dann Clients starten, wenn dieser bereit ist. Fügen Sie die Befehle, die Sie ausführen möchten, in ein Skript ein (beachten Sie, dass der X-Server beim Beenden des Skripts beendet wird):Starten Sie den virtuellen X-Server mit
Wenn Sie es beim Booten ausführen möchten, können Sie es von cron aus starten. Führen Sie
crontab -e
(als Benutzer, nicht als Root) und fügen Sie die Zeile hinzuWenn Sie diese Sitzung beenden möchten, beenden Sie den
xinit
Prozess.quelle
@reboot
. Auch alanc hat recht, es muss eine Verzögerung nach dem Start von Xvfb geben, und xinit löst dieses Problem. Siehe meine Bearbeitung.Ich hatte gestern das gleiche Problem, mit Pulse Audio für Raspberrypi 0 W mit DBus in einer Umgebung ohne Kopf erstellen mit Yocto ohne X11 und ohne Systemd, müssen Sie Dbus ausführen und exportieren, bevor Sie Pulseaudio ausführen.
Aktivieren Sie in der Datei etc / pulse / client.conf die Option allow-autospawn-for-root = yes
Führen
pulseaudio -v
Sie den Befehl aus, um zu überprüfen, ob in Ihrer Konfiguration ein anderes Problem vorliegt. Verwenden Sie den--system
Schalter nicht , da er nicht korrekt ist.quelle
Es gibt eine elegantere Methode, um zu verhindern, dass das Skript EOF erreicht, als mit
sleep 99999999
!Verwenden Sie
sleep infinity
stattdessen. Es macht was es sagt ...quelle