Je souhaite généralement que mon ordinateur portable soit verrouillé lorsqu'il est suspendu, mais pas lorsque je le suspends simplement, car il existe un cas d'utilisation dans lequel la saisie de mon mot de passe une fois que mon ordinateur portable est sorti de la suspension est assez lourde. Un bon compromis consiste à ne demander le mot de passe de connexion que si l'ordinateur portable a été suspendu il y a plus de 10 minutes. Comment puis-je faire cela?
J'utilise Ubuntu 16.04 avec Unity.
Créez un fichier dans /lib/systemd/system-sleep/
, nommé par exemple: lightdm
:
Sudo touch /lib/systemd/system-sleep/lightdm
rendre ce fichier exécutable:
Sudo chmod +x /lib/systemd/system-sleep/lightdm
Chaque fois que vous "suspendez" ou "reprenez" votre Ubuntu, ce script sera exécuté.
Ouvrez-le à l’aide de l’éditeur de texte de votre choix, par exemple: Sudo nano /lib/systemd/system-sleep/lightdm
, collez-y ces lignes puis enregistrez-le:
#!/bin/sh
set -e
case "$1" in
pre)
#Store current timestamp (while suspending)
/bin/echo "$(date +%s)" > /tmp/_suspend
;;
post)
#Compute old and current timestamp
oldts="$(cat /tmp/_suspend)"
ts="$(date +%s)"
#Prompt for password if suspended > 10 minutes
if [ $((ts-oldts)) -ge 600 ];
then
export XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
/usr/bin/dm-tool lock
fi
/bin/rm /tmp/_suspend
;;
esac
Lorsque vous mettez votre Ubuntu en mode "veille", ce script enregistre les horodatages actuels, puis lors de la reprise du système, il vérifie les anciens horodatages avec l'horodatage actuel. Si la différence est supérieure à "600" seconde (10 Minuets) vous "lightdm" verrouiller l'écran sinon il ne fait rien.
Pour la dernière étape:
ouvrez "Paramètres système" -> "Luminosité et verrouillage". Désactivez la demande du mot de passe après la suspension, car nous laissons la gestion de l'écran de verrouillage au script.
Après le redémarrage ou l’arrêt, vous devez toujours entrer votre mot de passe.
Ajoutez un script dans /lib/systemd/system-sleep/
pour déverrouiller votre session si le système a été suspendu pendant une courte période:
cd /lib/systemd/system-sleep/
Sudo touch unlock_early_suspend
Sudo chmod 755 unlock_early_suspend
Sudo -H gedit unlock_early_suspend
Avec ce contenu:
#!/bin/bash
# Don't ask for password on resume if computer has been suspended for a short time
# Max duration of unlocked suspend (seconds)
SUSPEND_GRACE_TIME=600
file_time() { stat --format="%Y" "$1"; }
unlock_session()
{
# Ubuntu 16.04
sleep 1; loginctl unlock-sessions
}
# Only interested in suspend/resume events here. For hibernate etc Tweak this
if [ "$2" != "suspend" ]; then exit 0; fi
# Suspend
if [ "$1" = "pre" ]; then touch /tmp/last_suspend; fi
# Resume
if [ "$1" = "post" ]; then
touch /tmp/last_resume
last_suspend=`file_time /tmp/last_suspend`
last_resume=`file_time /tmp/last_resume`
suspend_time=$[$last_resume - $last_suspend]
if [ "$suspend_time" -le $SUSPEND_GRACE_TIME ]; then
unlock_session
fi
fi