O GRUB carrega o kernel, o kernel inicia o processo de inicialização (normalmente /sbin/init
). É o que acontece depois disso é tipicamente de interesse. Em vários estágios da história do Ubuntu, houve três sistemas de inicialização:
Os sistemas de inicialização, em geral, iniciam os vários serviços que devem ser executados, além de outras tarefas. O que faz um sistema init?
/etc/init.d
é onde residem os scripts shell de interesse do antigo sistema init sysv. Se você puder, apenas evite. Existe apenas por motivos de compatibilidade com versões anteriores.
/etc/rc.local
é um script da era init do sysv, que ainda funciona devido à compatibilidade com versões anteriores. É bom que os comandos de curta duração sejam executados na inicialização do sistema como root . É executado uma vez durante a inicialização. Para tarefas de longa duração, use os serviços Upstart ( /etc/init
) ou systemd ( /etc/systemd/system
). Tanto o Upstart quanto o systemd permitem iniciar programas condicionalmente, mas a maneira como eles fazem isso é diferente.
Quando você fizer login em uma GUI, a maioria dos ambientes de desktop iniciará os aplicativos listados em ~/.config/autostart
. É um bom lugar para comandos que devem ser executados depois que você fizer login em uma GUI, como iniciar seu cliente de e-mail. Eles são executados toda vez que você faz o login, então, cada vez que você fizer logout e re-login, eles serão executados (ao contrário de /etc/rc.local
).
~/.config/upstart
é como ~/.config/autostart
, mas é tratado por um processo Upstart por sessão que é iniciado quando você faz login em uma GUI. É mais flexível que ~/.config/autostart
, que simplesmente executa os comandos no login. Isso é útil até o Ubuntu 16.10, onde o processo por sessão é agora systemd (de 15.04 a 16.04, o init principal era systemd, mas os inits por sessão eram Upstart). Veja, por exemplo, minha resposta aqui: Como executo um script no login / logoff da Unity?
Agora você provavelmente pode ter mais noção das opções em Como executar scripts na inicialização?
~/.bash_profile
, ~/.profile
, ~/.bashrc
, etc. não são bons para iniciar comandos na inicialização. Geralmente, eles são lidos por shells da linha de comando, portanto, quando você inicia um terminal ou faz login nos TTYs. Portanto, .bashrc
é bom para executar um comando toda vez que você abrir um terminal e .profile
para quando você efetuar login a partir do TTY. (Veja esta resposta .) Esses arquivos também são usados principalmente na configuração de variáveis de ambiente, mas o lugar canônico para variáveis de ambiente é /etc/environment
para variáveis de todo o sistema e ~/.pam_environment
para variáveis específicas do usuário. Veja esta resposta .
~/.local/share/applications
é irrelevante para esta discussão.