Pulseaudio-Server nicht erreichbar von einem start script

warti

Lt. Junior Grade
Registriert
Juli 2005
Beiträge
474
Hallo,
ich habe mir ein kleines shell script geschrieben welches sprache aufzeichnet und an Google zum Übersetzen schickt.
Wenn ich das Programm als user "pi" von Hand starte funtkioniert alles.

Ich habe in das shell script "pactl info" eingebaut. Das sind die Ausgaben wenn es von Hand gestartet wird:
Code:
Server-Zeichenkette: /run/user/1000/pulse/native
Bibliotheks-Protokollversion: 32
Server-Protokollversion: 32
ist lokal: ja
Client-Index: 1
Tile-Größe: 65496
Name des Benutzers: pi
Rechnername: raspberrypi
Name des Servers: pulseaudio
Version des Servers: 12.2
Standard-Abtastwert-Angabe: s32le 8ch 96000Hz
Standard-Kanal-Zuordnung: front-left,front-left-of-center,front-center,front-right,front-right-of-center,rear-center,aux0,aux1
Standard-Ziel: alsa_output.platform-soc_audio.analog-mono
Standard-Quelle: alsa_output.platform-soc_audio.analog-mono.monitor
Cookie: 7b82:a57d
.....

und wenn ich das Script via systemd starte kann es nicht auf "pulseaudio" zugreifen.
Code:
Verbindungsfehler: Verbindung verweigert
pa_context_new() fehlgeschlagen: Verbindung verweigert

system.service
Code:
[Unit]
Description=Start speechRecognition Service

[Service]
User=pi
WorkingDirectory=/opt/speech
Type=exec
ExecStart=/opt/speech/speechRecognition.sh
Restart=on-failure
RestartSec=25s
[Install]
WantedBy=multi-user.target

Ich habe die groups überpüft passt; pulseaudio server läuft, das Verzeichnis /home/pi/.config/pusle gelöscht ....
Keine Ahnung mehr - hat jemand eine Idee?
 
Pulseaudio laeuft idR. als user-, nicht als Systemdienst. Du kannst also entweder PA auf System umstellen oder machst deinen Dienst zu einem user unit. Im Moment ist es ein System-unit, der auf die Rechte des users beschraenkt ist. Bei einem user unit musst du noch beachten, dass diese idR. nur laufen, wenn der user tatsaechlich auch angemeldet ist. Um das zu beheben, kannst du lingering aktivieren. Noch ein Hinweis: ein user-unit kann nicht von einem system-target (wie multi-user.target) abhaengen.

user-units kommen in /etc/systemd/user/ oder ~/.config/systemd/user/ und an die systemctl Befehle haengst du einfach ein --user an.

Falls es nicht klappt, melde dich nochmal.
 
  • Gefällt mir
Reaktionen: warti
... ich habs selbst herausgefunden und wollte gerade das Thema schliesen.
Gemein: Wenn man sich al pi einloggt sieht ma ja den pulseaudio Prozess.
Wenn der systemd-service startet wird pulseaudio nicht gestartet, dies geschieht nur beim "Einloggen".
Mein einfacher workaround: In dem Shell-Script pulseauido --start aufrufen ;-)

Vielen Dank!:)

Edit: Klasse, dass es hier so schnell Hilfe gibt, auch bei sehr speziellen Fragen..
 
  • Gefällt mir
Reaktionen: flmr
Dann war ich wohl zu schnell :p

Mit dem angesprochenem lingering braeuchtest du den workaround nicht. Kannst du dir ja bei Gelegenheit vielleicht noch anschauen
 
.. ich hab gerade einige Stunden gekämpft - mir reicht es aktuell ;)
 
Zurück
Oben