Dag Allemaal. Ik gebruik Lubuntu 18.04 op mijn thuislaptop. Op een mooie dag besloot ik dat ik niet tevreden was met de acties die Power Manager bood bij het sluiten van de laptopklep. Ik wilde het scherm vergrendelen bij het sluiten van de laptopklep en de laptop na een tijdje in de slaapstand zetten. Ik heb hiervoor een script geschreven en ik haast me om het met jullie te delen.
Ik kwam twee problemen tegen.
Ten eerste werkt de slaapstand niet standaard in Lubunta; om dit in te schakelen, moet je het volgende doen.
Zoek de UUID-swap. Om dit te doen, moet u het volgende uitvoeren:
grep swap /etc/fstab
In mijn geval is de uitvoer als volgt:
# swap was on /dev/mmcblk0p2 during installation
UUID=aebf757e-14c0-410a-b042-3d9a6044a987 none swap sw 0 0
Vervolgens moet u de UUID toevoegen aan de kernel-initialisatieparameters. Om dit te doen, voegt u cv=UUID=%uw UUID% toe aan de regel βGRUB_CMDLINE_LINUX_DEFAULTβ in het bestand /etc/default/grub
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...
En voer het commando uit:
sudo update-grub
Nu zou de slaapstand moeten werken. Om te controleren kun je het volgende uitvoeren:
sudo systemctl hibernate
Het tweede probleem was hoe je het scherm van de gebruiker als root kon vergrendelen zonder de laptop in de slaapstand te zetten. Ik heb het opgelost met dbus-send, de opdracht zelf staat in het onderstaande script. Als iemand andere opties kent, schrijf dan in de reacties
Laten we nu beginnen met het schrijven van het script.
Het eerste dat we in Power Manager moeten doen, is Weergave uitschakelen selecteren als actie bij het sluiten van het deksel, zodat er geen conflicten zijn met ons script.
Maak vervolgens een bestand /etc/acpi/events/laptop-lid met de volgende inhoud:
event=button/lid.*
action=/etc/acpi/laptop-lid.sh
en maak een script /etc/acpi/laptop-lid.sh met de volgende inhoud:
#!/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
Het script uitvoerbaar maken:
sudo chmod a+x /etc/acpi/laptop-lid.sh
En herstart de acpid daemon zodat de wijzigingen worden toegepast:
sudo systemctl restart acpid.service
Alles is klaar.
Voor Gnome in het script moet je het volgende wijzigen:
- lxsessin => kaboutersessie
- org.freedesktop.ScreenSaver => org.gnome.ScreenSaver
Bron: www.habr.com