Egyéni szkript a laptop fedelének lecsukásakor és a képernyő lezárásakor alvás nélkül

Sziasztok. Az otthoni laptopomon a Lubuntu 18.04-et használom. Egy szép napon úgy döntöttem, hogy nem vagyok megelégedve a Power Manager által a laptop fedelének lecsukásakor felajánlott műveletekkel. Le akartam zárni a képernyőt a laptop fedelének lecsukásakor, és egy idő után hibernált állapotba küldeni a laptopot. Írtam egy forgatókönyvet ehhez, és sietve megosztom veletek.

Két problémába ütköztem.

Először is, a hibernálás nem működik a Lubuntában; engedélyezéséhez a következőket kell tennie.

Keresse meg az UUID cserét, ehhez futtassa a következőket:

grep swap /etc/fstab

Az én esetemben a kimenet a következő:

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

Ezután hozzá kell adnia az UUID-t a kernel inicializálási paramétereihez. Ehhez adja hozzá a resume=UUID=%your UUID% értéket a „GRUB_CMDLINE_LINUX_DEFAULT” sorához az /etc/default/grub fájlban.

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

És futtassa a parancsot:

sudo update-grub

Most a hibernált állapotnak működnie kell, hogy ellenőrizze, futhat-e:

sudo systemctl hibernate

A második probléma az volt, hogy hogyan lehet root felhasználóként lezárni a felhasználó képernyőjét anélkül, hogy a laptopot alvó állapotba helyezné. A dbus-send segítségével oldottam meg, maga a parancs az alábbi scriptben van. Ha valaki tud más lehetőségeket, írja meg kommentben

Most kezdjük el írni a forgatókönyvet.

Az első dolog, amit meg kell tennünk a Power Managerben, hogy a fedél zárásakor a Kijelző kikapcsolása lehetőséget választjuk, hogy ne legyen ütközés a szkriptünkkel.

Egyéni szkript a laptop fedelének lecsukásakor és a képernyő lezárásakor alvás nélkül

Ezután hozzon létre egy /etc/acpi/events/laptop-lid fájlt a következő tartalommal:

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

és hozzon létre egy /etc/acpi/laptop-lid.sh szkriptet a következő tartalommal:

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

A szkript futtathatóvá tétele:

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

És indítsa újra az acpid démont, hogy a módosítások érvényesüljenek:

sudo systemctl restart acpid.service

Minden készen áll.

A szkriptben lévő Gnome esetében módosítania kell:

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

Forrás: will.com

Hozzászólás