![如何通过推迟/延迟一些启动应用程序来减少登录所需的时间?](https://linux22.com/image/1092007/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E6%8E%A8%E8%BF%9F%2F%E5%BB%B6%E8%BF%9F%E4%B8%80%E4%BA%9B%E5%90%AF%E5%8A%A8%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%9D%A5%E5%87%8F%E5%B0%91%E7%99%BB%E5%BD%95%E6%89%80%E9%9C%80%E7%9A%84%E6%97%B6%E9%97%B4%EF%BC%9F.png)
我已经设置了一些应用程序在每次登录时自动启动(例如 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 替换为命令框中原来的内容。