¿Cómo puedo reducir el tiempo necesario para iniciar sesión posponiendo / retrasando algunas aplicaciones de inicio?

11

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 que me veo obligado a esperar.

No necesito que estas aplicaciones estén disponibles de inmediato, pero sería bueno que eventualmente se inicien, mientras que el menú / panel de ubuntu está disponible para ejecutar otras aplicaciones que pueda necesitar.

Intenté usar el comando at, con la intención de editar todas las aplicaciones de inicio para poner los comandos en la cola at, pero esto no funcionó ya que las aplicaciones no obtienen las variables de entorno necesarias (como DISPLAY).

¿Para esto nicese usa 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 un gran esfuerzo para replicar en otras máquinas que uso.

koushik
fuente
@Riccardo Murri - Tienes razón. Ahora he editado el título de mi pregunta para expresar mejor mi intención.
koushik
Me aseguraría de recortar los programas y servicios de inicio también, si aún no lo ha hecho.
persona el

Respuestas:

11

El número de segundos necesarios para esperar a que se cargue su escritorio es arbitrario 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-lowy agregue run-when-load-low 'COMMAND'Preferencias de aplicaciones de inicio.

Notas sobre este método:

  • El guión de arriba es lo que me ha funcionado. Solo pasa la DISPLAYvariable de entorno a la aplicación. Para la mayoría de las aplicaciones de escritorio, esto será todo lo que necesita. Dicho esto, asegúrese de considerar cualquier caso especial y tenga en cuenta este hecho al solucionar cualquier problema que no se esté comportando correctamente. Un buen lugar para comenzar si cree que una aplicación puede necesitar que se pasen otras variables de entorno es printenvla documentación de la aplicación, aunque personalmente todavía no me he encontrado con este problema.
  • Entiendo que el valor de "carga" del sistema es que tiene en cuenta las esperas de IO, por lo que las aplicaciones retrasadas no deberían iniciarse accidentalmente demasiado pronto durante los períodos de inactividad del uso de la CPU causados ​​por los procesos de escritorio que esperan en IO. Sin embargo, esta no es un área que conozca mucho, así que corríjame si me equivoco aquí.
  • batchsolo afecta cuando se ejecutan aplicaciones; no altera su prioridad / amabilidad.
  • Esto debería ser evidente, pero si su sistema siempre tiene una carga alta, las aplicaciones programadas con este método podrían nunca ejecutarse.
  • Si necesita ejecutar una aplicación con un parámetro que contiene espacios, puede escapar de ellos usando la barra invertida: run-when-load-low 'gedit My\ Notes.txt'. Si realmente necesita para pasar parámetros entre comillas simples para su aplicación, que tendrá que utilizar 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 modificar una copia del script con su comando codificado.
ændrük
fuente
aendruk, gracias. Esto suena como el enfoque óptimo. Quedan 2 dudas, ¿es DISPLAY la única variable que necesitan las aplicaciones de mi entorno actual que no se pasa batch? Además, ¿es posible que la carga de la CPU se reduzca antes de que el escritorio haya terminado de cargarse por completo (por ejemplo, esperando que se carguen algunos íconos en el disco) y que estas aplicaciones comiencen a producir una situación similar a la anterior? En otras palabras, ¿los comandos se ejecutan con prioridad inherentemente inferior por lotes que producen cuando otras aplicaciones quieren ejecutarse?
koushik
@koushik Gracias por mencionar estos puntos. He actualizado mi respuesta para abordarlos.
ændrük
Impresionante, había estado buscando una solución a este problema por un tiempo.
levesque
1
Esto realmente me está ayudando a reducir el tiempo de inicio de sesión. Solo para estar al tanto de estas aplicaciones que finalmente se inician, modifiqué un poco su script para informarme cuando estas aplicaciones realmente se ejecutan. Además, a menos que el proceso se bifurque en segundo plano, permanece en la batchcola como todavía ejecutándose, por lo que también hice que el proceso se inicie en segundo plano. La línea modificada es la siguiente:echo "export DISPLAY=$DISPLAY; notify-send 'Running on Load low' '$1' && $1 &" | batch
koushik
1
@ ændrük Siempre me refiero a la wiki de Greycat cuando no estoy seguro acerca de las citas y otras 'mejores prácticas'.
persona
5

Descubrí que solo usar sleep 10 && COMMANDcomo nombre de comando no funcionaba. Tuve problemas con la carga de conky y xchat demasiado pronto y me corrompí de alguna manera. Tuve que escribir un pequeño guión llamado ~/bin/startupy poner esto en él:

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

Debe cambiar sus permisos para poder ejecutarlos chmod +x ~/bin/startupy luego reemplazar la entrada de las aplicaciones de inicio con el comando startupy disparará todo en el script.

Podría tener un archivo para cada aplicación si estuviera inclinado de esa manera.

Oli
fuente
Además, podría prefijar el archivo o la carpeta con un punto (por ejemplo, ~ / .bin / startup) para que esté oculto, en otras palabras, no lo verá cuando busque en sus carpetas en nautilus, etc. (bueno ctrl + h para mostrar alternar)
8128
He tenido problemas con tal solución, a veces funcionará, a veces no funcionará. Además, la suspensión definitivamente retrasará el arranque de su escritorio.
levesque
1
El sleepva a no retrasar el arranque. Las aplicaciones de inicio no bloquean, lo que significa que se puede cargar más de una cosa a la vez. sleeping permite que el resto del gnomo se cargue y luego cargue las cosas menos esenciales.
Oli
2

Use el comando 'dormir'.

En Sistema -> Preferencias -> Aplicaciones de inicio, edite el comando para los programas que desea retrasar para:

sleep 10 && COMMAND

Reemplace 10 con el número de segundos que desea que espere y COMANDÉ con lo que estaba originalmente en el cuadro de comando.

dv3500ea
fuente
Lea el texto completo de la pregunta: OP se queja de que iniciar las aplicaciones lleva demasiado tiempo y pide una forma de "separarlas" del proceso de inicio de sesión ("No necesito que estas aplicaciones estén disponibles de inmediato, pero sería bueno si eventualmente se inician "). Agregar un "modo de suspensión" delante hará que el tiempo de inicio sea mayor.
Riccardo Murri
No me di cuenta de que el proceso de inicio de sesión esperó a que terminara cada comando. Tal vez solo usar COMMAND &(ejecutar en segundo plano) funcionaría.
dv3500ea
1
Lo siento, mi error: el proceso de inicio de sesión no espera a que regresen todos y cada uno de los comandos de inicio. Por desgracia, no puedo eliminar mi voto a menos que edite el texto de la pregunta ...
Riccardo Murri