web-dev-qa-db-fra.com

Exiger que le mot de passe ne se déclenche que lorsque vous êtes suspendu pendant 10 minutes

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.

11
UTF-8

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

Ce qu'il fait?

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.

enter image description here

Après le redémarrage ou l’arrêt, vous devez toujours entrer votre mot de passe.

7
Ravexina

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
0
lemonsqueeze