Anpassat skript när du stänger locket till den bärbara datorn och låser skärmen utan sömn

Hej alla. Jag använder Lubuntu 18.04 på min bärbara dator hemma. En vacker dag bestämde jag mig för att jag inte var nöjd med de åtgärder som Power Manager erbjöd när jag stängde locket till den bärbara datorn. Jag ville låsa skärmen när jag stängde locket till den bärbara datorn och efter ett tag skicka den bärbara datorn i viloläge. Jag skrev ett manus för detta och jag skyndar mig att dela det med dig.

Jag stötte på två problem.

För det första fungerar inte viloläge direkt i Lubunta; för att aktivera det måste du göra följande.

Hitta UUID-bytet, för att göra detta måste du köra:

grep swap /etc/fstab

I mitt fall är utgången följande:

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

Sedan måste du lägga till UUID till kärninitieringsparametrarna. För att göra detta, lägg till resume=UUID=%ditt UUID% på raden "GRUB_CMDLINE_LINUX_DEFAULT" i filen /etc/default/grub

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

Och kör kommandot:

sudo update-grub

Nu borde viloläge fungera, för att kontrollera att du kan köra:

sudo systemctl hibernate

Det andra problemet var hur man låser användarens skärm som root utan att skicka den bärbara datorn i viloläge. Jag löste det med dbus-send, själva kommandot finns i skriptet nedan. Om någon vet andra alternativ, skriv gärna i kommentarerna

Låt oss nu börja skriva manuset.

Det första vi behöver göra i Power Manager är att välja Stäng av display som åtgärd när du stänger locket, så att det inte blir några konflikter med vårt skript.

Anpassat skript när du stänger locket till den bärbara datorn och låser skärmen utan sömn

Skapa sedan en fil /etc/acpi/events/laptop-lid med följande innehåll:

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

och skapa ett skript /etc/acpi/laptop-lid.sh med följande innehåll:

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

Göra skriptet körbart:

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

Och starta om acpid-demonen så att ändringarna tillämpas:

sudo systemctl restart acpid.service

Allt är klart.

För Gnome i skriptet måste du ändra:

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

Källa: will.com

Lägg en kommentar