web-dev-qa-db-fra.com

Comment désactiver la suspension pendant le téléchargement, mais l'écran reste éteint?

Je suis sur Ubuntu Gnome 15.10.

Je télécharge régulièrement des fichiers volumineux (~ 800 Mo), mais ma connexion Internet est très lente. Le téléchargement prend généralement un temps relativement long. Comme je ne travaille pas continuellement sur l'ordinateur portable, celui-ci passe automatiquement en mode veille/veille prolongée.

Lorsque j'appuie sur une touche après son passage en mode veille/hibernation, elle se réveille et me conduit à l'écran de connexion.

J'ai été en mesure de trouver les paramètres d'alimentation, ce qui a étonnamment peu d'options:

power options

Cependant, je ne suis pas sûr de certaines choses

Existe-t-il un moyen de ne pas suspendre mon ordinateur pendant les téléchargements, mais mon écran est toujours éteint lorsque je ne travaille pas pendant le téléchargement? Y a-t-il des réglages à faire pour y parvenir ou d'autres solutions?

2
AvZ

Sur le bord d'une dupe de cette question . La différence avec cette question est toutefois que vous souhaitez que l'ordinateur ne soit pas suspendu, mais que l'écran reste éteint pendant le téléchargement de gros fichiers. Bien qu’apparemment une petite différence, cela fait une différence substantielle dans la réponse (script).

A propos de la solution

  • La solution est un script d'arrière-plan à exécuter en tant qu'application de démarrage, qui désactive la suspension tant que le téléchargement prend.
  • En même temps, un deuxième fil à l'intérieur du script assure le suivi du temps d'inactivité à l'aide de xprintidle. xprintidle est déclenché par des événements clavier et souris. Après un délai arbitraire, à définir en tête du script, le thread ferme l'écran ou les écrans, tandis que l'autre thread (principal) empêche la suspension tant que le téléchargement est actif.

    Le téléchargement est remarqué par une modification de la taille du dossier Téléchargements, mesurée par des vérifications périodiques, à l'aide de du -ks ~/Downloads; Si la taille du dossier ne change plus pendant cinq minutes, le script suppose que le téléchargement est terminé. Il active ensuite et réactive la suspension.

Remarque

  • Comme toujours (- devrait être) avec les scripts d’arrière-plan, la charge supplémentaire du processeur est nihil.

Le scénario

#!/usr/bin/env python3
import subprocess
import time
from threading import Thread

def get_size():
    return int(subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").split()[0])

def get(cmd):
    return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")


#--- set suspend time below (seconds)
suspend_wait = 300 # = 5 minutes
#--- set time after which screen should blackout (seconds)
blackout = 300 # = 5 minutes


#--- you can change values below, but I'd leave them as they are
speed_limit = 0      # set a minimum speed (kb/sec) to be considered a download activity
looptime = 20        # time interval between checks
download_wait = 300  # time (seconds) to wait after the last download activity before suspend is re- activated
#---

t = 0
key = ["gsettings", "get", "org.gnome.settings-daemon.plugins.power", "sleep-inactive-ac-timeout", "set"]
set_suspend = key[0]+" "+key[-1]+" "+(" ").join(key[2:4])
get_suspend = (" ").join(key[0:4])
check_1 = int(get("du -ks ~/Downloads").split()[0])

def get_idle(blackout):
    shutdown = False
    while True:
        curr_idle = int(subprocess.check_output(["xprintidle"]).decode("utf-8").strip())/1000
        time.sleep(10)
        if curr_idle > blackout:
            if shutdown == False:
                subprocess.Popen(["xset", "-display", ":0.0", "dpms", "force", "off"])
                shutdown = True
                print("shutting down")
            else:
                pass
        else:
            shutdown = False

Thread(target=get_idle, args=(blackout,)).start()

while True:
    time.sleep(looptime)
    try:
        check_2 = int(get("du -ks ~/Downloads").split()[0])
    except subprocess.CalledProcessError:
        pass
    speed = int((check_2 - check_1)/looptime)
    # check current suspend setting
    suspend = get(get_suspend).strip()
    if speed > speed_limit:
        # check/set disable suspend if necessary
        if suspend != "0":
            subprocess.Popen(["/bin/bash", "-c", set_suspend+" 0"])
        t = 0
    else:
        if all([t > download_wait/looptime, suspend != str(download_wait)]):
            # check/enable suspend if necessary
            subprocess.Popen(["/bin/bash", "-c", set_suspend+" "+str(suspend_wait)])
    check_1 = check_2
    t = t+1


Comment utiliser

  1. Le script utilise xprintidle:

    Sudo apt-get install xprintidle
    
  2. Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous le nom no_suspend.py

  3. Dans la section head du script, définissez le délai de suspension "normal" souhaité (car le script réactivera la suspension) et le délai précédant la fermeture de l'écran:

    #--- set suspend time below (seconds)
    suspend_wait = 300 # = 5 minutes
    #--- set time after which screen should blackout (seconds)
    blackout = 300 # = 5 minutes
    
  4. Si vous le souhaitez, vous pouvez définir d'autres valeurs:

    #--- you can change values below, but I'd leave them as they are
    speed_limit = 0      # set a minimum speed (kb/sec) to be considered a download activity
    looptime = 20        # time interval between checks (in seconds)
    download_wait = 300  # time (seconds) to wait after the last download activity before suspend is re- activated
    #---
    
  5. Test - lancez le script avec la commande:

    python3 /path/to/no_suspend.py
    
  6. Si tout fonctionne correctement, ajoutez-le à vos applications de démarrage: Dash> Applications de démarrage> ajoutez la commande suivante:

    python3 /path/to/no_suspend.py
    
0
Jacob Vlijm