Ne nécessite un mot de passe qu'au réveil de la suspension lorsqu'il est suspendu pendant 10 minutes

11

Je souhaite généralement que mon ordinateur portable soit verrouillé lorsqu'il est suspendu, mais pas lorsque je l'ai simplement suspendu, car il existe un cas d'utilisation dans lequel la saisie de mon mot de passe après que mon ordinateur portable s'est réveillé 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.

UTF-8
la source
Vous aimez la fonction "Verrouiller après x minutes" d'Android?
You'reAGitForNotUsingGit
@AndroidDev À peu près oui.
UTF-8

Réponses:

7

Créez un fichier à l'intérieur /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 va être exécuté.

Ouvrez-le en utilisant l'éditeur de texte souhaité, par exemple sudo nano /lib/systemd/system-sleep/lightdm:, et 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'actuel, si le différent était supérieur à "600" secondes (10 Menuets), il va s'afficher vous "lightdm" écran de verrouillage sinon il ne fait rien.

Pour la dernière étape:

ouvrez "Paramètres système" -> "Luminosité et verrouillage". Désactivez la demande de mot de passe après le réveil de la suspension, car nous laissons la gestion de l'écran de verrouillage au script.

entrez la description de l'image ici

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

Ravexina
la source
1
Très joli +1. Je dois signaler que le commentaire #Remove password prompetdoit être lu#Prompt for password if suspended > 10 minutes
WinEunuuchs2Unix
@ WinEunuuchs2Unix Merci de l'avoir signalé, j'ai d'abord écrit autre chose puis j'ai oublié de changer le commentaire :-)
Ravexina
0

Ajoutez un script /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
citronnelle
la source
1
Au début, je pensais que votre chemin (déverrouillage actif) est plus élégant que celui de l'autre réponse (qui se verrouille activement). Mais j'ai remarqué que la vôtre a une propriété étrange: si je verrouille activement mon écran, je veux qu'il soit verrouillé jusqu'à ce que le mot de passe soit entré. Cependant, votre script déverrouillerait l'écran si l'ordinateur était suspendu pendant une courte période alors que l'écran était déjà verrouillé. C'est pourquoi j'ai accepté l'autre réponse.
UTF-8
En effet, ce serait un problème =)
lemonsqueeze
-2

Je peux t'aider avec ça. Tout d'abord, accédez aux paramètres. Sélectionnez ce paramètre:

Luminosité et verrouillage

Il y aura un menu déroulant qui dit que l'écran s'éteint.

Screen_Turns_Off

Après avoir cliqué sur le menu déroulant, modifiez les deux paramètres pour qu'ils ressemblent à ceci:

Écran verrouillé

BJsgoodlife
la source
Cela ne fonctionne pas. J'ai réglé le temps à 30 secondes pour les tests. Comme ça , j'ai dû entrer mon mot de passe même après avoir suspendu l'ordinateur pendant seulement 5 secondes. Comme ça , je suis arrivé directement sur mon bureau même après avoir suspendu mon ordinateur pendant 3 minutes.
UTF-8
Désolé, j'ai oublié une étape.
BJsgoodlife
Cela ne laisse pas l'ordinateur dans un état déverrouillé pendant un nombre prédéterminé de minutes après le début de la suspension comme l'OP spécifié. En fait, il le verrouille immédiatement au démarrage de la suspension.
b_laoshi