Executar um comando no logon do usuário

23

No sistema desktop Linux, desejo executar um comando quando o usuário efetuar login.

Depois de ler algumas outras postagens, tentei inserir o comando ~/.bashrcsem êxito. Além disso, o sistema utiliza uma interface gráfica para o login do usuário, portanto, o comando não deve estar relacionado ao início de um shell.

Também tentei anexar o comando a um dos scripts contidos /etc/profile.dsem resultados.

Há outra maneira de fazer isso? Algum arquivo que o sistema lê após o login?

BowPark
fonte

Respostas:

21

Não há garantia de que o gerenciador de exibição gráfica leia os arquivos de inicialização clássicos. Isso muda entre distribuições e entre gerenciadores de exibição. Um dos seguintes procedimentos deve funcionar.

  1. Use o método nativo do seu ambiente de área de trabalho para definir aplicativos de inicialização. Os detalhes dependerão do DE que você está usando, mas você pode criar um script que execute seu comando e adicioná-lo à lista de aplicativos de inicialização. Por exemplo, no meu sistema (Cinnamon), você pode fazer isso em "Configurações do sistema" => "Aplicativos de inicialização".

  2. Use ~/.xprofile, isso é originado pelo menos pelos gerenciadores de login GDM, LDM, LightDM e LXDM.

  3. Se nenhuma das opções acima funcionar, tente adicionar o comando a ~/.profile: Este é o principal arquivo de inicialização dos shells de login e também é lido por alguns shells gráficos no login.

  4. Como @derobert apontou nos comentários, você também pode usar os padrões de desktop gratuito :

    Os diretórios de inicialização automática são $ XDG_CONFIG_DIRS / autostart, conforme definido de acordo com a seção "Referenciando esta especificação" na "especificação do diretório base da área de trabalho".

    Se o mesmo nome de arquivo estiver localizado em vários diretórios de inicialização automática, apenas o arquivo no diretório mais importante deve ser usado.

    Exemplo: Se $ XDG_CONFIG_HOME não estiver definido, o Diretório de inicialização automática no diretório inicial do usuário será ~ / .config / autostart /

    Exemplo: Se $ XDG_CONFIG_DIRS não estiver definido, o Diretório de inicialização automática em todo o sistema será / etc / xdg / autostart /

    Exemplo: Se $ XDG_CONFIG_HOME e $ XDG_CONFIG_DIRS não estiverem configurados e os dois arquivos /etc/xdg/autostart/foo.desktop e ~ / .config / autostart / foo.desktop existirem, apenas o arquivo ~ / .config / autostart / foo. a área de trabalho será usada porque ~ / .config / autostart / é mais importante que / etc / xdg / autostart /

O ~/.bashrcé completamente irrelevante aqui, ele só é lido por conchas não-login interativo, por isso é ignorado em shells de login, gráfica ou não.

Terdon
fonte
5
Pode-se mencionar ~/.config/autostarte /etc/xdg/autostart/quais são os locais padrão de acordo com a Especificação de inicialização automática do aplicativo de desktop . E também /etc/X11/Xsession.de ~/.xsession.
derobert
6

Outra opção é usar o pam - isso lhe dará uma maneira precisa de definir ações no login.

Para uma ação genérica, você pode confiar no pam_exec ( http://manpages.ubuntu.com/manpages/hardy/man8/pam_exec.8.html ). No entanto, se você precisar executar uma ação mais específica de uma maneira segura, pode haver módulos pam mais especializados que se ajustem melhor, como o pam_mount comumente usado (para montagens no login - http: //manpages.ubuntu. com / manpages / hardy / man8 / pam_mount.8.html ) ou pam_echo (para mensagens arbitrárias para os usuários - http://manpages.ubuntu.com/manpages/hardy/man8/pam_echo.8.html ).

Em geral, o pam é um sistema muito elegante para personalizar logins; portanto, você deve procurar um pouco mais, em vez de confiar em scripts potencialmente inseguros, como outros sugeriram.

Exemplo

Dado um /etc/pam.d/system-auth bastante típico, podemos empregar pam_exec após o login como este:

session         optional        pam_ssh.so
session         required        pam_limits.so
session         required        pam_env.so
session         optional        pam_mktemp.so
session         required        pam_unix.so
session         optional        pam_exec.so /usr/local/bin/my_prog
session         optional        pam_permit.so

onde o /usr/local/bin/my_progprograma arbitrário está sendo executado após um login de usuário bem-sucedido.

oakad
fonte
2
Essa é uma boa resposta, embora você deva incluir um exemplo da linha em que você adicionaria a pamconfiguração, pois isso não é trivial.
Graeme
2

De acordo com este tópico: Executar comando automaticamente após o login?

Você tem a solução .bashrc(não é o que você precisa) e a solução dos aplicativos de inicialização. Cito Daniel S .:

gnome-session-properties pode ser usado para configurar aplicativos de inicialização.

Além disso, se você deseja que um aplicativo seja executado na inicialização do sistema, você pode adicionar uma regra como a seguinte ao seu crontab (edite o crontab com crontab -e):

@reboot /run/this/program/at/boot >/dev/null 2>&1
Laurent C.
fonte