web-dev-qa-db-fra.com

Afficher une notification à la connexion à l'aide de pam_exec

Ce script simple affichera une notification Zenity lorsque l'utilisateur se connectera:

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

Cependant, cela ne fonctionnera que si la variable DISPLAY est en fait 0. Et ne fonctionnera pas pour les connexions terminales ou distantes (ssh) (évidemment, l'écho semble aller nulle part). Que puis-je faire à ce sujet?

J'ai besoin d'un moyen pour:

  • Obtenez la variable DISPLAY actuelle de l'environnement pam_exec, si j'utilise une interface de connexion graphique
  • Obtenez le périphérique de console actuel, ou n'importe où où je peux envoyer un message à la console correcte, si j'utilise une interface de console.
2

Il existe un moyen plus simple d'envoyer des notifications à la connexion (sans connaître votre variable DISPLAY ou utiliser la commande tty pour identifier votre terminal).

Afin d'envoyer une notification lors du démarrage de GNOME ou d'un autre environnement de bureau, vous devez créer /etc/xdg/autostart/foobar.desktop fichier qui appelle votre script avec notify-send "Hello there!" "Hello". Vérifier /etc/xdg/autostart/ pour des exemples. Vous pouvez faire une copie de l'existant .desktop fichier, renommez-le et modifiez-le selon vos besoins. Vous pouvez également ajouter X-GNOME-Autostart-Delay=XX paramètre pour définir XX secondes de délai pour votre tâche. Si vous devez l'ajouter uniquement pour l'utilisateur sélectionné, utilisez ~/.config/autostart/ de cet utilisateur pour placer votre .desktop fichier et vérifiez avec gnome-session-properties que ce lanceur est actif.

Pour envoyer la notification sur la connexion au terminal ou ssh, vous pouvez utiliser le script placé dans /etc/profile.d/ ou envoyer cette notification, en ajoutant echo "My Message" à /etc/bash.bashrc directement. Les deux sont appelés depuis /etc/profile et sera exécuté à chaque connexion au shell interactif, que ce soit un terminal virtuel ou une connexion ssh. Pour l'utilisateur sélectionné, utilisez ~/.bash_login de cet utilisateur et y mettre le message souhaité. Remarque: utilisation de /etc/bash.bashrc et ~/.bash_login est logique si le shell bash par défaut est utilisé; si l'utilisateur appelle un autre Shell, par exemple /bin/sh/, ces fichiers seront ignorés.

1
whtyger