Executar um comando no logon do usuário

20

No sistema desktop Linux, eu quero executar um comando quando o usuário fizer o login.

Depois de ler algumas outras mensagens, tentei inserir o comando em ~/.bashrc , mas sem sucesso. Além disso, o sistema usa uma interface gráfica para o login do usuário, portanto, o comando não deve estar relacionado ao início de um shell.

Eu também tentei anexar o comando a um dos scripts contidos em /etc/profile.d sem resultados.

Existe outra maneira de fazer isso? Qualquer arquivo que o sistema lê após o login?

    
por BowPark 31.03.2014 / 17:10

3 respostas

19

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

  1. Use o método nativo do ambiente de área de trabalho para definir os 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 adicione-o à lista de aplicativos de inicialização. Por exemplo, no meu sistema (canela), você pode fazer isso através de "Configurações do sistema" = > "Aplicativos de inicialização".

  2. Use ~/.xprofile , que é obtido pelo menos pelo GDM, LDM, LightDM e Gerenciadores de login do LXDM.

  3. Se nenhum dos trabalhos acima, tente adicionar o comando a ~/.profile : Este é o arquivo de inicialização principal para as 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 gratuitos :

    The Autostart Directories are $XDG_CONFIG_DIRS/autostart as defined in accordance with the "Referencing this specification" section in the "desktop base directory specification".

    If the same filename is located under multiple Autostart Directories only the file under the most important directory should be used.

    Example: If $XDG_CONFIG_HOME is not set the Autostart Directory in the user's home directory is ~/.config/autostart/

    Example: If $XDG_CONFIG_DIRS is not set the system wide Autostart Directory is /etc/xdg/autostart/

    Example: If $XDG_CONFIG_HOME and $XDG_CONFIG_DIRS are not set and the two files /etc/xdg/autostart/foo.desktop and ~/.config/autostart/foo.desktop exist then only the file ~/.config/autostart/foo.desktop will be used because ~/.config/autostart/ is more important than /etc/xdg/autostart/

O ~/.bashrc é completamente irrelevante aqui, ele é lido apenas por shells interativos que não são de login, portanto é ignorado em shells de login, gráficas ou não.

    
por 31.03.2014 / 17:53
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 ( link ). No entanto, se você precisar executar uma ação mais específica de maneira segura, pode haver módulos pam mais especializados que se ajustem melhor, como o pam_mount comumente usado (para montagens no login - link ) ou pam_echo (para mensagens arbitrárias aos usuários - link ).

Em geral, o pam é um sistema muito bom para personalizar logins, então você pode querer olhar um pouco mais para ele, 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 assim:

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 /usr/local/bin/my_prog é um programa arbitrário sendo executado após um login de usuário bem-sucedido.

    
por 01.04.2014 / 02:42
2

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

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

gnome-session-properties can be used to configure startup applications.

Also, if you want an application to run at system boot, you can add a rule like the following to your crontab (edit crontab with crontab -e):

@reboot /run/this/program/at/boot >/dev/null 2>&1
    
por 31.03.2014 / 17:16