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

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

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

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

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

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

答案1

等待桌面加载所需的秒数是任意的,并且会根据情况而变化。除了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'"。对于比这更复杂的事情,您最好只修改脚本副本,并将命令硬编码。

答案2

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

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

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

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

答案3

使用‘睡眠’命令。

在系统 -> 偏好设置 -> 启动应用程序中,编辑您想要延迟的程序的命令:

sleep 10 && COMMAND

将 10 替换为您希望它等待的秒数,并将 COMMAND 替换为命令框中原来的内容。

相关内容