Prilagođena skripta pri zatvaranju poklopca laptopa i zaključavanju ekrana bez spavanja

Zdravo svima. Koristim Lubuntu 18.04 na svom kućnom laptopu. Jednog lijepog dana odlučio sam da nisam zadovoljan radnjama koje je Power Manager nudio prilikom zatvaranja poklopca laptopa. Htio sam zaključati ekran kada zatvaram poklopac laptopa i nakon nekog vremena poslati laptop u hibernaciju. Napisao sam scenario za ovo i žurim da ga podelim sa vama.

Naišao sam na dva problema.

Prvo, hibernacija ne radi odmah u Lubunti; da biste je omogućili, morate učiniti sljedeće.

Pronađite zamjenu UUID-a, da biste to učinili trebate pokrenuti:

grep swap /etc/fstab

U mom slučaju izlaz je sljedeći:

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

Zatim morate dodati UUID u parametre inicijalizacije kernela. Da biste to uradili, dodajte resume=UUID=%vaš UUID% u red “GRUB_CMDLINE_LINUX_DEFAULT” u datoteci /etc/default/grub

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

I pokrenite naredbu:

sudo update-grub

Sada bi hibernacija trebala raditi, da provjerite možete li pokrenuti:

sudo systemctl hibernate

Drugi problem je bio kako zaključati ekran korisnika kao root bez slanja laptopa u stanje mirovanja. Rešio sam to koristeći dbus-send, sama komanda je u skripti ispod. Ako neko zna druge opcije neka piše u komentarima

Sada krenimo sa pisanjem scenarija.

Prvo što treba da uradimo u Power Manager-u je da izaberemo Isključi displej kao akciju prilikom zatvaranja poklopca, kako ne bi bilo sukoba sa našom skriptom.

Prilagođena skripta pri zatvaranju poklopca laptopa i zaključavanju ekrana bez spavanja

Zatim kreirajte datoteku /etc/acpi/events/laptop-lid sa sljedećim sadržajem:

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

i kreirajte skriptu /etc/acpi/laptop-lid.sh sa sljedećim sadržajem:

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

Učinite skriptu izvršnom:

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

I ponovo pokrenite acpid demon tako da promjene budu primijenjene:

sudo systemctl restart acpid.service

Sve je spremno.

Za Gnome u skripti morate promijeniti:

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

izvor: www.habr.com

Dodajte komentar