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


11

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

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

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

nice是用于什么命令?还有其他想法我该如何完成?如果可能的话,我要避免编辑启动应用程序命令,因为这意味着要在我使用的其他计算机上进行大量复制。


@Riccardo Murri-你是对的。我现在已经编辑了我的问题标题,以更好地说明我的意图。
koushik

如果您还没有的话,我一定会削减启动程序和服务。
aperson

Answers:


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

将其另存为~/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个疑问,DISPLAY是我当前环境中未传递的应用程序唯一需要的变量batch吗?另外,是否有可能在台式机完全完成加载之前(例如,等待磁盘加载一些图标)并且这些应用程序启动后导致cpu加载减少,从而导致与以前类似的情况?换句话说,这些命令是否以固有的较低优先级运行,从而在其他应用程序要运行时产生优先级?
koushik 2010年

@koushik感谢您提出这些观点。我已更新我的答案以解决这些问题。
ændrük

太棒了,一段时间以来我一直在寻找解决方案。
levesque 2010年

1
现在,这确实帮助我减少了登录时间。为了跟上这些应用程序的最终启动,我对您的脚本进行了一些修改,以告知我这些应用程序何时真正运行。另外,除非进程派生到后台,否则进程batch仍在队列中,因为它仍在运行,所以我也使进程在后台启动。修改后的行如下:echo "export DISPLAY=$DISPLAY; notify-send 'Running on Load low' '$1' && $1 &" | batch
koushik

1
@ændrük 当我不确定引用和其他“最佳实践”时,我总是参考Greycat的Wiki
aperson

5

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

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

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

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


另外,您可以在文件或文件夹前加上句点(例如〜/ .bin / startup),以便将其隐藏,换句话说,当您在鹦鹉螺中的文件夹中查看时,看不到它(按ctrl + h可以切换显示)
8128年

我在使用这样的解决方案时遇到了麻烦,有时它会起作用,有时它不会起作用。另外,睡眠肯定会延迟您的桌面启动。
levesque's

1
sleep不会推迟启动。启动应用程序是非阻塞的,这意味着可以一次加载多个对象。sleeping允许其余的gnome加载,然后加载不必要的东西。
奥利(Oli)

2

使用“睡眠”命令。

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

sleep 10 && COMMAND

将10替换为您希望其等待的秒数,并将COMMAND替换为命令框中的原始命令。


请阅读完整的问题文本:OP抱怨启动应用程序花费的时间太长,并要求一种将其与登录过程“分离”的方法(“我不需要立即使用这些应用程序,但这会很好。如果他们最终启动了”)。在其前面添加“睡眠”实际上会增加启动时间。
Riccardo Murri'9

我没有意识到登录过程会等待每个命令完成。也许仅使用COMMAND &(在后台运行)即可。
dv3500ea 2010年

1
抱歉,我的错:登录过程不会等待每个启动命令返回。las,除非您编辑问题文本,否则我无法删除我的不赞成票
Riccardo Murri,2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.