Ein Power-Taster, zwei Funktionen gleichzeitig (suspend & shutdown)?
Ein Power-Taster, zwei Funktionen gleichzeitig (suspend & shutdown)?
Hallo,
neben mir steht ein Asustor-NAS mit Bullseye/Mate, das über einen einzelnen Power-Taster verfügt. Diesen Taster kann ich in Mate so konfigurieren, dass er beim Drücken (nicht erst beim Loslassen) das System entweder in Suspend2RAM oder Shutdown schickt. Beides funktioniert, aber eben immer nur eines von beiden.
Kann ich Debian auch irgendwie (nicht über das GUI) so konfigurieren, dass der eine Taster beides macht, also z.B. bei Einfachklick Suspend und bei Doppelklick oder Halten Shutdown?
Wenn ich den Taster länger als 3 Sekunden halte, dann schaltet das BIOS das (meist bis dahin schon im Suspend angekommene) Gerät hart aus. Das will ich aber auch nicht, und im BIOS lässt es sich nicht umkonfigurieren, um z.B. ein ACPI-Event zum Shutdown zu senden. Die Unterscheidung der Aktion müsste also schon in Debian passieren.
neben mir steht ein Asustor-NAS mit Bullseye/Mate, das über einen einzelnen Power-Taster verfügt. Diesen Taster kann ich in Mate so konfigurieren, dass er beim Drücken (nicht erst beim Loslassen) das System entweder in Suspend2RAM oder Shutdown schickt. Beides funktioniert, aber eben immer nur eines von beiden.
Kann ich Debian auch irgendwie (nicht über das GUI) so konfigurieren, dass der eine Taster beides macht, also z.B. bei Einfachklick Suspend und bei Doppelklick oder Halten Shutdown?
Wenn ich den Taster länger als 3 Sekunden halte, dann schaltet das BIOS das (meist bis dahin schon im Suspend angekommene) Gerät hart aus. Das will ich aber auch nicht, und im BIOS lässt es sich nicht umkonfigurieren, um z.B. ein ACPI-Event zum Shutdown zu senden. Die Unterscheidung der Aktion müsste also schon in Debian passieren.
Re: Ein Power-Taster, zwei Funktionen gleichzeitig (suspend & shutdown)?
In python hätte ich von meinem Projekt eine provisorische und unvollständige Lösung parat, die zwischen lang und kurz drücken unterscheidet, aber wahrscheinlich suchst du eher etwas gut funktionierendes fertiges und da würde ich mich als erstes bei den Hotkeydiensten umsehen, wie zB triggerhappy.
(Die Powertaste taucht ja normalerweise als eigene Tastatur auf und die Reaktion von mate, systemd,... auf diese Taste lässt sich deaktivieren.)
(Die Powertaste taucht ja normalerweise als eigene Tastatur auf und die Reaktion von mate, systemd,... auf diese Taste lässt sich deaktivieren.)
Re: Ein Power-Taster, zwei Funktionen gleichzeitig (suspend & shutdown)?
Über unvollständig ließe sich verhandeln, aber funktionierend sollte schon sein.smutbert hat geschrieben:25.12.2021 18:10:13In python hätte ich von meinem Projekt eine provisorische und unvollständige Lösung parat, die zwischen lang und kurz drücken unterscheidet, aber wahrscheinlich suchst du eher etwas gut funktionierendes fertiges
Das wäre mir neu. xev zumindest gibt nichts beim Drücken aus.smutbert hat geschrieben:25.12.2021 18:10:13(Die Powertaste taucht ja normalerweise als eigene Tastatur auf
Ja. Ich hatte mich daran erinnert, dazu schon mal etwas in /etc/systemd/logind.conf gesehen zu haben. Das führte mich zu [1] und da steht offenbar genau das was ich suche:smutbert hat geschrieben:25.12.2021 18:10:13und die Reaktion von mate, systemd,... auf diese Taste lässt sich deaktivieren.)
Demnach müsste ich wohl das setzen:HandlePowerKey=, HandlePowerKeyLongPress=, HandleRebootKey=, HandleRebootKeyLongPress=, HandleSuspendKey=, HandleSuspendKeyLongPress=, HandleHibernateKey=, HandleHibernateKeyLongPress=, HandleLidSwitch=, HandleLidSwitchExternalPower=, HandleLidSwitchDocked=
Controls how logind shall handle the system power, reboot and sleep keys and the lid switch to trigger actions such as system power-off, reboot or suspend. Can be one of "ignore", "poweroff", "reboot", "halt", "kexec", "suspend", "hibernate", "hybrid-sleep", "suspend-then-hibernate", "lock", and "factory-reset".
Code: Alles auswählen
HandlePowerKey=suspend
HandlePowerKeyLongPress=poweroff
Als nächstes steht da:
Also sollte ich wohl auch das setzen, um auszuschließen, dass Mate dazwischenfunkt:PowerKeyIgnoreInhibited=, SuspendKeyIgnoreInhibited=, HibernateKeyIgnoreInhibited=, LidSwitchIgnoreInhibited=, RebootKeyIgnoreInhibited=
Controls whether actions that systemd-logind takes when the power, reboot and sleep keys and the lid switch are triggered are subject to high-level inhibitor locks ("shutdown", "reboot", "sleep", "idle"). Low level inhibitor locks ("handle-power-key", "handle-suspend-key", "handle-hibernate-key", "handle-lid-switch", "handle-reboot-key"), are always honored, irrespective of this setting.
Code: Alles auswählen
PowerKeyIgnoreInhibited=yes
Edit: "kein Effekt" meint, dass das System genau das macht, was in Mate eingestellt ist. Ist dort "nichts machen" eingestellt, passiert auch nichts.
[1] https://www.freedesktop.org/software/sy ... .conf.html
Re: Ein Power-Taster, zwei Funktionen gleichzeitig (suspend & shutdown)?
Hm, das klingt in der Tat etwas anders als ich es gewohnt bin. xev ist da aber vielleicht auch nicht das richtige, weil der Powertaster vermutlich vor X abgefangen wird.
Sieh vielleicht einmal mit evemu-record aus evemu-tools ob es ein Eingabegerät für den Powertaster gibt und ob du dessen Events sehen kannst (dann sollte notfalls auch meine Lösung funktionieren ☺). evemu-record listet gleich nach dem Aufruf die Eingabegeräte auf und bei mir taucht da u. a.
auf.
Wie displaymanager/desktop und systemd zusammenarbeiten weiß ich nicht, aber von meinem Gnome kenne ich es so, dass bei laufendem Gnome/gdm egal ist, was ich in systemd konfiguriert habe – die Einstellungen von Gnome „überschreiben“ das Verhalten.
Also ohne Displaymanager/Desktop sollte es denke ich mit den obigen Einträgen oder alternativ triggerhappy oder meiner python-Lösung funktionieren. Bei laufendem Displaymanager/Desktop wird es denke ich halt mit systemd unabhängig von den Desktopeinstellungen nicht klappen.
Sowohl triggerhappy wie auch mein python-Programm haben allerdings soweit ich weiß (bei meinem bin ich mir sicher, bei triggerhappy vermute ich es nur) den Nachteil, dass beim langen Drücken sowohl zuerst der Event für einen kurzen Tastendruck wie auch danach der fürs lange Drücken erzeugt werden – da fehlt noch das Warten auf das Loslassen um zu entscheiden ob es jetzt ein langer oder kurzer Tastendruck war.
(Das wollte ich in meinem Programm schon einbauen, habe es aber noch nicht zufriedenstellend lösen können...)
Ein zweites Problem sehe ich noch darin, dass ein langer Druck auf den Powertaster das System ja möglicherweise hart abschaltet – typischerweise bei einem 4s langen Tastendruck.
Ob dann für den Fall, dass man dieses harte Abschalten im BIOS nicht deaktiveren kann, eine software-Funktion für der Powertaster z.B. 2 Sekunden lang gedrückt werden muss nicht zu gefährlich ist?
Sieh vielleicht einmal mit evemu-record aus evemu-tools ob es ein Eingabegerät für den Powertaster gibt und ob du dessen Events sehen kannst (dann sollte notfalls auch meine Lösung funktionieren ☺). evemu-record listet gleich nach dem Aufruf die Eingabegeräte auf und bei mir taucht da u. a.
Code: Alles auswählen
/dev/input/event7: Power Button
Das gilt aber bei laufendem Mate oder Displaymanager?hikaru hat geschrieben:25.12.2021 21:25:12[...]
Demnach müsste ich wohl das setzen:Was aber (auch nach Reboot) keinen Effekt hat.Code: Alles auswählen
HandlePowerKey=suspend HandlePowerKeyLongPress=poweroff
[...]
Wie displaymanager/desktop und systemd zusammenarbeiten weiß ich nicht, aber von meinem Gnome kenne ich es so, dass bei laufendem Gnome/gdm egal ist, was ich in systemd konfiguriert habe – die Einstellungen von Gnome „überschreiben“ das Verhalten.
Also ohne Displaymanager/Desktop sollte es denke ich mit den obigen Einträgen oder alternativ triggerhappy oder meiner python-Lösung funktionieren. Bei laufendem Displaymanager/Desktop wird es denke ich halt mit systemd unabhängig von den Desktopeinstellungen nicht klappen.
Sowohl triggerhappy wie auch mein python-Programm haben allerdings soweit ich weiß (bei meinem bin ich mir sicher, bei triggerhappy vermute ich es nur) den Nachteil, dass beim langen Drücken sowohl zuerst der Event für einen kurzen Tastendruck wie auch danach der fürs lange Drücken erzeugt werden – da fehlt noch das Warten auf das Loslassen um zu entscheiden ob es jetzt ein langer oder kurzer Tastendruck war.
(Das wollte ich in meinem Programm schon einbauen, habe es aber noch nicht zufriedenstellend lösen können...)
Ein zweites Problem sehe ich noch darin, dass ein langer Druck auf den Powertaster das System ja möglicherweise hart abschaltet – typischerweise bei einem 4s langen Tastendruck.
Ob dann für den Fall, dass man dieses harte Abschalten im BIOS nicht deaktiveren kann, eine software-Funktion für der Powertaster z.B. 2 Sekunden lang gedrückt werden muss nicht zu gefährlich ist?
Re: Ein Power-Taster, zwei Funktionen gleichzeitig (suspend & shutdown)?
An die Optionen hatte ich vorhin auch kurz gedacht, als ich dein Thema gesehen hab. War auch schonmal über die gestolpert. Die Optionen gibts aber leider erst ab systemd-Version 250 – von vorgestern. Und die ist gerade erst in Experimental verfügbar.hikaru hat geschrieben:25.12.2021 21:25:12Ja. Ich hatte mich daran erinnert, dazu schon mal etwas in /etc/systemd/logind.conf gesehen zu haben. Das führte mich zu [1] und da steht offenbar genau das was ich suche:HandlePowerKey=, HandlePowerKeyLongPress=, HandleRebootKey=, HandleRebootKeyLongPress=, HandleSuspendKey=, HandleSuspendKeyLongPress=, HandleHibernateKey=, HandleHibernateKeyLongPress=, HandleLidSwitch=, HandleLidSwitchExternalPower=, HandleLidSwitchDocked=
Manchmal bekannt als Just (another) Terminal Hacker.
Re: Ein Power-Taster, zwei Funktionen gleichzeitig (suspend & shutdown)?
Ich sehe nach einem Doppelklick diese Events:smutbert hat geschrieben:25.12.2021 22:04:09Sieh vielleicht einmal mit evemu-record aus evemu-tools ob es ein Eingabegerät für den Powertaster gibt und ob du dessen Events sehen kannst (dann sollte notfalls auch meine Lösung funktionieren ☺).
Code: Alles auswählen
/dev/input/event2: Power Button
[..]
################################
# Waiting for events #
################################
E: 0.000001 0001 0074 0001 # EV_KEY / KEY_POWER 1
E: 0.000001 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- +0ms
E: 0.000071 0001 0074 0000 # EV_KEY / KEY_POWER 0
E: 0.000071 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- +0ms
E: 0.589078 0001 0074 0001 # EV_KEY / KEY_POWER 1
E: 0.589078 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- +589ms
E: 0.589138 0001 0074 0000 # EV_KEY / KEY_POWER 0
E: 0.589138 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- +0ms
################################
Ja, Mate auf Lightdm.smutbert hat geschrieben:25.12.2021 22:04:09Das gilt aber bei laufendem Mate oder Displaymanager?hikaru hat geschrieben:25.12.2021 21:25:12[...]
Demnach müsste ich wohl das setzen:Was aber (auch nach Reboot) keinen Effekt hat.Code: Alles auswählen
HandlePowerKey=suspend HandlePowerKeyLongPress=poweroff
[...]
Ich hätte gedacht, genau dazu wäre "PowerKeyIgnoreInhibited=yes" gut.smutbert hat geschrieben:25.12.2021 22:04:09Bei laufendem Displaymanager/Desktop wird es denke ich halt mit systemd unabhängig von den Desktopeinstellungen nicht klappen.
Eben wegen dieser Gefahr wäre mir ein Doppelklick zum Herunterfahren eh lieber. Mir ist nur nicht klar, wie ich diese Events abfrage. Polling (was wohl triggerhappy macht) finde ich eher hässlich.smutbert hat geschrieben:25.12.2021 22:04:09Sowohl triggerhappy wie auch mein python-Programm haben allerdings soweit ich weiß (bei meinem bin ich mir sicher, bei triggerhappy vermute ich es nur) den Nachteil, dass beim langen Drücken sowohl zuerst der Event für einen kurzen Tastendruck wie auch danach der fürs lange Drücken erzeugt werden – da fehlt noch das Warten auf das Loslassen um zu entscheiden ob es jetzt ein langer oder kurzer Tastendruck war.
Ich habe gestern mal probiert einen Bullseye-Backport aus den Experimental-Quellen zu bauen, scheiterte dann aber in der Testsuite.JTH hat geschrieben:25.12.2021 22:33:30An die Optionen hatte ich vorhin auch kurz gedacht, als ich dein Thema gesehen hab. War auch schonmal über die gestolpert. Die Optionen gibts aber leider erst ab systemd-Version 250 – von vorgestern. Und die ist gerade erst in Experimental verfügbar.
Unabhängig davon hätte ja der einfache kurze Klick "HandlePowerKey=suspend" schon unter Bullseye funktionieren müssen, wenn das im Prinzip funktionieren würde.
Re: Ein Power-Taster, zwei Funktionen gleichzeitig (suspend & shutdown)?
Ich bin mir eigentlich sicher, dass der einfache Klick ohne Displaymanager/Desktop funktioniert hätte – ich nutze ähnliche Einträge auf einem Raspberry Pi und einem headless laufenden PC.
Meine Lösung in python mit python3-evdev kann ich in etwas vereinfachter Form glaube ich direkt hier posten, weil es nur ein paar Zeilen sind.
Das sind jetzt allerdings noch die passenden Werte für die Entertaste (code=28 und type=EV_KEY), weil ich nicht riskieren wollte, dass mein System unbeabsichtigt herunterfährt...
Meine Lösung in python mit python3-evdev kann ich in etwas vereinfachter Form glaube ich direkt hier posten, weil es nur ein paar Zeilen sind.
Das sind jetzt allerdings noch die passenden Werte für die Entertaste (code=28 und type=EV_KEY), weil ich nicht riskieren wollte, dass mein System unbeabsichtigt herunterfährt...
Code: Alles auswählen
#!/usr/bin/env python3
from evdev import InputDevice, categorize, ecodes
device = InputDevice('/dev/input/event0')
# Oeffnet das Eingabegerät exklusiv
#device.grab()
time = 0
for event in device.read_loop():
if event.type == ecodes.EV_KEY:
if event.code == 28 and event.value == 1:
# Powertaster gedrueckt
time = event.timestamp()
elif event.value == 0 and event.value == 0:
# Powertaster losgelassen
duration = event.timestamp() - time
if time != 0 and duration < 1:
print("Powertaster kurz gedrueckt,")
elif time != 0 and duration >= 1:
print("Powertaster lange gedrueckt.")