Benutzerdefiniertes Skript beim Schließen des Deckels des Laptops und Sperren des Bildschirms ohne Ruhezustand

Hallo alle zusammen. Ich verwende Lubuntu 18.04 auf meinem Heim-Laptop. Eines schönen Tages entschied ich, dass ich mit den Aktionen, die Power Manager beim Schließen des Deckels eines Laptops anbietet, nicht zufrieden war. Als ich den Deckel des Laptops schloss, wollte ich den Bildschirm blockieren und den Laptop nach einer Weile in den Ruhezustand schicken. Zu diesem Zweck habe ich ein Skript geschrieben und beeile mich, es mit Ihnen zu teilen.

Ich bin auf zwei Probleme gestoßen.

Der erste ist, dass der Ruhezustand im Loubunt von der Box aus nicht funktioniert. Um ihn zu aktivieren, muss Folgendes ausgeführt werden.

Suchen Sie den UUID-Swap. Dazu müssen Sie Folgendes tun:

grep swap /etc/fstab

In meinem Fall lautet die Ausgabe wie folgt:

# swap was on /dev/mmcblk0p2 during installation
UUID=aebf757e-14c0-410a-b042-3d9a6044a987 none            swap    sw              0       0

Anschließend müssen Sie die UUID zu den Kernel-Initialisierungsparametern hinzufügen. Fügen Sie dazu die Datei / etc / default / grub in die Zeile "GRUB_CMDLINE_LINUX_DEFAULT" ein. Resume = UUID =% your UUID%

...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...

Und führen Sie den Befehl aus:

sudo update-grub

Jetzt sollte der Ruhezustand funktionieren. Zur Überprüfung können Sie Folgendes tun:

sudo systemctl hibernate

Das zweite Problem bestand darin, den Bildschirm des Benutzers vom Stammverzeichnis aus zu sperren, ohne den Laptop in den Ruhezustand zu versetzen. Ich habe es mit dbus-send gelöst, der Befehl selbst befindet sich im folgenden Skript. Wenn jemand andere Optionen kennt, schreiben Sie bitte in die Kommentare.

Beginnen wir nun mit dem Schreiben des Skripts.

Das erste, was wir in Power Manager tun müssen, ist die Option Anzeige ausschalten als Aktion beim Schließen des Deckels auszuwählen, damit keine Konflikte mit unserem Skript auftreten.

Bild

Erstellen Sie dann die Datei / etc / acpi / events / Laptop-Deckel mit folgendem Inhalt:

event=button/lid.*
action=/etc/acpi/laptop-lid.sh

und erstellen Sie das Skript /etc/acpi/laptop-lid.sh mit den folgenden Inhalten:

#!/bin/bash

#set variables
# BUS   environ   lxsession
BUS=$(grep -z DBUS_SESSION_BUS_ADDRESS \
	/proc/$(pidof -s lxsession)/environ | \
	sed 's/DBUS_SESSION_BUS_ADDRESS=//g')
#     ,    
USER=$(grep -z USER /proc/$(pidof -s lxsession)/environ | sed 's/USER=//g')
#     
LID="/proc/acpi/button/lid/LID0/state"

#Check lid state (return 0 if closed)
check_lid () {
	grep -q closed $LID
}

#Lock screen without sleep
check_lid
if [ $? = 0 ]
then
	#TODO run command as root
	sudo -u $USER -E dbus-send --bus=$BUS \
				    --type=method_call \
				    --dest="org.freedesktop.ScreenSaver" \
				    "/org/freedesktop/ScreenSaver" \
				    org.freedesktop.ScreenSaver.Lock
fi

#Wait 10 minutes and hibernate if lid is closed
sleep 600
check_lid
if [ $? = 0 ]
then
	systemctl hibernate
fi

Wir machen das Skript ausführbar:

sudo chmod a+x /etc/acpi/laptop-lid.sh

Starten Sie den acpid-Daemon neu, damit die Änderungen übernommen werden:

sudo systemctl restart acpid.service

Alles ist fertig.

Für Gnome im Skript müssen Sie Folgendes ändern:

  • lxsessin => gnome-session
  • org.freedesktop.ScreenSaver => org.gnome.ScreenSaver

All Articles