Script personnalisé lors de la fermeture du couvercle de l'ordinateur portable et du verrouillage de l'écran sans mise en veille

Salut tout le monde. J'utilise Lubuntu 18.04 sur mon ordinateur portable personnel. Un beau jour, j'ai décidé que je n'étais pas satisfait des actions proposées par Power Manager lors de la fermeture du couvercle de l'ordinateur portable. Je voulais verrouiller l'écran lors de la fermeture du couvercle de l'ordinateur portable et, après un certain temps, mettre l'ordinateur portable en veille prolongée. J'ai écrit un scénario pour cela et je m'empresse de le partager avec vous.

J'ai rencontré deux problèmes.

Premièrement, l'hibernation ne fonctionne pas immédiatement dans Lubunta ; pour l'activer, vous devez procéder comme suit.

Recherchez le swap UUID, pour ce faire, vous devez exécuter :

grep swap /etc/fstab

Dans mon cas, le résultat est le suivant :

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

Ensuite, vous devez ajouter l'UUID aux paramètres d'initialisation du noyau. Pour cela, ajoutez summary=UUID=%your UUID% à la ligne « GRUB_CMDLINE_LINUX_DEFAULT » dans le fichier /etc/default/grub

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

Et exécutez la commande :

sudo update-grub

Maintenant, l'hibernation devrait fonctionner, pour vérifier, vous pouvez exécuter :

sudo systemctl hibernate

Le deuxième problème était de savoir comment verrouiller l'écran de l'utilisateur en tant que root sans mettre l'ordinateur portable en veille. Je l'ai résolu en utilisant dbus-send, la commande elle-même se trouve dans le script ci-dessous. Si quelqu'un connaît d'autres options, veuillez l'écrire dans les commentaires

Commençons maintenant à écrire le script.

La première chose que nous devons faire dans Power Manager est de sélectionner Désactiver l'affichage comme action lors de la fermeture du couvercle, afin qu'il n'y ait pas de conflits avec notre script.

Script personnalisé lors de la fermeture du couvercle de l'ordinateur portable et du verrouillage de l'écran sans mise en veille

Créez ensuite un fichier /etc/acpi/events/laptop-lid avec le contenu suivant :

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

et créez un script /etc/acpi/laptop-lid.sh avec le contenu suivant :

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

Rendre le script exécutable :

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

Et redémarrez le démon acpid pour que les modifications soient appliquées :

sudo systemctl restart acpid.service

Tout est prêt.

Pour Gnome, dans le script, vous devez modifier :

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

Source: habr.com

Ajouter un commentaire