首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在下载期间禁用挂起,但屏幕仍将关闭?

如何在下载期间禁用挂起,但屏幕仍将关闭?
EN

Ask Ubuntu用户
提问于 2015-12-30 16:52:38
回答 1查看 3.6K关注 0票数 2

我在Ubuntu Gnome 15.10上。

我经常下载大文件(~800 MB),但我有一个非常缓慢的互联网连接。通常需要相当长的时间才能下载。因为我没有连续地在笔记本电脑上工作,所以它会自动进入睡眠/休眠模式。

当我按下进入睡眠/休眠模式后的任意键,它就会醒来,并带我到登录屏幕。

我找到了电源设置,这给了我令人惊讶的很少选择:

不过,有几件事我不太确定

是否有一种方式,使我的计算机在下载期间不挂起,但我的屏幕仍然关闭,当我不工作,在下载期间?是否需要设置设置以实现这一目标,或其他解决方案?

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2015-12-30 21:08:34

这个问题欺骗的边缘。然而,这个问题的不同之处在于,您希望计算机不被挂起,但是在下载大型文件时屏幕仍然关闭。虽然看起来差别很小,但在答案(脚本)上确实有很大的不同。

关于解决方案

  • 该解决方案是作为启动应用程序运行的后台脚本,该脚本将在下载期间禁用挂起。
  • 同时,脚本中的第二个线程在xprintidle的帮助下跟踪空闲时间。xprintidle由键盘和鼠标事件触发。在任意时间之后,要在脚本的顶部设置,线程关闭屏幕(S),而另一个(主)线程防止挂起,只要下载是活动的。通过使用du -ks ~/Downloads定期检查,下载文件夹的大小发生了变化,从而注意到了下载;如果文件夹的大小在5分钟内不再更改,则脚本假定下载将完成。然后,重新启用挂起。

Note

  • 与通常(-应该是)的背景脚本一样,额外的处理器负载是nihil。

脚本

代码语言:javascript
运行
复制
#!/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 install xprintidle
  2. 将下面的脚本复制到一个空文件中,保存为no_suspend.py
  3. 在脚本的head部分中,设置所需的“正常”挂起时间(因为脚本将重新启用挂起),以及希望屏幕关闭之前的时间:#--将挂起时间设置在以下(秒) suspend_wait = 300 #=5分钟#--设置屏幕应在哪之后断电(秒)断电= 300 #=5分钟。
  4. 如果您愿意,您可以设置其他值:#--您可以在下面更改值,但我会保留它们,因为它们是speed_limit =0#,设置一个最小速度(kb/秒),被认为是一个下载活动循环时间= 20 #时间间隔,检查之间的间隔(以秒为单位) download_wait = 300 # time (秒)在挂起之前等待重新激活#
  5. 测试-使用命令运行脚本: python3 /path/to/no_stanend.py
  6. 如果一切正常,将其添加到启动应用程序中: Dash >> add命令: python3 /path/ to /no_stanend.py
票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/715086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档