web-dev-qa-db-fra.com

Suspendre la fermeture du couvercle après la temporisation

J'utilise un ordinateur portable avec Ubuntu 16.04, Gnome comme environnement de bureau et LightDM comme gestionnaire de connexion.

Ce que je veux faire, c'est suspendre l'ordinateur une fois le couvercle fermé pendant 30 secondes. Est-ce possible?

1
tjespe

Passer en suspension 30 secondes après la fermeture du couvercle


Désactiver les actions par défaut de fermeture du couvercle

Pour définir une heure spécifique, avant que l'ordinateur ne passe en mode suspension, nous devons désactiver les actions par défaut pour fermer le couvercle. Cela peut être fait par les commandes suivantes:

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"

Actions personnalisées lors de la fermeture du couvercle

Par la suite, nous devons définir des actions alternatives sur la fermeture du couvercle, pour inclure la pause de 30 secondes avant la suspension. Nous pouvons les connecter aux événements existants.

La question est de savoir si les avantages de cela pèsent sur la configuration la plus compliquée qui nécessiterait. Une version scriptée comme ci-dessous consomme pratiquement zéro à la fois de votre processeur et de votre mémoire, même si vous en avez exécuté dix.

L'avantage de l'option scriptée est qu'elle est facilement réversible; il suffit de ne plus l'exécuter et de restaurer vos paramètres d'origine (ou différents).

Le script

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

# set delay time below (seconds)
delay = 30
# set path to lid status file
f = "/proc/acpi/button/lid/LID/state"
# --- set close command below 
close_command = ["systemctl", "suspend"]

def get_state():
    return "open" in open(f).read()

state1 = get_state()

while True:
    time.sleep(3)
    state2 = get_state()
    if state2 != state1:
        t = 0
        while not get_state():
            time.sleep(1); t = t+1
            if t > delay:
                subprocess.Popen(close_command)
                break
    state1 = state2

Comment utiliser

  1. Comme mentionné, désactivez d'abord les actions de fermeture de couvercle par défaut:

    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"
    
  2. Copiez le script dans un fichier vide, enregistrez-le sous delay_lidsuspend.py

  3. Dans la section head du script, certaines valeurs et chemins par défaut sont définis. Très probablement, vous n'avez rien à changer:

    # set delay time below (seconds)
    delay = 30
    # set path to lid status file
    f = "/proc/acpi/button/lid/LID/state"
    # --- set close command below 
    close_command = ["systemctl", "suspend"]
    

    Je ne suis pas sûr que le chemin d'accès à votre fichier d'état du couvercle ("/ proc/acpi/bouton/couvercle/LID/état") soit le même sur chaque ordinateur portable. Testez avec la commande:

    cat /proc/acpi/button/lid/LID/state
    
  4. Testez-exécutez le script en exécutant à partir d'un terminal:

    python3 /path/to/delay_lidsuspend.py
    

    et fermez le couvercle pour voir si cela fonctionne comme prévu (ici, il a parfaitement fonctionné).

  5. Si tout fonctionne bien, ajoutez-le aux applications de démarrage.

3
Jacob Vlijm