Aangepast script bij het sluiten van de laptopklep en het vergrendelen van het scherm zonder slaap

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.

Aangepast script bij het sluiten van de laptopklep en het vergrendelen van het scherm zonder slaap

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

Voeg een reactie