Egendefinert skript når du lukker lokket på den bærbare datamaskinen og låser skjermen uten søvn

Hei alle sammen. Jeg bruker Lubuntu 18.04 på den bærbare hjemmemaskinen min. En vakker dag bestemte jeg meg for at jeg ikke var fornøyd med handlingene som Power Manager tilbød da jeg lukket lokket på den bærbare datamaskinen. Jeg ønsket å låse skjermen når jeg lukker lokket på den bærbare datamaskinen og etter en stund sende den bærbare datamaskinen i dvalemodus. Jeg skrev et manus til dette, og jeg skynder meg å dele det med deg.

Jeg fikk to problemer.

For det første fungerer ikke dvalemodus direkte i Lubunta; for å aktivere det, må du gjøre følgende.

Finn UUID-byttet, for å gjøre dette må du kjøre:

grep swap /etc/fstab

I mitt tilfelle er utgangen følgende:

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

Deretter må du legge til UUID til kjerneinitieringsparameterne. For å gjøre dette, legg til resume=UUID=%din UUID% på linjen «GRUB_CMDLINE_LINUX_DEFAULT» i filen /etc/default/grub

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

Og kjør kommandoen:

sudo update-grub

Nå skal dvalemodus fungere, for å sjekke at du kan kjøre:

sudo systemctl hibernate

Det andre problemet var hvordan man låste brukerens skjerm som root uten å sende den bærbare datamaskinen i dvale. Jeg løste det ved hjelp av dbus-send, selve kommandoen er i skriptet nedenfor. Hvis noen vet andre alternativer, vennligst skriv i kommentarfeltet

La oss nå begynne å skrive manuset.

Det første vi må gjøre i Power Manager er å velge Slå av skjerm som handling når du lukker lokket, slik at det ikke oppstår konflikter med skriptet vårt.

Egendefinert skript når du lukker lokket på den bærbare datamaskinen og låser skjermen uten søvn

Lag deretter en fil /etc/acpi/events/laptop-lid med følgende innhold:

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

og lag et skript /etc/acpi/laptop-lid.sh med følgende innhold:

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

Gjør skriptet kjørbart:

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

Og start acpid-demonen på nytt slik at endringene blir tatt i bruk:

sudo systemctl restart acpid.service

Alt er klart.

For Gnome i skriptet må du endre:

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

Kilde: www.habr.com

Legg til en kommentar