Hallo zusammen. Ich verwende Lubuntu 18.04 auf meinem Heimlaptop. Eines schönen Tages beschloss ich, dass ich mit den Aktionen, die Power Manager beim Schließen des Laptopdeckels bot, nicht zufrieden war. Ich wollte den Bildschirm beim Schließen des Laptopdeckels sperren und den Laptop nach einer Weile in den Ruhezustand versetzen. Ich habe dafür ein Skript geschrieben und beeile mich, es mit Ihnen zu teilen.
Ich bin auf zwei Probleme gestoßen.
Erstens funktioniert der Ruhezustand in Lubunta nicht sofort. Um ihn zu aktivieren, müssen Sie Folgendes tun.
Suchen Sie den UUID-Swap. Dazu müssen Sie Folgendes ausführen:
grep swap /etc/fstab
In meinem Fall ist die Ausgabe folgende:
# 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 „resume=UUID=%your UUID%“ zur Zeile „GRUB_CMDLINE_LINUX_DEFAULT“ in der Datei /etc/default/grub hinzu
...
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 ausführen:
sudo systemctl hibernate
Das zweite Problem bestand darin, den Bildschirm des Benutzers als Root zu sperren, ohne den Laptop in den Ruhezustand zu versetzen. Ich habe es mit dbus-send gelöst, der Befehl selbst ist im Skript unten. Wenn jemand andere Möglichkeiten kennt, schreibt es bitte in die Kommentare
Beginnen wir nun mit dem Schreiben des Skripts.
Als erstes müssen wir im Power Manager als Aktion beim Schließen des Deckels Display ausschalten auswählen, damit es zu keinen Konflikten mit unserem Skript kommt.
Anschließend erstellen Sie eine Datei /etc/acpi/events/laptop-lid mit folgendem Inhalt:
event=button/lid.*
action=/etc/acpi/laptop-lid.sh
und erstellen Sie ein Skript /etc/acpi/laptop-lid.sh mit folgendem Inhalt:
#!/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
Das Skript ausführbar machen:
sudo chmod a+x /etc/acpi/laptop-lid.sh
Und 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-Sitzung
- org.freedesktop.ScreenSaver => org.gnome.ScreenSaver
Source: habr.com