Kohandatud skript sülearvuti kaane sulgemisel ja ekraani lukustamisel ilma unerežiimita

Tere kõigile. Kasutan koduses sülearvutis Lubuntu 18.04. Ühel ilusal päeval otsustasin, et ma ei ole rahul toimingutega, mida Power Manager sülearvuti kaane sulgemisel pakkus. Tahtsin sülearvuti kaane sulgemisel ekraani lukustada ja mõne aja pärast sülearvuti talveunerežiimi saata. Kirjutasin selle jaoks stsenaariumi ja kiirustan seda teiega jagama.

Mul tekkis kaks probleemi.

Esiteks ei tööta talveunerežiim Lubuntas kohe, selle lubamiseks peate tegema järgmist.

Leidke UUID-vahetus, selleks peate käivitama:

grep swap /etc/fstab

Minu puhul on väljund järgmine:

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

Seejärel peate kerneli lähtestamise parameetritele lisama UUID-i. Selleks lisage faili /etc/default/grub reale "GRUB_CMDLINE_LINUX_DEFAULT" resume=UUID=%teie UUID%

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

Ja käivitage käsk:

sudo update-grub

Nüüd peaks talveunerežiim toimima, kontrollimiseks võite käivitada:

sudo systemctl hibernate

Teiseks probleemiks oli see, kuidas lukustada kasutaja ekraan rootina ilma sülearvutit magama saatmata. Lahendasin selle dbus-send abil, käsk ise on allolevas skriptis. Kui keegi teab muid võimalusi, siis palun kirjutage kommentaaridesse

Nüüd alustame stsenaariumi kirjutamist.

Esimene asi, mida peame Power Manageris tegema, on kaane sulgemise toiminguks valida ekraani väljalülitamine, et meie skriptiga ei tekiks konflikte.

Kohandatud skript sülearvuti kaane sulgemisel ja ekraani lukustamisel ilma unerežiimita

Seejärel looge järgmise sisuga fail /etc/acpi/events/laptop-lid:

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

ja looge järgmise sisuga skript /etc/acpi/laptop-lid.sh:

#!/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

Skripti käivitatavaks muutmine:

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

Ja taaskäivitage acpid deemon, et muudatused rakenduksid:

sudo systemctl restart acpid.service

Kõik on valmis.

Skriptis oleva Gnome'i jaoks peate muutma:

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

Allikas: www.habr.com

Lisa kommentaar