web-dev-qa-db-fra.com

Comment verrouiller l'écran 30 minutes après le déverrouillage

J'aimerais que mes enfants n'utilisent l'ordinateur que pendant 30 minutes, heure à laquelle j'aimerais que l'écran soit verrouillé. À ce stade, si je choisis de déverrouiller l'écran à nouveau, j'aimerais que l'écran se verrouille à nouveau dans 30 minutes.

Comment puis-je écrire un script pour faire cela?

8
aam

Exécutez le script ci-dessous en arrière-plan, et l'écran sera verrouillé après un nombre arbitraire de minutes:

Le scénario

#!/usr/bin/env python3
import subprocess
import time
import sys

t = 0; max_t = int(sys.argv[1])

while True:
    # check runs once per minute
    time.sleep(60)
    # check the lock status, add 1 to current time if not locked, else t = 0
    try:
        subprocess.check_output(["pgrep", "-cf", "lockscreen-mode"]).decode("utf-8").strip()
        t = 0
    except subprocess.CalledProcessError:
        t += 1
    # if unlocked status time exceeds set time (in minutes), lock screen
    if t >= max_t:
        subprocess.Popen(["gnome-screensaver-command",  "-l"])
        t = 0

Comment utiliser

  • Copiez le script dans un fichier vide, enregistrez-le sous le nom lock_screen.py
  • Testez-le depuis un terminal avec le temps de verrouillage comme argument (minutes)

    python3 /path/to/lock_screen.py 30
    

    (Bien que pour le test, je prendrais un temps plus court)

  • Si tout fonctionne correctement, ajoutez-le à Démarrer> Applications de démarrage> Applications de démarrage> Ajouter. Ajoutez la commande:

    python3 /path/to/lock_screen.py 30
    
4
Jacob Vlijm

Le script présenté ci-dessous commence à la connexion de l'utilisateur et attend un certain temps avant de verrouiller l'écran. Il faut garder à l’esprit deux mises en garde: le script doit faire partie des applications de démarrage et il doit être exécutable.

Le temps de chaque session peut être configuré dans le script lui-même en modifiant la variable TIME, en fonction de l'utilisation de /bin/sleep. De man sleep:

Pause pendant NUMBER secondes. SUFFIX peut être 's' pour les secondes (valeur par défaut), 'm' pour les minutes, 'h' pour les heures ou 'd' pour les jours. Contrairement à la plupart des mises en œuvre qui exigent que NUMBER soit un entier, NUMBER peut être un nombre à virgule flottante arbitraire.

Le script peut être démarré manuellement ou dans le cadre d'applications de démarrage pour être appelé à chaque connexion à l'interface graphique. Reportez-vous à Comment démarrer des applications automatiquement lors de la connexion? pour cela.

Configuration simple

  1. Créez un dossier nommé bin dans votre dossier personnel.
  2. Dans le dossier bin, créez un fichier nommé sessionLocker.sh. Copiez le code source dans ce fichier
  3. Donnez des autorisations exécutables au fichier en faisant un clic droit dessus, allez dans Propriétés -> onglet Autorisations, cochez l'option "Autoriser l'exécution du fichier en tant que programme". Sinon, utilisez chmod +x $HOME/bin/sessionLocker.sh dans le terminal
  4. Exécuter applications de démarrage . Ajoutez un chemin complet au script parmi les applications de démarrage. Exemple: /home/MYUSERNAME/bin/sessionLocker.sh
  5. Restat votre session Unity pour tester.

Le script est également affiché sur mon github personnel. Utilisez git clone https://github.com/SergKolo/sergrep.git pour télécharger le code source.

Source du script

#!/bin/bash
##################################################
# AUTHOR: Serg Kolo 
# Date: Jan 2nd 2016
# Description: A script that locks session every x
#       minutes. 
# TESTED ON: 14.04.3 LTS, Trusty Tahr
# WRITTEN FOR: https://askubuntu.com/q/715721/295286
# Depends: qbus, dbus, Unity desktop
###################################################

# Copyright (c) 2016 Serg Kolo
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal in 
# the Software without restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 
# the Software, and to permit persons to whom the Software is furnished to do so, 
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all 
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


##############
# INTRODUCTION
##############

# This script locks user session every x minutes, and repeats this task
# upon user re-logging in. Useful for creating session for children, study session
# for college students, pomodoro sessions for self-learners ,etc.
#
# This can be started manually or as part of Startup Applications 

###########
# VARIABLES
###########
TIME="30m"

##########
# MAIN
##########
while [ 1 ]; 
do
  # Wait the time defined in VARIABLES part and lock the session
  /bin/sleep $TIME &&  qdbus  com.canonical.Unity /com/canonical/Unity/Session com.canonical.Unity.Session.Lock

  # Continuously query dbus every 0.25 seconds test whether session is locked
  # Once this sub-loop breaks, the main one can resume the wait and lock cycle.
  while [ $(qdbus  com.canonical.Unity /com/canonical/Unity/Session com.canonical.Unity.Session.IsLocked) == "true" ];
  do
    /bin/sleep 0.25 && continue
  done
done
2