kein Ton wenn vdr-softhddevice aus dem Suspend-Modus erwacht.

  • Hallo,


    ich habe auf meinem Desktop-Rechner vdr-2.6.1 mit vdr-softhddevice-1.4.0 installiert. Beim Neustart des Rechners wird der VDR über die Dienste mit dem Parameter -s im Suspend-Modus mit gestartet.



    /etc/sysconfig/vdr-plugins.d/softhddevice.conf

    Code
    1. PLUGIN_OPTIONS="-s -g 1680x1050+200+100 -a pipewire -d :1.0 -v vdpau"


    Zum Aufwecken des VDR habe ich mir Skripte auf den Desktop gelegt, die folgendes machen:

    Code
    1. xhost +
    2. svdrpsend plug softhddevice deta
    3. svdrpsend plug softhddevice atta

    dann geht das vdr-softhddevice Fenster auf dem Gnome Desktop auf, ich habe dann aber keinen Ton



    Starte ich hingegen den vdr über ein Terminal-Fenster (ohne -s Parameter ), dann habe ich sauber einen Ton

    Code
    1. /usr/sbin/vdr -v /video -D1 -u vdr --vfat --userdump -s vdr-shutdown.sh --plugin='dvbhddevice' --plugin='softhddevice -g 1680x1050+100+100 -a pipewire -d :1 -v vdpau' --plugin='live --ip=127.0.0.1' --plugin='skinnopacity --iconpath=/usr/share/vdr/plugins/skinnopacity/icons/ --logopath=/usr/share/vdr/plugins/skinnopacity/logos/ --epgimages=/var/cache/vdr/plugins/skinnopacity/epgimages/' --plugin='tvguide --logopath=/usr/share/vdr/plugins/tvguide/channellogos/ --epgimages=/usr/share/vdr/plugins/tvguide/epgimages/ --iconpath=/usr/share/vdr/plugins/tvguide/epgimages/' --plugin='epgsearch -l /var/log/vdr/epgsearch.log' --plugin=streamdev-server --plugin=streamdev-client --plugin='markad --logocachedir=/var/lib/vdr/data/markad/logos --autologo=2' --plugin='burn -d /data/tmp --tempdir=/data/tmp --iso=/data/film --dvd=/dev/sr1'

    Alsa leitet dann den Ton sauber auf den Pipewire-Pulseaudio Server weiter.
    [Blocked Image: https://ibb.co/kmfgKPp]


    Was muss ich tun, damit ich einen Ton bekomme, wenn der VDR aus dem Suspend-Modus aufgeweckt wird ?

    Gruß MartinKG

    Fedora36 x86_64 Gnome Desktop vdr 2.6.1 mit vdr-softhddevice plugin.

    ViewSonic VX3276 HDMI-1 <------------> HDMI NVidia Geforce-gt-1030

    ViewSonic VX3276 HDMI-2 <------------> HDMI Technotrend S2-6400

  • Was schreibt der VDR denn ins Log? Klappt die Kommunikation mit pipewire? Ich könnte mir vorstellen, dass man da warten muss, bis die GUI-Session wieder betriebsbereit ist.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • die Kommunikation mit pipewire klappt nicht, nur wenn ich manuell im Terminal starte.


    Meldungen in der journal-log beim Start aus dem Terminal, dann ist alles ok.

    Code
    1.  Jul 09 15:45:23 fc36 vdr[9216]: audio/alsa: using device 'pipewire'


    journalctl -u vdr.service

    Gruß MartinKG

    Fedora36 x86_64 Gnome Desktop vdr 2.6.1 mit vdr-softhddevice plugin.

    ViewSonic VX3276 HDMI-1 <------------> HDMI NVidia Geforce-gt-1030

    ViewSonic VX3276 HDMI-2 <------------> HDMI Technotrend S2-6400

  • Ach so, dann hast du das Problem generell, wenn der VDR nicht im Kontext deiner Session läuft - da gibt es (wie bei Pulseaudio auch) einige Möglichkeiten - z.B. kann man Clients über TCP dran hängen: https://wiki.archlinux.org/tit…_computers_on_the_network - d.h. der VDR braucht eine eigene Pipewire-Instanz, die sich an die des Desktop-Users hängt.


    Alternativ sollte es auch gehen, wenn der VDR unter dem selben Nutzer wie dein Desktop-User läuft und du ihm die Umgebungsvariablen der Session gibst.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Den Pipewire-Pulseserver habe ich bereits eingerichtet, dazu habe ich für den Desktop Benutzer martin unter Gnome folgende Einstellungen vorgenommen:

    Ich beschreibe hier einfach mal, welche Einstellungen ich vorgenommen habe, vielleicht hilft es jemand anders mal.

    Code
    1. [root@fc36 ~]# cp /usr/share/pipewire/pipewire-pulse.conf /home/martin/.config/pipewire/


    Einstellung in der Datei /home/martin/.config/pipewire/pipewire-pulse.conf


    Setzen der Berechtigungen

    Code
    1. chown martin:martin /home/martin/.config/pipewire/pipewire-pulse.conf


    Umgebungsvariable PULSE_SERVER in /home/martin/.bashrc eintragen

    Code
    1. export PULSE_SERVER=tcp:127.0.0.1:4713


    Aktivieren der PULSE_SERVER Umgebungsvariable in der Sitzung

    Code
    1. [martin@fc36 ~]$ source ~/.bashrc


    Prüfen ob der Pulseaudio Server läuft


    Lauscht Pipewire-pulse auf den Port 4713

    Code
    1. [martin@fc36 ~]$ netstat -tulpen |grep 4713
    2. tcp 0 0 0.0.0.0:4713 0.0.0.0:* LISTEN 1000 38547 3582/pipewire-pulse
    3. tcp6 0 0 :::4713


    Aktive und notwendige pipewire-Dienste:

    Code
    1. [martin@fc36 ~]$ systemctl --user list-unit-files|grep wire
    2. pipewire-pulse.service enabled disabled
    3. pipewire-session-manager.service alias -
    4. pipewire.service disabled disabled
    5. wireplumber.service enabled enabled
    6. wireplumber@.service disabled disabled
    7. pipewire-pulse.socket enabled enabled
    8. pipewire.socket


    Einstellungen für den VDR-Benutzer im Homeverzeichnis

    Code
    1. [martin@fc36 ~]$ cat -v /var/lib/vdr/data/.pulse/client.conf
    2. autospawn = no
    3. default-server = 127.0.0.1

    Gruß MartinKG

    Fedora36 x86_64 Gnome Desktop vdr 2.6.1 mit vdr-softhddevice plugin.

    ViewSonic VX3276 HDMI-1 <------------> HDMI NVidia Geforce-gt-1030

    ViewSonic VX3276 HDMI-2 <------------> HDMI Technotrend S2-6400

    The post was edited 2 times, last by MartinKG ().

  • Ach so, dann hast du das Problem generell, wenn der VDR nicht im Kontext deiner Session läuft - da gibt es (wie bei Pulseaudio auch) einige Möglichkeiten - z.B. kann man Clients über TCP dran hängen: https://wiki.archlinux.org/tit…_computers_on_the_network - d.h. der VDR braucht eine eigene Pipewire-Instanz, die sich an die des Desktop-Users hängt.


    Alternativ sollte es auch gehen, wenn der VDR unter dem selben Nutzer wie dein Desktop-User läuft und du ihm die Umgebungsvariablen der Session gibst.

    Entschuldige wenn ich frage:


    1. Wie richte ich eine eigene Pipewire-Instanz für den VDR-Benutzer ein ? Sollte doch mit den Einstellungen, die ich bereits unter /home/martin/.config/pipewire/pipewire-pulse.conf vorgenommen habe erledigt sein, oder ?


    2. wenn ich den VDR mit dem Benutzer -u martin laufen lasse, wo gebe ich dann die Umgebungsvariablen der Session mit ?


    Ich habe mal im Homeverzeichnis des VDR-Benutzers eine .bash_profile angelegt, mich ausgeloggt und wieder eingeloggt, fkt. aber nicht.

    [root@fc36 ~]# cat -v /var/lib/vdr/data/.bash_profile

    Code
    1. export XDG_MENU_PREFIX=gnome-
    2. export XDG_SESSION_DESKTOP=gnome
    3. export XDG_SESSION_TYPE=x11
    4. export XDG_CURRENT_DESKTOP=GNOME
    5. export XDG_SESSION_CLASS=user
    6. export XDG_RUNTIME_DIR=/run/user/1000
    7. export XAUTHORITY=/run/user/1000/gdm/Xauthority

    wenn ich dann die gesetzen Umgebungsvariablen für den Benutzer vdr abfrage erhalte ich die folgende Meldung:


    Code
    1. [martin@fc36 ~]$ sudo -Hiu vdr env
    2. Dieses Konto ist momentan nicht verfügbar.

    irgendwie bekomme ich das nicht hin

    Gruß MartinKG

    Fedora36 x86_64 Gnome Desktop vdr 2.6.1 mit vdr-softhddevice plugin.

    ViewSonic VX3276 HDMI-1 <------------> HDMI NVidia Geforce-gt-1030

    ViewSonic VX3276 HDMI-2 <------------> HDMI Technotrend S2-6400

    The post was edited 3 times, last by MartinKG ().

  • Damit das auch außerhalb der PM sichtbar ist, hier noch mal:

    1. Wie richte ich eine eigene Pipewire-Instanz für den VDR-Benutzer ein ? Sollte doch mit den Einstellungen, die ich bereits unter /home/martin/.config/pipewire/pipewire-pulse.conf vorgenommen habe erledigt sein, oder ?

    Da braucht der User vdr noch eine laufende Sitzung, damit das alles klappt - es war etwas nervig das unter Fedora 36 in einer VM komplett nachzustellen (da fehlt ein Commit in einem Skript für wireplumber: alsa: use "obj_type" as a variable name to avoid shadowing lua's "type" function (c16e637c) · Commits · PipeWire / wireplumber · GitLab , sonst kann man keinen Ton mit pipewire ausgeben), und softhddevice gerne etwas mit Hardwarebeschleunigung hätte, aber grundsätzlich bin ich soweit gekommen, dass der VDR die Pulseaudio-Instanz des Desktop-Nutzers sieht und Ton ausgeben kann:


    Dazu erst mal die pipewire-Konfiguration aus /usr/share/pipewire/pipewire.conf  nach ~/.config/pipewire/pipewire.conf für den Desktop-Nutzer kopieren und dafür sorgen, dass das das module-native-protocol-tcp geladen wird und Verbindungen von 127.0.0.1 ohne Cookie akzeptiert- also am Ende der Datei folgendes setzen:

    Code
    1. # [...]
    2. context.exec = [
    3. { path = "/usr/bin/pactl" args = "load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1" }
    4. ]

    Nach einem systemctl --user restart pipewire.service pipewire-pulse.service sollte man sich mit pipewire-pulse verbinden können:


    Dann sagen wir dem VDR, dass er das alsa-Plugin von pulseaudio nutzen soll (ich habe nicht ausprobiert, ob die Vorgabe-Konfiguration reicht, die für pipewire nach /etc/alsa/conf.d/ installiert wird, sondern das einfach von yaVDR übernommen):

    Für die Sitzung brauchen wir ein Skript, das endlos läuft

    Code: /var/lib/vdr/data/.config/headless-session
    1. while :
    2. do
    3. sleep infinity
    4. done

    Und eine Systemd-Unit, die es mit Login startet:

    Damit das beim Start geladen wird, muss man die Unit noch aktivieren: sudo systemctl enable headless-session@vdr.service

    Und damit der VDR versucht mit dem richtigen Server zu reden, geben wir ihm noch zwei Umgebungsvariablen in er /etc/sysconfig/vdr mit:

    Code
    1. export XDG_RUNTIME_DIR=/run/user/976/ # ich weiß nicht, nach welchen Kriterien der User vdr unter Fedora angelegt wird, ggf. erst mit "id vdr" nachsehen, welche UID der User vdr hat
    2. export PULSE_SERVER=tcp:127.0.0.1

    softhddevice würde ich tendenziell eher mit -D als mit -s starten, weil es dann unabhängig von den Ressourcen des X-Servers ist, aber Hauptsache es funktioniert.


    Damit sollte der VDR Ton ausgeben können.

    2. wenn ich den VDR mit dem Benutzer -u martin laufen lasse, wo gebe ich dann die Umgebungsvariablen der Session mit ?

    Die können in der /etc/sysconfig/vdr definiert werden - die Datei wird von der /usr/sbin/runvdr gesourced.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Damit das auch außerhalb der PM sichtbar ist, hier noch mal:

       


    ....

    Und eine Systemd-Unit, die es mit Login startet:

    Damit das beim Start geladen wird, muss man die Unit noch aktivieren: sudo systemctl enable headless-session@vdr.service

    ....


    Danke für die ausführlich Anleitung, TOP. Werde ich am Wochenende mal testen.


    Das Systemd Skript heißt dann sicherlich korrekt headless-session@vdr.service

    und nicht headless-session@.service ?


    Das @-Symbol steht für spezielle Dienste, Sockets und andere Einheiten,´

    in denen mehrere Instanzen ausgeführt werden können.

    Gruß MartinKG

    Fedora36 x86_64 Gnome Desktop vdr 2.6.1 mit vdr-softhddevice plugin.

    ViewSonic VX3276 HDMI-1 <------------> HDMI NVidia Geforce-gt-1030

    ViewSonic VX3276 HDMI-2 <------------> HDMI Technotrend S2-6400

  • Das Systemd Skript heißt dann sicherlich korrekt headless-session@vdr.service

    und nicht headless-session@.service ?

    Das darf headless-session@.service heißen, der Teil hinter dem @ wird erst beim Aktivieren eingefügt - Systemd ersetzt dann das %i durch vdr.

    Das @-Symbol steht für spezielle Dienste, Sockets und andere Einheiten,´

    in denen mehrere Instanzen ausgeführt werden können.

    Genau, so wie die Unit geschrieben ist, könnte man da auch noch zusätzliche Sessions für andere Nutzer starten (z.B. wenn man zusätzlich eine mpd-Instanz hat, die als Systemdienst läuft und die ebenfalls Zugriff auf pulseaudio/pipewire in der Desktop-Session haben soll) - die Unit wird dann für einen bestimmten User (in dem Fall hier vdr) aktiviert und ausgeführt.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)