J'ai configuré certaines applications pour qu'elles démarrent à chaque connexion (par exemple, redshift-gtk, gtg) automatiquement, mais après les avoir ajoutées aux applications de démarrage (System -> Preferences -> Startup Applications
) évidemment le temps de connexion a augmenté. En raison de tout cela, le temps qu'il faut pour que mes panneaux, mon bureau, etc. apparaissent est trop long - jusqu'à ce que je sois obligé d'attendre.
Je n'ai pas besoin que ces applications soient disponibles immédiatement, mais il serait bon qu'elles démarrent éventuellement, en attendant que le menu/panneau Ubuntu soit disponible pour exécuter d'autres applications dont je pourrais avoir besoin.
J'ai essayé d'utiliser at command, avec l'intention de modifier toutes les applications de démarrage pour mettre les commandes dans la file d'attente at, mais cela n'a pas fonctionné car les applications n'obtiennent pas les variables d'environnement nécessaires (comme DISPLAY).
Est-ce que c'est nice
la commande est-elle utilisée ? D'autres idées comment je peux accomplir cela? Si possible, j'aimerais éviter de modifier les commandes des applications de démarrage, car cela signifierait beaucoup d'efforts pour les répliquer sur d'autres machines que j'utilise.
Réponse acceptée :
Le nombre de secondes nécessaires pour attendre le chargement de votre bureau est arbitraire et peut changer en fonction de la situation. Au lieu de sleep
, essayez d'utiliser ce qui suit pour exécuter les applications de démarrage dès que la charge du système a diminué :
(Edit :Ajout de la suggestion de 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
Enregistrez-le sous ~/bin/run-when-load-low
et ajoutez run-when-load-low 'COMMAND'
dans les préférences des applications de démarrage.
Remarques sur cette méthode :
- Le script ci-dessus est ce qui a fonctionné pour moi. Il ne passe que le
DISPLAY
variable d'environnement à l'application. Pour la plupart applications de bureau, ce sera tout ce dont vous avez besoin. Cela dit, assurez-vous de prendre en compte tous les cas particuliers et gardez ce fait à l'esprit lors du dépannage de tout ce qui ne se comporte pas correctement. Un bon endroit pour commencer si vous pensez qu'une application pourrait avoir besoin d'autres variables d'environnement estprintenv
et la documentation de l'application, même si personnellement je n'ai pas encore rencontré ce problème. - Ma compréhension de la valeur de "charge" du système est qu'elle prend en compte les attentes d'E/S, de sorte que les applications retardées ne doivent pas démarrer accidentellement trop tôt pendant les accalmies d'utilisation du processeur causées par les processus de bureau en attente d'E/S. Ce n'est pas un domaine que je connais bien, alors corrigez-moi si je me trompe.
batch
n'affecte que lorsque les applications sont exécutées ; cela ne change pas leur priorité/gentillesse.- Cela devrait aller de soi, mais si votre système toujours a une charge élevée, les applications planifiées à l'aide de cette méthode peuvent ne jamais s'exécuter.
- Si vous devez exécuter une application avec un paramètre contenant des espaces, vous pouvez les échapper en utilisant la barre oblique inverse :
run-when-load-low 'gedit My\ Notes.txt'
. Si vous avez vraiment besoin de passer des paramètres entre guillemets simples à votre application, vous devrez utiliser des guillemets doubles dans la commande de démarrage :run-when-load-low "gedit 'My Notes.txt'"
. Pour quelque chose de plus compliqué que cela, vous feriez probablement mieux de simplement modifier une copie du script avec votre commande codée en dur.