Ubuntu 20.04: Power Button Problem

  • hi,


    ich verwende Ubuntu 20.04 auf einem Intel NUC NUC8i3BEH2.


    Auf dem System läuft eine Installation des VDR.


    Der VDR wird per Fernbedienung über LIRC gesteuert.


    Bis zu Ubuntu v18.04.4 wurde der Power Button der Fernbedienung durch Ubuntu nicht ausgewertet. D.h. bei Druck auf den Power Button der FB hat der LIRC dem VDR ein Signal gesendet und der VDR-Prozess hat dann das Herunterfahren des NUC entsprechend vorhandener Regeln (z.B. Aufnahme läuft -> es wird später heruntergefahren) initiiert.


    Seit 20.04 wird das System beim Drücken des Power Button in einen Sleep State geschickt, d.h. Ubuntu wertet jetzt diesen Tastendruck aus und initiiert den Schlafzustand.


    Wie kann ich Ubuntu 20.04 das abgewöhnen?


    Was nicht ausreicht, ist:


    {{{#!code bash

    systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

    }}}


    Grund: Durch das maskieren der Targets wird zwar verhindert, dass der NUC in den Sleep State gesetzt wird, jedoch fährt der Rechner dann initiiert durch Ubuntu runter und die vorhandenen Regeln des VDR ("Aufnahme läuft -> später herunterfahren") werden nicht beachtet.....

    --------------------------------------------------------------------------------------------------------------------------------------------------

    BM2LTS im VDR-Portal   http://www.bm2lts.de   http://www.sc-schulze.de

    --------------------------------------------------------------------------------------------------------------------------------------------------

    Empfang: Octopus Net S2 max (8 Tuner) + Octopus Net S2 max (8 Tuner) + Netceiver (2x DVB-s2dual)

    Kopfstation: Virtuelle Maschine mit BM2LTS v3.4.XX

    Clients: NUC10i5FNH2 -> BM2LTS v3.4.XX; FireTV4k mit Kodi u. VNSI-Plugin

    NAS: Aufnahmen u. Plex-Media

    --------------------------------------------------------------------------------------------------------------------------------------------------


  • Ich habe vdrpbd auf Ubuntu 20.04 installiert:

    Code
    root@BM2LTSR66Nuc64native:/home/vdrpbd-2.0.1# systemctl start vdrpbd.service 
    root@BM2LTSR66Nuc64native:/home/vdrpbd-2.0.1# systemctl enable vdrpbd.service 
    Created symlink /etc/systemd/system/multi-user.target.wants/vdrpbd.service → /etc/systemd/system/vdrpbd.service.
    root@BM2LTSR66Nuc64native:/home/vdrpbd-2.0.1#

    nach einem Neustart des NUC:

    sieht also ganz gut aus, der vdrpbd.service läuft.


    ABER:


    Bei Druck auf die Power-Taste der Fernbedienung wird der NUC dennoch in den Sleep gesetzt!

    --------------------------------------------------------------------------------------------------------------------------------------------------

    BM2LTS im VDR-Portal   http://www.bm2lts.de   http://www.sc-schulze.de

    --------------------------------------------------------------------------------------------------------------------------------------------------

    Empfang: Octopus Net S2 max (8 Tuner) + Octopus Net S2 max (8 Tuner) + Netceiver (2x DVB-s2dual)

    Kopfstation: Virtuelle Maschine mit BM2LTS v3.4.XX

    Clients: NUC10i5FNH2 -> BM2LTS v3.4.XX; FireTV4k mit Kodi u. VNSI-Plugin

    NAS: Aufnahmen u. Plex-Media

    --------------------------------------------------------------------------------------------------------------------------------------------------


    Einmal editiert, zuletzt von stschulze ()

  • Schau mal mit fuser nach, wer da auf das Device zugreift: fuser -v /dev/input/event0 - vermutlich ist es der X-Server, dann hilft es vdrpbd vor dem X-Server starten lassen oder dem X-Server zu sagen, dass er das Gerät nicht einbinden soll.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Code
    root@BM2LTSR66Nuc64native:~# fuser -v /dev/input/event0
                         BEN.        PID ZUGR.  BEFEHL
    /dev/input/event0:   root        470 f.... acpid
                         root        522 F.... systemd-logind
                         root        962 F.... Xorg


    der vdrpbd greif auf event2 zu .....


    Code
    root@BM2LTSR66Nuc64native:~# fuser -v /dev/input/event2
                         BEN.        PID ZUGR.  BEFEHL
    /dev/input/event2:   root        503 F.... systemd-logind
                         root        506 f.... vdrpbd
                         root        507 f.... acpid
                         root       1155 F.... Xorg

    wie sage ich dem X-Server, dass er das Device nicht einbinden soll?

    --------------------------------------------------------------------------------------------------------------------------------------------------

    BM2LTS im VDR-Portal   http://www.bm2lts.de   http://www.sc-schulze.de

    --------------------------------------------------------------------------------------------------------------------------------------------------

    Empfang: Octopus Net S2 max (8 Tuner) + Octopus Net S2 max (8 Tuner) + Netceiver (2x DVB-s2dual)

    Kopfstation: Virtuelle Maschine mit BM2LTS v3.4.XX

    Clients: NUC10i5FNH2 -> BM2LTS v3.4.XX; FireTV4k mit Kodi u. VNSI-Plugin

    NAS: Aufnahmen u. Plex-Media

    --------------------------------------------------------------------------------------------------------------------------------------------------


    3 Mal editiert, zuletzt von stschulze ()

  • ich komme der Sache näher ....


    wenn ich den Power-Button am NUC drücke reagiert der vdrpbd :

    Code
    May 10 15:01:58 BM2LTSR66Nuc64native vdrpbd[518]: Power key pressed. May 10 15:01:58 BM2LTSR66Nuc64native vdrpbd[518]: ConnectTCP: Connection refused at /usr/sbin/vdrpbd line 235.

    allerdings sieht es wohl so aus, dass der NUC über den eingebauten IR-Empfänger ein weiteres Device hat, welches bei Druck auf die Power Taste der FB (das läuft über LIRC) den NUC in den Schlafzustand versetzt ......

    --------------------------------------------------------------------------------------------------------------------------------------------------

    BM2LTS im VDR-Portal   http://www.bm2lts.de   http://www.sc-schulze.de

    --------------------------------------------------------------------------------------------------------------------------------------------------

    Empfang: Octopus Net S2 max (8 Tuner) + Octopus Net S2 max (8 Tuner) + Netceiver (2x DVB-s2dual)

    Kopfstation: Virtuelle Maschine mit BM2LTS v3.4.XX

    Clients: NUC10i5FNH2 -> BM2LTS v3.4.XX; FireTV4k mit Kodi u. VNSI-Plugin

    NAS: Aufnahmen u. Plex-Media

    --------------------------------------------------------------------------------------------------------------------------------------------------


  • vdrpbd versucht bereits exklusiven Zugriff auf das Device zu bekommen. Und es wird ja auch geloggt das eben das schiefgeht:


    Zitat

    Mai 10 13:54:12 BM2LTSR66Nuc64native vdrpbd[3810]: Failed to get exclusive access!


    Was mich eigentlich wundert...


    Aber Moment...


    Mach mal


    Code
    # systemctl stop acpid
    # systemctl disable acpid
  • das hat nichts gebracht .....


    wie bereits beschrieben ..... es gibt scheinbar zweites device (CIR ....powerbutton), welches reagiert und vom vdrpbd.service nicht kontrolliert wird .....

    --------------------------------------------------------------------------------------------------------------------------------------------------

    BM2LTS im VDR-Portal   http://www.bm2lts.de   http://www.sc-schulze.de

    --------------------------------------------------------------------------------------------------------------------------------------------------

    Empfang: Octopus Net S2 max (8 Tuner) + Octopus Net S2 max (8 Tuner) + Netceiver (2x DVB-s2dual)

    Kopfstation: Virtuelle Maschine mit BM2LTS v3.4.XX

    Clients: NUC10i5FNH2 -> BM2LTS v3.4.XX; FireTV4k mit Kodi u. VNSI-Plugin

    NAS: Aufnahmen u. Plex-Media

    --------------------------------------------------------------------------------------------------------------------------------------------------


    Einmal editiert, zuletzt von stschulze ()

  • Ja, das ist prinzipiell denkbar. Und ohne genaue Kennung des Devices auch schwer zu erkennen.


    Mach mal:

    Code
    ls -l /sys/devices/LNXSYSTM:00/LNXPWRBN:00


    Eigentlich braucht man den Pfad über /sys/devices der zu deinem "/dev/input0" geht. Und um dann beide zu locken müsste man wohl oder übel zwei Threads starten um auf beiden Devices zu lauschen.


    Das Problem, gerade mit dem VDR, ist eben das man dem X-Server gleichzeitig den Zugriff nehmen muss weil sonst genutzte Window-Manager ggf. die Taste auf "unerwünschte Art und Weise" auswerten. Was prinzipiell auch ausschließt einfach wahllos Devices zu binden.


    Wo wir wieder bei dem Thema sind das die Ausgabe beim VDR besch...eiden gemacht ist X(


    Wenn ich Kodi starte, dann wertet der den Power-Button ganz alleine aus. Kein Bedarf da irgend etwas zu machen.

  • Das Problem, gerade mit dem VDR, ist eben das man dem X-Server gleichzeitig den Zugriff nehmen muss weil sonst genutzte Window-Manager ggf. die Taste auf "unerwünschte Art und Weise" auswerten.

    Das lässt sich relativ einfach umsetzen - man setzt per udev-Regel z.B. sowas ENV{ID_INPUT.tags}="ignore-me" für die Input-Devices, die vom X-Server ignoriert werden sollen und fügt dann noch ein Snippet für die Xorg-Konfiguration ein:

    Code
    Section "InputClass"
        Identifier "exclude input devices"
        MatchTag   "ignore-me"
        Option     "Ignore"    "True"
    EndSection

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Power Button oder Power Management Probleme sind m.E. zwei Paar unterschiedliche Schuhe ... ?


    Titel mal der Thematik angepasst ... ?

    HowTo: APT pinning

  • evtl. hilf das hier weiter -> Input16 müsste es sein:


    --------------------------------------------------------------------------------------------------------------------------------------------------

    BM2LTS im VDR-Portal   http://www.bm2lts.de   http://www.sc-schulze.de

    --------------------------------------------------------------------------------------------------------------------------------------------------

    Empfang: Octopus Net S2 max (8 Tuner) + Octopus Net S2 max (8 Tuner) + Netceiver (2x DVB-s2dual)

    Kopfstation: Virtuelle Maschine mit BM2LTS v3.4.XX

    Clients: NUC10i5FNH2 -> BM2LTS v3.4.XX; FireTV4k mit Kodi u. VNSI-Plugin

    NAS: Aufnahmen u. Plex-Media

    --------------------------------------------------------------------------------------------------------------------------------------------------


  • Code
    input: Sleep Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input/input0
    ACPI: Sleep Button [SLPB]
    input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
    ACPI: Power Button [PWRB]
    input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
    ACPI: Power Button [PWRF]

    --------------------------------------------------------------------------------------------------------------------------------------------------

    BM2LTS im VDR-Portal   http://www.bm2lts.de   http://www.sc-schulze.de

    --------------------------------------------------------------------------------------------------------------------------------------------------

    Empfang: Octopus Net S2 max (8 Tuner) + Octopus Net S2 max (8 Tuner) + Netceiver (2x DVB-s2dual)

    Kopfstation: Virtuelle Maschine mit BM2LTS v3.4.XX

    Clients: NUC10i5FNH2 -> BM2LTS v3.4.XX; FireTV4k mit Kodi u. VNSI-Plugin

    NAS: Aufnahmen u. Plex-Media

    --------------------------------------------------------------------------------------------------------------------------------------------------


  • habe auf der FB den Power-Button gedrückt und folgendes über ACPI_listen bekommen:

    Code
    root@BM2LTSR66Nuc64native:~# acpi_listen 
    button/sleep SBTN 00000080 00000000 K

    dann legt sich der NUC schlafen .....erneuter Tastendruck auf Powertaste der FB:

    Code
    button/power PBTN 00000080 00000000

    jetzt ist die Box wieder da.....

    --------------------------------------------------------------------------------------------------------------------------------------------------

    BM2LTS im VDR-Portal   http://www.bm2lts.de   http://www.sc-schulze.de

    --------------------------------------------------------------------------------------------------------------------------------------------------

    Empfang: Octopus Net S2 max (8 Tuner) + Octopus Net S2 max (8 Tuner) + Netceiver (2x DVB-s2dual)

    Kopfstation: Virtuelle Maschine mit BM2LTS v3.4.XX

    Clients: NUC10i5FNH2 -> BM2LTS v3.4.XX; FireTV4k mit Kodi u. VNSI-Plugin

    NAS: Aufnahmen u. Plex-Media

    --------------------------------------------------------------------------------------------------------------------------------------------------


  • Bei Drücken des Powerbutton am NUC:


    Code
    root@BM2LTSR66Nuc64native:~# acpi_listen 
    button/power PBTN 00000080 00000000
    button/power LNXPWRBN:00 00000080 00000001

    --------------------------------------------------------------------------------------------------------------------------------------------------

    BM2LTS im VDR-Portal   http://www.bm2lts.de   http://www.sc-schulze.de

    --------------------------------------------------------------------------------------------------------------------------------------------------

    Empfang: Octopus Net S2 max (8 Tuner) + Octopus Net S2 max (8 Tuner) + Netceiver (2x DVB-s2dual)

    Kopfstation: Virtuelle Maschine mit BM2LTS v3.4.XX

    Clients: NUC10i5FNH2 -> BM2LTS v3.4.XX; FireTV4k mit Kodi u. VNSI-Plugin

    NAS: Aufnahmen u. Plex-Media

    --------------------------------------------------------------------------------------------------------------------------------------------------


  • Lösung:


    ACPI-Events für den Intel NUC NUC8i3BEH2 benutzen


    Umsetzung unter Ubuntu 20.04:


    1. "Ausschalten der Sleep-State Targets"

    Code
    systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

    2. ACPI-Daemon Konfigurieren


    /etc/default/acpid

    /etc/default/acpi-support

    3. ACPI-Event's erstellen


    Event ermitteln durch Tastendruck auf jeweilige Powertaste

    Code
    acpi_listen


    /etc/acpi/events/nuc-powerbutton

    Code
    event=button/power LNXPWRBN:00 00000080
    action=/etc/acpi/vdrpoweroff.sh

    /etc/acpi/events/remote_powerbutton

    Code
    event=button/sleep SBTN 00000080 00000000 K
    action=/etc/acpi/vdrpoweroff_null.sh

    /etc/acpi/events/remote_powerbutton2

    Code
    event=button/power PBTN 00000080 00000000
    action=/etc/acpi/vdrpoweroff.sh

    4. ACPI-Skript's erstellen


    /etc/acpi/vdrpoweroff.sh

    Bash
    #!/bin/sh
    # /etc/acpi/vdrpoweroff.sh
    
    /usr/sbin/svdrpsend.sh "HITK POWER" > /dev/null
    sleep 10


    /etc/acpi/vdrpoweroff_null.sh

    Bash
    #!/bin/sh
    # /etc/acpi/vdrpoweroff_null.sh
    
    /usr/sbin/svdrpsend.sh "HITK POWER" > /dev/null


    4. ACPI-Daemon neu starten und Status kontrollieren

    Code
    systemctl restart acpid
    
    systemctl status acpid


    Fertig.

    --------------------------------------------------------------------------------------------------------------------------------------------------

    BM2LTS im VDR-Portal   http://www.bm2lts.de   http://www.sc-schulze.de

    --------------------------------------------------------------------------------------------------------------------------------------------------

    Empfang: Octopus Net S2 max (8 Tuner) + Octopus Net S2 max (8 Tuner) + Netceiver (2x DVB-s2dual)

    Kopfstation: Virtuelle Maschine mit BM2LTS v3.4.XX

    Clients: NUC10i5FNH2 -> BM2LTS v3.4.XX; FireTV4k mit Kodi u. VNSI-Plugin

    NAS: Aufnahmen u. Plex-Media

    --------------------------------------------------------------------------------------------------------------------------------------------------


  • Ich glaube nicht das es "input16" ist. Da glaube ich eher das LIRC "drauf sitzt" und das da die IR-Codes kommuniziert werden.


    Es wird schon "input0" geblieben sein. So Kram der direkt auf dem Mainboard sitzt (vor allem wenn man ihn nicht mit "lsusb" sieht) wird sehr früh in der Boot-Folge initialisiert. Vermutlich besteht der CIR-Kram aus mehreren Devices, denn irgendwie startet der Rechner ja auch per Fernbedienung. Das geht aber ohne Betriebssystem. Schon denkbar das die eine Taste von einem dedizierten Controller behandelt wird und der Rest dann von einem zweiten.


    Füge mal vor dieser Zeile:

    https://projects.vdr-developer…rpbd.git/tree/vdrpbd#n201


    noch folgendes ein:

    /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/input


    Weil der vdrpbd-Daemon ein Script ist kannst du eine Sicherheitskopie der Version auf deinem System machen und dann direkt im installierten vdrpbd editieren.


    Dann vdrpbd neu starten oder ggf. mit dem gepatchten vdrpbd die Kiste mal rebooten.


    Wenn das geht, dann ist der Power-Button vorne am Gerät aber erstmal nicht mehr abgefangen. Das kann natürlich nicht so bleiben. Ich würde aber gerne wissen ob das überhaupt im Prinzip funktioniert bevor ich auf mehrere Threads umstelle.


    Es wäre wohl auch nicht falsch diesen hier abzufangen: "ACPI: Power Button [PWRB]" aber meine Vermutung ist, dass wir das Event nie bekommen wenn wir schaffen den Sleep zu verhindern.

  • Lösung:


    ACPI-Events für den Intel NUC NUC8i3BEH2 benutzen



    Kann man machen, muss man aber nicht. Eigentlich war "vdrpbd" als "fire and forget"-Lösung gedacht um eben acpid nicht mehr konfigurieren zu müssen. Der sollte auf einem VDR-System dann eigentlich gar nicht mehr laufen.


    Wenn ich aber keine weiteren Infos mehr bekomme ist das Thema hier für mich durch. Selber habe ich kein CIR und VDR im Frontend nutze ich schon seit Jahren nicht mehr.


    Wie schon erwähnt: Mit Kodi geht das "einfach so". Der schaltet für die Tasten selber einen "inhibit" und behandelt die dann selber.

  • Folgenden Eintrag habe ich in meinem Log-Buch gefunden. Ich meine, dass ich damals den "Power-Sleep" beim NUC in den Griff bekam.


    Stefan

    Code
    • Sleep bzw. Suspend durch Fernbedienung Poweroff-Taste
            ◦ vi /etc/systemd/logind.conf
                ▪ #HandleSuspendKey=suspend
                ▪ HandleSuspendKey=ignore

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!