Sérsniðið forskrift þegar fartölvulokinu er lokað og skjánum læst án svefns

Hæ allir. Ég er að nota Lubuntu 18.04 á fartölvunni heima. Einn góðan veðurdag ákvað ég að ég væri ekki sáttur við þær aðgerðir sem Power Manager bauð upp á þegar fartölvulokinu var lokað. Mig langaði að læsa skjánum þegar fartölvulokinu var lokað og eftir smá stund senda fartölvuna í dvala. Ég skrifaði handrit að þessu og ég flýti mér að deila því með þér.

Ég lenti í tveimur vandamálum.

Í fyrsta lagi virkar dvala ekki beint úr kassanum í Lubunta; til að virkja það þarftu að gera eftirfarandi.

Finndu UUID skiptin, til að gera þetta þarftu að keyra:

grep swap /etc/fstab

Í mínu tilviki er úttakið eftirfarandi:

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

Þá þarftu að bæta UUID við frumstillingarbreytur kjarna. Til að gera þetta skaltu bæta resume=UUID=%your UUID% við línuna „GRUB_CMDLINE_LINUX_DEFAULT“ í skránni /etc/default/grub

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

Og keyrðu skipunina:

sudo update-grub

Nú ætti dvala að virka, til að athuga hvort þú getir keyrt:

sudo systemctl hibernate

Annað vandamálið var hvernig á að læsa skjá notandans sem rót án þess að senda fartölvuna í svefn. Ég leysti það með því að nota dbus-send, skipunin sjálf er í handritinu fyrir neðan. Ef einhver veit um aðra valkosti, vinsamlegast skrifaðu í athugasemdirnar

Nú skulum við byrja að skrifa handritið.

Það fyrsta sem við þurfum að gera í Power Manager er að velja Slökkva á skjá sem aðgerðina þegar lokinu er lokað, svo að það komi ekki í bága við handritið okkar.

Sérsniðið forskrift þegar fartölvulokinu er lokað og skjánum læst án svefns

Búðu síðan til skrá /etc/acpi/events/laptop-lid með eftirfarandi innihaldi:

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

og búðu til skriftu /etc/acpi/laptop-lid.sh með eftirfarandi innihaldi:

#!/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ð gera skriftuna keyranlega:

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

Og endurræstu acpid púkann þannig að breytingarnar séu notaðar:

sudo systemctl restart acpid.service

Allt er tilbúið.

Fyrir Gnome í handritinu þarftu að breyta:

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

Heimild: www.habr.com

Bæta við athugasemd