Domanda Come posso disattivare la sospensione durante il download, ma lo schermo si spegne? [duplicare]


Questa domanda ha già una risposta qui:

Sono su Ubuntu Gnome 15.10.

Sto scaricando regolarmente file di grandi dimensioni (~ 800 MB), ma ho una connessione Internet molto lenta. Di solito ci vuole un tempo relativamente lungo per scaricarlo. Dal momento che non lavoro continuamente sul portatile, passa automaticamente alla modalità sospensione / ibernazione.

Quando premo un tasto qualsiasi dopo che è andato in modalità di sospensione / ibernazione, si riattiva e mi porta alla schermata di accesso.

Sono stato in grado di trovare le impostazioni di alimentazione, che hanno dato sorprendentemente poche opzioni:

power options

Tuttavia, non sono sicuro di un paio di cose

C'è un modo in cui il mio computer non si sospende durante i download, ma il mio schermo è ancora spento quando non ci sto lavorando durante il download? Ci sono delle impostazioni da fare per raggiungere questo o altre soluzioni?


3
2017-12-30 16:52


origine


Questo potrebbe risolvere il tuo problema: askubuntu.com/questions/576525/... - Jacob Vlijm
@JacobVlijm Quindi ho solo cronlo script ogni qualunque cosa minuti? Tuttavia, invece di usare uno script personalizzato, preferirei utilizzare le funzionalità fornite con Ubuntu per questo scopo. (Se ce ne sono) - AvZ
Nono, basta eseguirlo in background, è uno script in background, puoi eseguirlo come un'applicazione di avvio. Il vantaggio è che è possibile impostare tutto in uno script, mentre non sospende in modo selettivo. Vedi le istruzioni nella risposta. - Jacob Vlijm
@JacobVlijm Lo capisco, ma preferirei che lo schermo fosse spento dopo X minuti di inattività mentre i miei download continuano. Può essere fatto? - AvZ
ti piacerebbe una versione modificata dello script, spegnendo lo schermo dopo x inattività? - Jacob Vlijm


risposte:


Sul bordo di un dupe di questa domanda. La differenza con questa domanda è tuttavia che si desidera che il computer non sia sospeso, ma lo schermo si spegne comunque durante il download di file di grandi dimensioni. Anche se apparentemente una piccola differenza, è così fa fare una differenza sostanziale nella risposta (script).

A proposito della soluzione

  • La soluzione è a sceneggiatura di sfondo per eseguire come applicazione di avvio, che disabiliterà la sospensione per tutto il tempo che il download richiede.
  • Allo stesso tempo, a secondo thread all'interno della sceneggiatura, tiene traccia del tempo di inattività con l'aiuto di xprintidle. xprintidle è attivato da eventi tastiera e mouse. Dopo un tempo arbitrario, per impostare il capo dello script, il thread chiude lo / i schermo / i, mentre l'altro (principale) thread impedisce la sospensione fino a quando il download è attivo.

    Il download è notato da una modifica delle dimensioni della cartella Download, misurata periodicamente tramite verifiche, utilizzando du -ks ~/Downloads; se la dimensione della cartella non cambia più durante cinque minuti, lo script presuppone che il download sia completato. Quindi, consente nuovamente di sospendere.

Nota

  • Come sempre (dovrebbe essere) con gli script in background, il carico aggiuntivo del processore è nihil.

Il copione

#!/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


Come usare

  1. Lo script usa xprintidle:

    sudo apt-get install xprintidle
    
  2. Copia lo script qui sotto in un file vuoto, salvalo come no_suspend.py

  3. Nella sezione head della sceneggiatura, imposta il tempo di sospensione "normale" desiderato (poiché lo script riattiverà la sospensione) e il tempo prima che desideri che lo schermo si chiuda:

    #--- set suspend time below (seconds)
    suspend_wait = 300 # = 5 minutes
    #--- set time after which screen should blackout (seconds)
    blackout = 300 # = 5 minutes
    
  4. Se vuoi, tu può imposta altri valori:

    #--- 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. Prova: esegui lo script con il comando:

    python3 /path/to/no_suspend.py
    
  6. Se tutto funziona correttamente, aggiungilo alle applicazioni di avvio: Dash> Applicazioni di avvio> aggiungi il comando:

    python3 /path/to/no_suspend.py
    

1
2017-12-30 21:08