Pielāgots skripts, aizverot klēpjdatora vāku un bloķējot ekrānu bez miega režīma

Sveiki visiem. Es izmantoju Lubuntu 18.04 savā mājas klēpjdatorā. Kādā jaukā dienā nolēmu, ka mani neapmierina Power Manager piedāvātās darbības, aizverot klēpjdatora vāku. Es gribēju bloķēt ekrānu, aizverot klēpjdatora vāku, un pēc kāda laika nosūtīt klēpjdatoru hibernācijā. Es uzrakstīju šim scenāriju un steidzos dalīties tajā ar jums.

Es saskāros ar divām problēmām.

Pirmkārt, pārziemošanas režīms Lubuntā nedarbojas; lai to iespējotu, jums ir jāveic šādas darbības.

Atrodiet UUID mijmaiņas darījumu, lai to izdarītu, palaidiet:

grep swap /etc/fstab

Manā gadījumā izvade ir šāda:

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

Pēc tam kodola inicializācijas parametriem jāpievieno UUID. Lai to izdarītu, faila /etc/default/grub rindai “GRUB_CMDLINE_LINUX_DEFAULT” pievienojiet resume=UUID=%your UUID%.

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

Un palaidiet komandu:

sudo update-grub

Tagad hibernācijai vajadzētu darboties, lai pārbaudītu, vai varat palaist:

sudo systemctl hibernate

Otra problēma bija kā bloķēt lietotāja ekrānu kā root, nenosūtot klēpjdatoru miega režīmā. Es to atrisināju, izmantojot dbus-send, pati komanda ir zemāk esošajā skriptā. Ja kāds zina citus variantus, lūdzu rakstiet komentāros

Tagad sāksim rakstīt skriptu.

Pirmā lieta, kas mums jādara Power Manager, ir atlasīt Izslēgt displeju kā darbību, aizverot vāku, lai nerastos konflikti ar mūsu skriptu.

Pielāgots skripts, aizverot klēpjdatora vāku un bloķējot ekrānu bez miega režīma

Pēc tam izveidojiet failu /etc/acpi/events/laptop-lid ar šādu saturu:

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

un izveidojiet skriptu /etc/acpi/laptop-lid.sh ar šādu saturu:

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

Padarot skriptu izpildāmu:

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

Un restartējiet acpid dēmonu, lai tiktu piemērotas izmaiņas:

sudo systemctl restart acpid.service

Viss ir gatavs.

Gnome skriptā ir jāmaina:

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

Avots: www.habr.com

Pievieno komentāru