Brugerdefineret script, når du lukker laptoplåget og låser skærmen uden søvn

Hej alle. Jeg bruger Lubuntu 18.04 på min bærbare hjemmecomputer. En skønne dag besluttede jeg, at jeg ikke var tilfreds med de handlinger, som Power Manager tilbød, da jeg lukkede den bærbare computers låg. Jeg ønskede at låse skærmen, når jeg lukkede laptoplåget og efter et stykke tid sende den bærbare computer i dvale. Jeg skrev et manuskript til dette, og jeg skynder mig at dele det med dig.

Jeg løb ind i to problemer.

For det første fungerer dvaletilstand ikke direkte i Lubunta; for at aktivere det, skal du gøre følgende.

Find UUID swap, for at gøre dette skal du køre:

grep swap /etc/fstab

I mit tilfælde er outputtet følgende:

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

Derefter skal du tilføje UUID til kerneinitialiseringsparametrene. For at gøre dette skal du tilføje resume=UUID=%dit UUID% til linjen "GRUB_CMDLINE_LINUX_DEFAULT" i filen /etc/default/grub

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

Og kør kommandoen:

sudo update-grub

Nu skulle dvaletilstand fungere, for at kontrollere, at du kan køre:

sudo systemctl hibernate

Det andet problem var, hvordan man låser brugerens skærm som root uden at sende den bærbare computer på vågeblus. Jeg løste det ved hjælp af dbus-send, selve kommandoen er i scriptet nedenfor. Hvis nogen kender andre muligheder, så skriv venligst i kommentarerne

Lad os nu begynde at skrive manuskriptet.

Det første vi skal gøre i Power Manager er at vælge Sluk display som handling, når låget lukkes, så der ikke opstår konflikter med vores script.

Brugerdefineret script, når du lukker laptoplåget og låser skærmen uden søvn

Opret derefter en fil /etc/acpi/events/laptop-lid med følgende indhold:

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

og opret et script /etc/acpi/laptop-lid.sh med følgende indhold:

#!/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ør scriptet eksekverbart:

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

Og genstart acpid-dæmonen, så ændringerne anvendes:

sudo systemctl restart acpid.service

Alt er klar.

For Gnome i scriptet skal du ændre:

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

Kilde: www.habr.com

Tilføj en kommentar