Как отключить режим ожидания во время загрузки, но экран все равно отключится? [дубликат]

На этот вопрос уже есть ответ здесь:

Я использую Ubuntu Gnome 15.10.

Я регулярно загружаю файлы большого размера (~ 800 МБ), но у меня очень медленное подключение к Интернету. Обычно загрузка занимает относительно много времени. Поскольку я не работаю постоянно на портативном компьютере, он автоматически переходит в режим сна / гибернации.

Когда я нажимаю любую клавишу после перехода в режим сна / гибернации, он просыпается и переводит меня на экран входа в систему.

Мне удалось найти параметры питания, которые дали на удивление мало вариантов:

power options

Однако я не уверен в нескольких вещах

Есть ли способ, которым мой компьютер не приостанавливается во время загрузки, но мой экран по-прежнему отключается, когда я не работаю над ним во время загрузки? Существуют ли настройки для достижения этого или других решений?

2
задан 31 December 2015 в 10:23

1 ответ

На краю простофили этого вопроса. Различие с тем вопросом однако, что Вы хотите компьютер, не приостановленный, но экран, все еще отключенный во время загрузки больших файлов, тем не менее. Хотя по-видимому небольшая разница, это действительно имеет существенное значение в ответе (сценарий).

О решении

  • Решением является фоновый сценарий для выполнения как Приложение Запуска, которое отключит, приостанавливают столько, сколько загрузка берет.
  • В то же время, второй поток в сценарии, отслеживает время простоя с помощью xprintidle. xprintidle инициирован клавиатурой - и события от нажатия мыши. После произвольного момента времени, для установки в заголовке сценария поток закрывает экран (экраны), в то время как другой (основной) поток предотвращает, приостанавливают столько, сколько загрузка активна.

    Загрузка замечена изменением в размере папки Downloads, как измеряется периодически проверками, с помощью du -ks ~/Downloads; если размер папки не изменяется еще в течение пяти минут, сценарий предполагает, что загрузка закончена. Это затем и пере - включает, приостанавливают.

Примечание:

  • Как всегда (-должен быть) с фоновыми сценариями, дополнительная загрузка процессора является ничем.

Сценарий

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


Как использовать

  1. Использование сценария xprintidle:

    sudo apt-get install xprintidle
    
  2. Скопируйте сценарий ниже в пустой файл, сохраните его как no_suspend.py

  3. В главном разделе сценария, устанавливает желаемое "нормальное", приостанавливают время (так как сценарий будет пере - включать, приостанавливают), и время, прежде чем Вы хотели бы, чтобы экран закрылся:

    #--- set suspend time below (seconds)
    suspend_wait = 300 # = 5 minutes
    #--- set time after which screen should blackout (seconds)
    blackout = 300 # = 5 minutes
    
  4. Если Вы хотите, можно установить другие значения:

    #--- 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. Тестовый прогон сценарий с командой:

    python3 /path/to/no_suspend.py
    
  6. Если все хорошо работает, добавьте его к своим Приложениям Запуска: Тире> Приложения Запуска> добавляет команду:

    python3 /path/to/no_suspend.py
    
0
ответ дан 2 December 2019 в 23:30

Другие вопросы по тегам:

Похожие вопросы: