Prilagođena skripta prilikom zatvaranja poklopca prijenosnog računala i zaključavanja zaslona bez spavanja

Bok svima. Koristim Lubuntu 18.04 na kućnom laptopu. Jednog lijepog dana zaključio sam da nisam zadovoljan radnjama koje Power Manager nudi prilikom zatvaranja poklopca laptopa. Htio sam zaključati ekran pri zatvaranju poklopca laptopa i nakon nekog vremena poslati laptop u hibernaciju. Napisao sam scenarij za ovo i žurim ga podijeliti s vama.

Naišao sam na dva problema.

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

Pronađite UUID swap, da biste to učinili morate pokrenuti:

grep swap /etc/fstab

U mom slučaju rezultat 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 parametrima inicijalizacije kernela. Da biste to učinili, dodajte resume=UUID=%vaš UUID% u redak “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 pokrenuti:

sudo systemctl hibernate

Drugi problem bio je kako zaključati zaslon korisnika kao root bez slanja laptopa u stanje mirovanja. Riješio sam to koristeći dbus-send, sama naredba je u skripti ispod. Ako netko zna druge opcije, neka napiše u komentarima

Sada počnimo pisati scenarij.

Prvo što trebamo napraviti u Power Manageru je odabrati Isključi zaslon kao radnju pri zatvaranju poklopca, kako ne bi došlo do sukoba s našom skriptom.

Prilagođena skripta prilikom zatvaranja poklopca prijenosnog računala i zaključavanja zaslona bez spavanja

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

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

i izradite 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

Izrada skripte izvršnom:

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

I ponovno pokrenite acpid daemon kako bi se promjene primijenile:

sudo systemctl restart acpid.service

Sve je spremno.

Za Gnome u skripti morate promijeniti:

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

Izvor: www.habr.com

Dodajte komentar