如何通过推迟/延迟某些启动应用程序来减少登录所需的时间?

kou*_*hik 11 gnome startup

我已经设置了一些应用程序以在每次登录时自动启动(例如,redshift-gtk、gtg),但是在将这些添加到启动应用程序 ( System -> Preferences -> Startup Applications) 后,登录所需的时间显然增加了。由于所有这些,我的面板、桌面等出现的时间太长了 - 直到我被迫等待。

我不需要这些应用程序立即可用,但如果它们最终启动会很好,同时 ubuntu 菜单/面板可用于运行我可能需要的其他应用程序。

我尝试使用 at 命令,目的是编辑所有启动应用程序以将命令放入 at 队列,但这不起作用,因为应用程序没有获得必要的环境变量(如 DISPLAY)。

这是什么nice命令用于?我还有什么其他想法可以做到这一点吗?如果可能,我希望避免编辑启动应用程序命令,因为这意味着要在我使用的其他机器上进行复制需要付出很多努力。

ænd*_*rük 11

等待桌面加载所需的秒数是任意的,可以根据情况变化。代替sleep,尝试使用以下方法在系统负载下降后立即运行启动应用程序:

(编辑:添加了 koushik 的建议。)

#!/bin/bash
# 
# Delays running an application until the system load has declined.
# 
# Usage:
#   run-when-load-low 'your command here'

echo "export DISPLAY=$DISPLAY; $1 &" | batch

exit 0
Run Code Online (Sandbox Code Playgroud)

将其另存为~/bin/run-when-load-low并添加run-when-load-low 'COMMAND'到启动应用程序首选项中。

此方法的注意事项:

  • 上面的脚本对我有用。它仅将DISPLAY环境变量传递给应用程序。对于大多数桌面应用程序,这将是您所需要的。话虽如此,请务必考虑任何特殊情况,并在对任何行为不正常的问题进行故障排除时牢记这一事实。如果您认为应用程序可能需要传递其他环境变量,那么一个很好的起点是printenv应用程序的文档,尽管我个人还没有遇到过这个问题。
  • 我对系统“负载”值的理解是它确实考虑了 IO 等待,因此在等待 IO 的桌面进程导致 CPU 使用率停滞期间,延迟的应用程序不应意外启动。这不是我了解的领域,所以如果我在这里错了,请纠正我。
  • batch仅影响应用程序何时运行;它不会改变他们的优先级/友好度。
  • 这不言而喻,但如果您的系统始终具有高负载,则使用此方法调度的应用程序可能永远不会运行。
  • 如果您需要使用包含空格的参数运行应用程序,您可以使用反斜杠转义它们:run-when-load-low 'gedit My\ Notes.txt'。如果确实需要将单引号参数传递给应用程序,则必须在启动命令中使用双引号:run-when-load-low "gedit 'My Notes.txt'". 对于比这更复杂的任何事情,您最好只使用硬编码命令修改脚本的副本。


Oli*_*Oli 5

我发现仅用sleep 10 && COMMAND作命令名称不起作用。我在过早加载 conky 和 ​​xchat 并且以某种方式损坏时遇到了问题。我不得不编写一个名为的小脚本~/bin/startup并将其放入其中:

#!/bin/bash
sleep 10
xchat &
conky &
Run Code Online (Sandbox Code Playgroud)

您需要更改其权限以允许执行,chmod +x ~/bin/startup然后只需用命令替换启动应用程序条目,startup它就会触发脚本中的所有内容。

如果您愿意,您可以为每个应用程序创建一个文件。