Mostra uma notificação no login usando pam_exec

2

Este script simples mostrará uma notificação do Zenity quando o usuário fizer login:

case "$PAM_TYPE" in
    'open_session' )
    if [ "$PAM_SERVICE" = "lightdm" ] ; then
            DISPLAY=:0 sudo -u $PAM_USER notify-send "Hello there!" "Hello"
        else
            echo "Hello there!"
        fi
    ;;
esac

No entanto, isso só funcionará se a variável DISPLAY for realmente 0. E não funcionará para logins de terminal ou remoto (ssh) (obviamente, o eco parece não chegar a lugar algum). O que posso fazer sobre isso?

Eu preciso de uma maneira de:

  • Obtenha a variável DISPLAY atual do ambiente pam_exec, se eu estiver usando uma interface gráfica de login
  • Obtenha o dispositivo de console atual ou qualquer lugar em que eu possa enviar uma mensagem para o console correto, se eu estiver usando uma interface de console.
por Jorge Suárez de Lis 11.01.2013 / 14:19

1 resposta

1

Existe uma maneira mais fácil de enviar notificações no login (sem conhecer sua variável DISPLAY ou usando o comando tty para identificar seu terminal).

Para enviar algumas notificações durante o GNOME ou outro ambiente de desktop, você deve criar o arquivo /etc/xdg/autostart/foobar.desktop , que chama seu script com notify-send "Hello there!" "Hello" . Verifique /etc/xdg/autostart/ para exemplos. Você pode fazer uma cópia do arquivo .desktop existente, renomeá-lo e modificá-lo para as suas necessidades. Você também pode adicionar o parâmetro X-GNOME-Autostart-Delay=XX para definir o atraso de XX segundos para sua tarefa. Se você precisar adicionar isso apenas para o usuário selecionado, use ~/.config/autostart/ desse usuário para colocar seu arquivo .desktop e verifique com gnome-session-properties se esse ativador está ativo.

Para enviar a notificação no terminal ou no login do ssh, você pode usar o script colocado em /etc/profile.d/ ou enviar esta notificação, adicionando echo "My Message" a /etc/bash.bashrc diretamente. Ambos são chamados de /etc/profile e serão executados em cada login no shell interativo, seja no terminal virtual ou no login do ssh. Para o usuário selecionado, use ~/.bash_login desse usuário e coloque a mensagem desejada lá. Nota: o uso de /etc/bash.bashrc e ~/.bash_login faz sentido se o shell bash padrão for usado; se o usuário invocar algum outro shell, por exemplo, /bin/sh/ , esses arquivos serão ignorados.

    
por whtyger 16.01.2013 / 17:30