Come posso ridurre i tempi di accesso posticipando / ritardando alcune applicazioni di avvio?


11

Ho configurato alcune applicazioni per l'avvio su ogni accesso (ad esempio, redshift-gtk, gtg) automaticamente ma dopo averle aggiunte alle applicazioni di avvio ( System -> Preferences -> Startup Applications) ovviamente il tempo impiegato per accedere è aumentato. A causa di tutto ciò, il tempo necessario affinché i miei pannelli, il desktop ecc. Appaia è troppo lungo, fino al quale sono costretto ad aspettare.

Non ho bisogno che queste app siano immediatamente disponibili, ma sarebbe bello se alla fine si avviassero, nel frattempo il menu / pannello di Ubuntu è disponibile per eseguire altre app di cui potrei aver bisogno.

Ho provato a utilizzare at command, con l'intenzione di modificare tutte le applicazioni di avvio per mettere i comandi in coda, ma questo non ha funzionato poiché le app non ottengono le variabili di ambiente necessarie (come DISPLAY).

È a questo che niceserve il comando? Altre idee su come posso raggiungere questo obiettivo? Se possibile, vorrei evitare di modificare i comandi delle applicazioni di avvio, poiché ciò significherebbe molto sforzo per replicare su altre macchine che utilizzo.


@Riccardo Murri - Hai ragione. Ora ho modificato il titolo della mia domanda per affermare meglio le mie intenzioni.
Koushik,

Sarei sicuro di tagliare anche programmi e servizi di avvio, se non l'hai già fatto.
aperson,

Risposte:


11

Il numero di secondi necessari per attendere il caricamento del desktop è arbitrario e può variare in base alla situazione. Invece sleep, prova a utilizzare quanto segue per eseguire le applicazioni di avvio non appena il carico del sistema è diminuito:

(Modifica: aggiunto il suggerimento di 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

Salvalo come ~/bin/run-when-load-lowe aggiungi run-when-load-low 'COMMAND'in Preferenze applicazioni di avvio.

Note su questo metodo:

  • La sceneggiatura sopra è ciò che ha funzionato per me. Passa solo la DISPLAYvariabile d'ambiente all'applicazione. Per la maggior parte delle applicazioni desktop questo sarà tutto ciò di cui hai bisogno. Detto questo, assicurati di considerare eventuali casi speciali e tenere presente questo fatto quando si risolvono problemi che non si comportano correttamente. Un buon punto di partenza se si ritiene che un'applicazione possa richiedere il passaggio di altre variabili d'ambiente è printenvla documentazione dell'applicazione, anche se personalmente non ho ancora riscontrato questo problema.
  • La mia comprensione del valore di "caricamento" del sistema è che tiene conto delle attese di I / O, quindi le applicazioni ritardate non devono avviarsi accidentalmente troppo presto durante i periodi di inattività dell'utilizzo della CPU causati da processi desktop in attesa di I / O. Questa non è un'area di cui conosco molto, quindi per favore correggimi se sbaglio qui.
  • batchinfluenza solo quando vengono eseguite le applicazioni; non altera la loro priorità / gentilezza.
  • Questo dovrebbe essere ovvio, ma se il tuo sistema ha sempre un carico elevato, le applicazioni pianificate utilizzando questo metodo potrebbero non funzionare mai.
  • Se avete bisogno di eseguire un'applicazione con un parametro che contiene spazi, si può sfuggire loro utilizzando la barra rovesciata: run-when-load-low 'gedit My\ Notes.txt'. Se si ha realmente bisogno per passare i parametri singoli citato per la vostra applicazione, dovrete usare le virgolette nel comando di avvio: run-when-load-low "gedit 'My Notes.txt'". Per qualcosa di più complicato di questo, probabilmente ti conviene semplicemente modificare una copia dello script con il tuo comando hardcoded.

aendruk, grazie. questo sembra l'approccio ottimale. Rimangono 2 dubbi, DISPLAY è l'unica variabile necessaria per le applicazioni del mio ambiente attuale che non viene trasmessa batch? Inoltre, è possibile ridurre il carico della cpu prima che il desktop abbia completato il caricamento (diciamo, aspettando il caricamento di alcune icone sul disco) e queste app vengano avviate dando luogo a una situazione simile a prima? In altre parole, i comandi vengono eseguiti con una priorità intrinsecamente inferiore che risulta quando altre app vogliono essere eseguite?
Koushik,

@koushik Grazie per aver sollevato questi punti. Ho aggiornato la mia risposta per affrontarli.
ændrük,

Fantastico, da tempo cercavo una soluzione a questo problema.
levesque

1
Questo ora mi sta davvero aiutando a ridurre i tempi di accesso. Solo per tenermi aggiornato su queste app alla fine all'avvio, ho modificato leggermente il tuo script per informarmi quando queste app vengono effettivamente eseguite. Inoltre, a meno che il processo non si inoltri in background, rimane in batchcoda come ancora in esecuzione, quindi ho avviato anche il processo in background. La linea modificata è la seguente:echo "export DISPLAY=$DISPLAY; notify-send 'Running on Load low' '$1' && $1 &" | batch
koushik,

1
@ ændrük Mi riferisco sempre al wiki di Greycat quando non sono sicuro del preventivo e di altre "buone pratiche".
aperson,

5

Ho scoperto che usare semplicemente sleep 10 && COMMANDcome nome del comando non ha funzionato. Ho avuto problemi con il caricamento di conky e xchat troppo presto e la corruzione in qualche modo. Ho dovuto scrivere una piccola sceneggiatura chiamata ~/bin/startupe inserirla:

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

È necessario modificare le autorizzazioni per poter essere eseguito, chmod +x ~/bin/startupquindi sostituire semplicemente la voce delle applicazioni di avvio con il comando startupe si spegnerà tutto nello script.

Potresti avere un file per ogni applicazione se fossi così incline.


Inoltre potresti aggiungere un punto al file o alla cartella con un punto (ad es. ~ / .Bin / startup) in modo che sia nascosto, in altre parole non lo vedi quando guardi nelle tue cartelle in nautilus, ecc. (Bene ctrl + h to
attiva /

Ho avuto problemi con una soluzione del genere, a volte funzionerà, a volte non funzionerà. Inoltre, la sospensione ritarderà sicuramente l'avvio del desktop.
levesque

1
Il sleepsi non ritardare l'avvio. Le applicazioni di avvio sono non bloccanti, il che significa che è possibile caricare più di una cosa alla volta. sleeping consente al resto di gnome di caricare e quindi caricare le cose meno essenziali.
Oli

2

Usa il comando 'sleep'.

In Sistema -> Preferenze -> Applicazioni di avvio, modifica il comando per i programmi a cui vuoi ritardare:

sleep 10 && COMMAND

Sostituisci 10 con il numero di secondi che vuoi aspettare e COMANDA con quello che era originariamente nella casella di comando.


Si prega di leggere il testo completo della domanda: OP si lamenta che l'avvio delle app impiega troppo tempo e chiede un modo per "staccarle" dal processo di accesso ("Non ho bisogno che queste app siano disponibili immediatamente, ma sarebbe buono se alla fine si avviano "). L'aggiunta di uno "sleep" di fronte aumenterà in realtà il tempo di avvio.
Riccardo Murri,

Non mi ero reso conto che il processo di accesso aspettasse che ogni comando finisse. Forse il solo utilizzo COMMAND &(esecuzione in background) funzionerebbe.
dv3500ea,

1
Spiacenti, sbaglio: il processo di accesso non attende la restituzione di tutti i comandi di avvio. Purtroppo, non posso rimuovere il mio voto negativo se non modifichi il testo della domanda ...
Riccardo Murri,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.