Sous Ubuntu 16.04 avec Unity, je le veux
1 minute après avoir éteint l'écran pour l'inactivité, verrouillez l'écran.
lorsque je ferme le couvercle de l'ordinateur portable, ne verrouillez PAS immédiatement l'écran, mais agissez comme si le couvercle était toujours ouvert et verrouillez après 5 + 1 minutes (ou similaire).
Dans Paramètres système → Luminosité et verrouillage, si défini Lock sur ON et configurer le temps approprié (1 minute), il verrouille l'écran en conséquence après qu'il a été éteint pour inactivité. Cependant, il verrouille également l'écran à la fermeture du couvercle, ce que je ne veux pas.
Réglage sur OFF ne verrouille pas l'écran en fermant le couvercle, mais le laisse également déverrouillé après avoir éteint l'écran pour l'inactivité.
J'ai déjà défini les deux "actions de fermeture du couvercle" sur "rien" dans dconf:
$ gsettings get org.gnome.settings-daemon.plugins.power lid-close-ac-action
'nothing'
$ gsettings get org.gnome.settings-daemon.plugins.power lid-close-battery-action
'nothing'
Comment puis-je faire en sorte qu'Ubuntu ne verrouille l'écran qu'après un certain temps d'inactivité de l'utilisateur, quelle que soit la position du couvercle?
Le script d'arrière-plan ci-dessous fera à peu près exactement ce que vous décrivez
#!/usr/bin/env python3
import subprocess
import time
# set screen off after x seconds
off = 300
# lock screen after x seconds
lock = 360
# check idle every x seconds
res = 3
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def test(t, threshold):
return int(t)/1000 < threshold
testoff1 = True
testlock1 = True
t1 = 0
while True:
time.sleep(res)
t2 = get("xprintidle")
testoff2 = test(t2, off); testlock2 = test(t2, lock)
if (testoff2, testoff1) == (False, True):
subprocess.Popen(["xset", "dpms", "force", "off"])
if (testlock2, testlock1) == (False, True):
subprocess.Popen(["gnome-screensaver-command", "-l"])
testoff1 = testoff2; testlock1 = testlock2
Comme vous le mentionnez, vous devez désactiver les actions de couvercle existantes:
gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action 'nothing'
et:
gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action 'nothing'
et plus encore:
gsettings set org.gnome.desktop.screensaver lock-enabled false
et
gsettings set org.gnome.desktop.session idle-delay 0
puisque nous prenons maintenant soin de nos propres procédures.
puis:
Le script utilise xprintidle
, pour vérifier le temps d'inactivité
Sudo apt-get install xprintidle
set_times.py
Dans la section head du script, définissez le temps d'inactivité pour éteindre l'écran (en secondes):
# set screen off after x seconds
off = 300
et le temps de verrouiller l'écran:
# lock screen after x seconds
lock = 360
Ces heures sont réglées indépendamment les unes des autres, vous pouvez définir les deux dans l'ordre que vous souhaitez (soit verrouiller d'abord, puis éteindre, ou l'inverse)
Vous pouvez régler la "résolution" du temps, la fréquence du temps d'inactivité est vérifiée, (et donc le temps réglé est arrondi par):
# check idle every x seconds
res = 3
mais vous pourriez aussi bien
Testez-le:
python3 /path/to/set_times.py
Si tout fonctionne bien, ajoutez-le aux applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:
python3 /path/to/set_times.py
xprintidle
renvoie le temps d'inactivité actuel (aucune entrée de la souris ou du clavier)S'il y a un changement d'état (Vrai -> Faux), n'importe quelle action peut être entreprise. Cela se fait pour les deux éteindre l'écran, en cours d'exécution:
xset dpms force off
et écran de verrouillage, en cours d'exécution:
gnome-screensaver-command -l
Bien sûr, nous pouvons également prendre le temps de désactiver et de verrouiller les arguments de l'écran pour exécuter le script avec:
#!/usr/bin/env python3
import subprocess
import time
import sys
off = int(sys.argv[1]) if len(sys.argv) > 1 else 300
lock = int(sys.argv[2]) if len(sys.argv) > 2 else off + 60
# check idle every x seconds
res = int(sys.argv[3]) if len(sys.argv) > 3 else 5
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def test(t, threshold):
return int(t)/1000 < threshold
testoff1 = True
testlock1 = True
t1 = 0
while True:
time.sleep(res)
t2 = get("xprintidle")
testoff2 = test(t2, off); testlock2 = test(t2, lock)
if (testoff2, testoff1) == (False, True):
subprocess.Popen(["xset", "dpms", "force", "off"])
if (testlock2, testlock1) == (False, True):
subprocess.Popen(["gnome-screensaver-command", "-l"])
testoff1 = testoff2; testlock1 = testlock2
Puis en cours d'exécution:
python3 /path/to/set_times.py 300 360
éteindra l'écran après cinq minutes, verrouillera l'écran après six minutes.
La charge supplémentaire du script est nulle.