Comment puis-je réduire le temps de connexion en différant / retardant certaines applications de démarrage?


11

J'ai configuré certaines applications pour démarrer automatiquement à chaque connexion (par exemple, redshift-gtk, gtg) mais après les avoir ajoutées aux applications de démarrage ( System -> Preferences -> Startup Applications), le temps de connexion a évidemment 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 suis obligé d'attendre.

Je n'ai pas besoin que ces applications soient disponibles immédiatement, mais ce serait bien qu'elles démarrent finalement, pendant ce temps, le menu / panneau Ubuntu est disponible pour exécuter d'autres applications dont je pourrais avoir besoin.

J'ai essayé d'utiliser la commande at, 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 ne reçoivent pas les variables d'environnement nécessaires (comme DISPLAY).

Est-ce à cela que nicesert la commande? Avez-vous d'autres idées sur la façon dont je peux y parvenir? Si possible, je voudrais éviter de modifier les commandes des applications de démarrage, car cela signifierait beaucoup d'efforts pour répliquer sur d'autres machines que j'utilise.


@Riccardo Murri - Vous avez raison. J'ai maintenant modifié le titre de ma question pour mieux exprimer mon intention.
koushik

Je serais sûr de couper les programmes et services de démarrage aussi, si ce n'est pas déjà fait.
aperson

Réponses:


11

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 les éléments suivants pour exécuter les applications de démarrage dès que la charge 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-lowet 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 transmet uniquement la DISPLAYvariable d'environnement à l'application. Pour la plupart des applications de bureau, ce sera tout ce dont vous avez besoin. Cela dit, assurez-vous de prendre en compte tous les cas spéciaux et gardez ce fait à l'esprit lorsque vous dépannez tout ce qui ne se comporte pas correctement. Un bon point de départ si vous pensez qu'une application peut nécessiter le passage d'autres variables d'environnement est printenvla documentation de l'application, bien que 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, donc les applications retardées ne devraient pas accidentellement démarrer 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 beaucoup, alors corrigez-moi si je me trompe ici.
  • batchaffecte uniquement lorsque les applications sont exécutées; cela ne modifie pas leur priorité / gentillesse.
  • Cela devrait aller de soi, mais si votre système a toujours une charge élevée, les applications planifiées à l'aide de cette méthode risquent de ne jamais s'exécuter.
  • Si vous avez besoin d'exécuter une application avec un paramètre contenant des espaces, vous pouvez leur é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.

aendruk, merci. cela ressemble à l'approche optimale. 2 doutes subsistent, DISPLAY est-il la seule variable nécessaire aux applications de mon environnement actuel qui n'est pas transmise par batch? De plus, est-il possible que la charge du processeur diminue avant que le bureau n'ait complètement terminé le chargement (par exemple, en attendant que le disque soit chargé pour certaines icônes) et que ces applications démarrent, ce qui se traduit par une situation similaire à celle d'avant? En d'autres termes, les commandes s'exécutent-elles avec une priorité intrinsèquement inférieure qui donne lorsque d'autres applications veulent s'exécuter?
koushik

@koushik Merci d'avoir soulevé ces points. J'ai mis à jour ma réponse pour y répondre.
ændrük

Génial, je cherchais depuis longtemps une solution à ce problème.
levesque

1
Cela m'aide vraiment à réduire le temps de connexion. Juste pour me tenir au courant du démarrage de ces applications, j'ai légèrement modifié votre script pour m'informer lorsque ces applications s'exécutent réellement. De plus, à moins que le processus ne passe à l'arrière-plan, il reste dans la batchfile d'attente comme toujours en cours d'exécution, j'ai donc fait le démarrage du processus en arrière-plan également. La ligne modifiée est la suivante:echo "export DISPLAY=$DISPLAY; notify-send 'Running on Load low' '$1' && $1 &" | batch
koushik

1
@ ændrük Je me réfère toujours au wiki de Greycat lorsque je ne suis pas sûr de la citation et d'autres «meilleures pratiques».
aperson

5

J'ai trouvé que le simple fait d'utiliser le sleep 10 && COMMANDnom de la commande ne fonctionnait pas. J'ai eu des problèmes avec le chargement conky et xchat trop tôt et j'ai été corrompu d'une manière ou d'une autre. J'ai dû écrire un petit script appelé ~/bin/startupet y mettre ceci:

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

Vous devez modifier ses autorisations pour pouvoir l'exécuter chmod +x ~/bin/startup, puis remplacez simplement l'entrée des applications de démarrage par la commande startupet tout se déclenchera dans le script.

Vous pourriez avoir un fichier pour chaque application si vous étiez de cette façon.


De plus, vous pouvez préfixer le fichier ou le dossier avec un point (par exemple ~ / .bin / startup) afin qu'il soit masqué, en d'autres termes, vous ne le voyez pas lorsque vous regardez dans vos dossiers dans nautilus, etc. (enfin ctrl + h pour bascule montrant)
8128

J'ai eu du mal avec une telle solution, parfois ça marchera, parfois ça ne marchera pas. En outre, le sommeil retardera certainement le démarrage de votre bureau.
levesque

1
Le sleepva pas retarder le démarrage. Les applications de démarrage sont non bloquantes, ce qui signifie que plus d'une chose peut être chargée à la fois. sleeping permet au reste de gnome de charger puis charger les choses moins essentielles.
Oli

2

Utilisez la commande «sleep».

Dans Système -> Préférences -> Applications de démarrage, modifiez la commande des programmes que vous souhaitez retarder:

sleep 10 && COMMAND

Remplacez 10 par le nombre de secondes que vous voulez qu'il attende et COMMANDEZ avec ce qui était à l'origine dans la boîte de commande.


Veuillez lire le texte complet de la question: OP se plaint que le démarrage des applications prend trop de temps et demande un moyen de les "détacher" du processus de connexion ("Je n'ai pas besoin que ces applications soient disponibles immédiatement, mais ce serait bien s'ils démarrent éventuellement "). L'ajout d'un «sommeil» devant lui augmentera en fait le temps de démarrage.
Riccardo Murri

Je ne savais pas que le processus de connexion attendait la fin de chaque commande. Peut-être que simplement utiliser COMMAND &(exécuté en arrière-plan) fonctionnerait.
dv3500ea

1
Désolé, mon erreur: le processus de connexion n'attend pas le retour de chaque commande de démarrage. Hélas, je ne peux supprimer mon downvote que si vous éditez le texte de la question ...
Riccardo Murri
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.