Faire fonctionner les programmes X11 dans une session ssh + su

Introduction

La connexion à une machine distante se fait habituellement en utilisant ssh, ce qui présente comme avantage de ne pas avoir de mot de passe qui transite en clair sur le réseau ou même d'éviter un mot de passe si, au préalable, on y a installé sa clé publique.

Une fois connecté, et si on a pris le précaution de positionner la variable X11Forwarding yes dans le fichier /etc/ssh/sshd_config, on peut lancer des applications X11 comme xjed, gedit, firefox, ... et avoir l'image devant ses yeux sur l'écran de la machine locale.

La solution n'est pas toujours aussi simple, lorsqu'on utilise la commande su pour passer des commandes en tant que superutilisateur. Certaines distributions ne font pas le nécessaire pour que le X11Forwarding fonctionne. Et le but de ce petit script est de pallier à cette carence d'une manière simple et générale.

Le script et son installation

Voici le script. Sachant que 7 premières lignes sont du commentaire, on peut copier le reste soit dans le fichier .bashrc soit dans un fichier séparé .bash_display.

#   direct ssh to root, ssh user + su -, su - from desktop

# mv this file to /root/.bash_display
# copy this 3 next lines to /root/.bashrc and uncomment them there
#if [ -f ~/.bash_display ]; then
#    . ~/.bash_display
#fi

if [ "$TERM" = "linux" ] ; then
  return 0
fi
if [ -z "$SSH_CLIENT" ] ; then
    MYVAR=$(strings /proc/$PPID/environ | grep DISPLAY=)
    if [ -z "$MYVAR" ] ; then
      echo "Display not defined - did you run 'ssh -X ...'?"
      return 0
    fi
    export $MYVAR
    MYHOME=$(strings /proc/$PPID/environ | grep "^HOME=" | sed -e "s/HOME=//" )
#    echo "MYHOME $MYHOME MYVAR $MYVAR"
    xauth -f $MYHOME/.Xauthority extract - $DISPLAY | xauth merge -
else
  echo "ssh login"
fi

La solution la plus propre est de copier les 3 lignes suivantes dans le fichier .bashrc et les lignes précédentes dans .bash_dispaly.

if [ -f ~/.bash_display ]; then
    . ~/.bash_display
fi

Ici, il s'agit des fichiers de root si on installe pour root, ou ceux d'un autre utilisateur si on installe pour cet utilisateur.

Le script fouille dans l'environnement du process parent (PPID) pour trouver les variables DISPLAY et HOME, les positionne ensuite pour la session courante et crée un fichier .Xauthority à partir de celui du parent. Ceci se fait au moment où vous exécuter la commande su. Vous pouvez ensuite exécuter une commande X11.

Applicable à

La liste n'est pas exhaustive...

Exceptions

Certaines distributions n'ont pas besoin de ce script, parce que la commande est intégrée d'une autre façon. La liste n'est pas exhaustive...

références

Voir aussi: