He configurado algunas aplicaciones para que se inicien en cada inicio de sesión (por ejemplo, redshift-gtk, gtg) automáticamente, pero después de agregarlas a las aplicaciones de inicio (System -> Preferences -> Startup Applications
) obviamente, el tiempo necesario para iniciar sesión ha aumentado. Debido a todo esto, el tiempo que tardan en aparecer mis paneles, escritorio, etc. es demasiado largo, hasta lo cual me veo obligado a esperar.
No necesito que estas aplicaciones estén disponibles de inmediato, pero sería bueno que eventualmente se inicien, mientras tanto, el menú/panel de ubuntu está disponible para ejecutar otras aplicaciones que pueda necesitar.
Intenté usar at command, con la intención de editar todas las aplicaciones de inicio para colocar los comandos en la cola at, pero esto no funcionó ya que las aplicaciones no obtienen las variables de entorno necesarias (como DISPLAY).
¿Es esto lo que nice
¿Para qué sirve el comando? ¿Alguna otra idea de cómo puedo lograr esto? Si es posible, me gustaría evitar editar los comandos de las aplicaciones de inicio, ya que esto significaría mucho esfuerzo para replicar en otras máquinas que uso.
Respuesta aceptada:
La cantidad de segundos necesarios para esperar a que se cargue su escritorio es arbitraria y puede cambiar según la situación. En lugar de sleep
, intente usar lo siguiente para ejecutar aplicaciones de inicio tan pronto como la carga del sistema haya disminuido:
(Editar:se agregó la sugerencia 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
Guárdelo como ~/bin/run-when-load-low
y agrega run-when-load-low 'COMMAND'
en Preferencias de aplicaciones de inicio.
Notas sobre este método:
- La secuencia de comandos anterior es lo que funcionó para mí. Solo pasa el
DISPLAY
variable de entorno a la aplicación. Para la mayoría aplicaciones de escritorio esto será todo lo que necesita. Dicho esto, asegúrese de considerar cualquier caso especial y tenga este hecho en cuenta al solucionar cualquier problema que no se comporte correctamente. Un buen lugar para comenzar si cree que una aplicación podría necesitar que se pasen otras variables de entorno esprintenv
y la documentación de la aplicación, aunque personalmente no me he encontrado con este problema todavía. - Entiendo que el valor de "carga" del sistema es que sí tiene en cuenta las esperas de E/S, por lo que las aplicaciones retrasadas no deberían iniciarse accidentalmente demasiado pronto durante las pausas en el uso de la CPU causadas por los procesos de escritorio que esperan en E/S. Sin embargo, esta no es un área sobre la que sepa mucho, así que corríjame si me equivoco aquí.
batch
solo afecta cuando se ejecutan las aplicaciones; no altera su prioridad/amabilidad.- Esto debería ser evidente, pero si su sistema siempre tiene una carga alta, es posible que las aplicaciones programadas con este método nunca se ejecuten.
- Si necesita ejecutar una aplicación con un parámetro que contiene espacios, puede escaparlos usando la barra invertida:
run-when-load-low 'gedit My\ Notes.txt'
. Si realmente necesita pasar parámetros entre comillas simples a su aplicación, deberá usar comillas dobles en el comando de inicio:run-when-load-low "gedit 'My Notes.txt'"
. Para algo más complicado que esto, probablemente sea mejor que simplemente modifique una copia del script con su comando codificado.