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

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

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

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

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

等待桌面加载所需的秒数是任意的,可以根据具体情况而改变。 一旦系统负载下降,请尝试使用以下命令运行启动应用程序,而不是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 

将其保存为~/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'" 。 对于比这更复杂的事情,你可能最好只修改脚本的副本,并使用硬编码的命令。

我发现只使用sleep 10 && COMMAND作为命令名称不起作用。 我有太早的conky和xchat加载问题,并以某种方式损坏。 我不得不写一个名为~/bin/startup的小脚本并将其放入其中:

 #!/bin/bash sleep 10 xchat & conky & 

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

如果您倾向于这样,每个应用程序可以有一个文件。

使用’sleep’命令。

在系统 – >首选项 – >启动应用程序中,编辑要延迟的程序的命令:

 sleep 10 && COMMAND 

将10替换为您希望它等待的秒数,并使用命令框中的命令进行命令。