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

Bonjour à tous. J'utilise Lubuntu 18.04 sur mon ordinateur portable domestique. Un beau jour, j'ai décidé que je n'étais pas satisfait des actions que Power Manager propose lors de la fermeture du couvercle d'un ordinateur portable. Lorsque j'ai fermé le capot de l'ordinateur portable, j'ai voulu verrouiller l'écran et, après un certain temps, envoyer l'ordinateur portable en hibernation. Pour ce faire, j'ai écrit un script et je m'empresse de le partager avec vous.

J'ai rencontré deux problèmes.

La première est que l'hibernation ne fonctionne pas dans le loubunt hors de la boîte;

Trouvez le swap UUID, pour cela, vous devez faire:

grep swap /etc/fstab

Dans mon cas, la sortie est la suivante:

# 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 ce faire, ajoutez le fichier / etc / default / grub à la ligne "GRUB_CMDLINE_LINUX_DEFAULT" resume = UUID =% votre UUID%

...
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 la vérification, vous pouvez faire:

sudo systemctl hibernate

Le deuxième problème était de savoir comment verrouiller l'écran de l'utilisateur à partir de root sans envoyer l'ordinateur portable en veille. Je l'ai résolu en utilisant dbus-send, la commande elle-même est dans le script ci-dessous. Si quelqu'un connaît d'autres options, veuillez é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 aucun conflit avec notre script.

image

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

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

et créez le 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

Nous rendons le script exécutable:

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

Et redémarrez le démon acpid pour que les modifications s'appliquent:

sudo systemctl restart acpid.service

Tout est prêt.

Pour Gnome dans le script, vous devez changer:

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

All Articles