Existem algumas maneiras de fazer isso. O login gráfico do Ubuntu é fornecido pelo GDM (ou KDM, se você estiver usando o Kubuntu). O GDM é iniciado pelo subsistema Upstart.
O processo de inicialização segue estas etapas:
- Inicializações do sistema. O Upstart inicia serviços, incluindo o GDM ( / etc / init / gdm ).
- O GDM inicia, inicializa o servidor X ( / etc / gdm / Init / * ) e apresenta a janela de login da GUI.
- Um usuário faz login.
-
A autorização do
- PAM acontece ( /etc/pam.d/gdm )
- O GDM executa o script PostLogin ( / etc / gdm / PostLogin / * ).
- O GDM executa o script PreSession ( / etc / gdm / PreSession / * ).
- O GDM executa scripts Xsession e xinit
( / etc / gdm / Xsession , /etc/X11/xinit/xinitrc.d/ * , / etc / X11 / Xsession , < em> /etc/X11/Xsession.d / * )
- A área de trabalho do usuário é exibida.
Onde executar seu script
Tudo antes de XSession é executado como root. / etc / gdm / Xsession e tudo após ser executado como usuário. Isso deixa você com três opções reais para onde executar seu script.
-
Modifique os scripts PostLogin ou PreSession do GDM / KDM para executar seu programa. O nome de usuário está disponível nas variáveis de ambiente USER ou USERNAME .
-
Use o PAM para executar seu script. O PAM definirá o usuário autorizador na variável de ambiente PAM_USER . Adicione isto a /etc/pam.d/gdm para lançar o seu script:
auth required pam_exec.so /path/to/your/script
- Você pode usar o PAM para corresponder a um usuário específico ( como nesta resposta ), então o script só seria executado para esse usuário e não precisaria corresponder aos próprios usuários. Eu não tenho a expertise do PAM para explicar como fazer isso.
- Você pode usar o PAM para corresponder a um usuário específico ( como nesta resposta ), então o script só seria executado para esse usuário e não precisaria corresponder aos próprios usuários. Eu não tenho a expertise do PAM para explicar como fazer isso.
-
Escrever um script Upstart para executar seu programa. Seu script começaria no login do usuário, então procuramos o sinal desktop-session-start emitido pelo PreSession script.
Assim, um script Upstart detectaria esse sinal como o acionador de execução:
# start when GDM's PreSession script runs start on desktop-session-start
O sinal de PreSession não passa o nome de usuário, então você precisa ajustar o sinal. Em / etc / gdm / PreSession / Default , encontre a linha initctl e altere-a para isso. Você também pode usar USERNAME no lugar de USER .
# add USER variable so Upstart script can find it initctl -q emit desktop-session-start DISPLAY_MANAGER=gdm USER=$USER
Veja as páginas de manual para Upstart e seu iniciando evento para mais detalhes.
Como evitar o usuário administrador
Seu script precisará examinar o usuário / nome de usuário nas variáveis de ambiente obtidas de um desses métodos e usá-lo para determinar se deve ser anulado ou continuar. Os métodos padrão de script de shell funcionarão. Dependendo do local inicial escolhido na lista acima, o nome de usuário pode estar disponível nas variáveis de ambiente USER , USERNAME ou PAM_USER . / p>