Como posso reduzir o tempo necessário para o login adiando / atrasando alguns aplicativos de inicialização?


11

Eu configurei alguns aplicativos para inicializar em cada login (por exemplo, redshift-gtk, gtg) automaticamente, mas depois de adicioná-los aos aplicativos de inicialização ( System -> Preferences -> Startup Applications), obviamente, o tempo necessário para o login aumentou. Devido a tudo isso, o tempo que leva para meus painéis, área de trabalho etc. aparecerem é muito longo - até que sou forçado a esperar.

Não preciso que esses aplicativos estejam disponíveis imediatamente, mas seria bom que eles fossem iniciados eventualmente. Enquanto isso, o menu / painel do ubuntu está disponível para a execução de outros aplicativos que eu possa precisar.

Tentei usar o comando at, com a intenção de editar todos os aplicativos de inicialização para colocar os comandos na fila at, mas isso não funcionou, pois os aplicativos não obtêm as variáveis ​​de ambiente necessárias (como DISPLAY).

É para isso que o nicecomando é usado? Alguma outra idéia de como posso fazer isso? Se possível, eu gostaria de evitar a edição dos comandos dos aplicativos de inicialização, pois isso significaria muito esforço para replicar em outras máquinas que eu uso.


@Riccardo Murri - Você está certo. Agora editei o título da minha pergunta para melhor expor minha intenção.
21460

Eu também cortaria os programas e serviços de inicialização, se você ainda não o fez.
aperson

Respostas:


11

O número de segundos necessários para aguardar o carregamento da área de trabalho é arbitrário e pode mudar dependendo da situação. Em vez de sleep, tente usar o seguinte para executar aplicativos de inicialização assim que a carga do sistema diminuir:

(Edit: Adicionado sugestão 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

Salve-o como ~/bin/run-when-load-lowe adicione run-when-load-low 'COMMAND'em Preferências de aplicativos de inicialização.

Notas sobre este método:

  • O script acima é o que funcionou para mim. Passa apenas a DISPLAYvariável de ambiente para o aplicativo. Para a maioria dos aplicativos de desktop, será tudo o que você precisa. Com isso dito, lembre-se de considerar casos especiais e lembre-se disso ao solucionar qualquer problema que não esteja se comportando corretamente. Um bom lugar para começar, se você acha que um aplicativo pode precisar de outras variáveis ​​de ambiente passadas, é printenva documentação do aplicativo, embora eu pessoalmente ainda não tenha encontrado esse problema.
  • Meu entendimento do valor de "carga" do sistema é que ele leva em consideração as esperas de E / S, portanto, os aplicativos atrasados ​​não devem ser iniciados acidentalmente muito cedo durante as interrupções no uso da CPU causadas por processos de área de trabalho aguardando IO. Esta não é uma área que eu saiba muito, então, por favor, corrija-me se estiver errado aqui.
  • batchafeta somente quando os aplicativos são executados; não altera sua prioridade / gentileza.
  • Isso é óbvio, mas se o seu sistema sempre tiver uma carga alta, os aplicativos agendados usando esse método poderão nunca ser executados.
  • Se você precisa executar um aplicativo com um parâmetro que contenha espaços, você pode escapar-los usando a barra invertida: run-when-load-low 'gedit My\ Notes.txt'. Se você realmente precisa para passar parâmetros de um único cotado para a sua aplicação, você terá de usar as aspas no comando de inicialização: run-when-load-low "gedit 'My Notes.txt'". Para algo mais complicado que isso, é melhor você apenas modificar uma cópia do script com seu comando codificado.

Aendruk, obrigado. isso soa como a abordagem ideal. Restam duas dúvidas: DISPLAY é a única variável necessária para aplicativos do meu ambiente atual que não é passada adiante batch? Além disso, é possível que a carga da CPU seja reduzida antes que a área de trabalho termine completamente de carregar (por exemplo, aguardando o disco carregar alguns ícones) e que esses aplicativos sejam iniciados, resultando em uma situação semelhante à anterior? Em outras palavras, os comandos são executados com uma prioridade inerentemente menor do lote que é gerada quando outros aplicativos desejam executar?
koushik

@koushik Obrigado por mencionar esses pontos. Atualizei minha resposta para resolvê-los.
ændrük

Incrível, eu estava procurando uma solução para esse problema há algum tempo.
levesque

1
Isso agora está realmente me ajudando a reduzir o tempo para fazer login. Apenas para manter a par desses aplicativos, eventualmente, iniciando, modifiquei seu script levemente para me informar quando esses aplicativos realmente são executados. Além disso, a menos que o processo bifurque em segundo plano, ele permanece na batchfila como ainda em execução, então eu iniciei o processo em segundo plano também. A linha modificada é a seguinte:echo "export DISPLAY=$DISPLAY; notify-send 'Running on Load low' '$1' && $1 &" | batch
koushik

1
@ ændrük Sempre me refiro ao wiki da Greycat quando não tenho certeza sobre citações e outras 'melhores práticas'.
224

5

Eu descobri que apenas usar sleep 10 && COMMANDcomo o nome do comando não funcionava. Eu tive problemas com o carregamento do conky e do xchat muito cedo e me corrompendo de alguma forma. Eu tive que escrever um pequeno script chamado ~/bin/startupe colocar isso nele:

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

Você precisa alterar suas permissões para poder ser executado chmod +x ~/bin/startupe, em seguida, basta substituir a entrada de aplicativos de inicialização pelo comando startupe ele disparará tudo no script.

Você poderia ter um arquivo para cada aplicativo se assim fosse.


Além disso, você pode prefixar o arquivo ou a pasta com um ponto (por exemplo, ~ / .bin / startup) para que fique oculto; em outras palavras, você não o vê quando procura nas pastas no Nautilus, etc. (pressione Ctrl + h para alternar mostrando)
8128

Eu tive problemas com essa solução, às vezes funcionará, às vezes não funcionará. Além disso, o sono definitivamente atrasará a inicialização da área de trabalho.
levesque

1
O sleepvão não atrasar a inicialização. Os aplicativos de inicialização são sem bloqueio, o que significa que mais de uma coisa pode ser carregada de uma só vez. sleepIsso permite que o restante do gnomo carregue e depois carregue as coisas menos essenciais.
Oli

2

Use o comando 'sleep'.

Em Sistema -> Preferências -> Aplicativos de Inicialização, edite o comando para os programas que você deseja atrasar:

sleep 10 && COMMAND

Substitua 10 pelo número de segundos que você deseja aguardar e COMMAND pelo que estava originalmente na caixa de comando.


Leia o texto completo da pergunta: O OP reclama que a inicialização dos aplicativos leva muito tempo e pede uma maneira de "desanexá-los" do processo de login ("Não preciso que esses aplicativos estejam disponíveis imediatamente, mas seria bom se eles iniciarem eventualmente "). Adicionar um "hibernar" na frente dele aumentará o tempo de inicialização.
Riccardo Murri

Não percebi que o processo de login aguardava a conclusão de cada comando. Talvez apenas o uso COMMAND &(executado em segundo plano) funcione.
precisa saber é o seguinte

1
Desculpe, meu erro: o processo de logon não espera o retorno de todos os comandos de inicialização. Infelizmente, eu não posso retirar o meu downvote a menos que você editar o texto da pergunta ...
Riccardo Murri
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.