Wayland X11 et ssh
Utilisation d'applications graphiques Raspberry Pi via SSH X11 et MobaXterm
Contexte
Depuis un poste Windows avec MobaXterm, une connexion SSH est établie vers le Raspberry Pi avec le forwarding X11 activé.
Le bandeau de connexion indique :
X11-forwarding : ✓ (remote display is forwarded through SSH)
La variable DISPLAY est correctement définie :
echo $DISPLAY localhost:10.0
Symptôme
Les applications X11 classiques s'affichent correctement sur le poste Windows :
xcalc xclock
En revanche certaines applications GTK modernes, par exemple :
gitg
s'ouvrent sur l'écran local du Raspberry Pi au lieu du poste Windows.
Diagnostic
Vérification du forwarding X11 :
xdpyinfo | head
Résultat :
name of display: localhost:10.0 vendor string: Moba/X
Le forwarding X11 fonctionne donc correctement.
Inspection avec strace :
strace -e connect gitg 2>&1 | grep wayland
Résultat :
connect(4, {sa_family=AF_UNIX,
sun_path="/run/user/1000/wayland-0"}, 27) = 0
GTK se connecte directement au serveur Wayland local au lieu d'utiliser X11.
Cause
La session SSH dispose des variables :
XDG_RUNTIME_DIR=/run/user/1000 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
GTK détecte alors la présence du socket Wayland :
/run/user/1000/wayland-0
et privilégie Wayland plutôt que le DISPLAY X11.
Le résultat est que l'affichage est envoyé vers le bureau local du Raspberry Pi.
Solution ponctuelle
Lancer l'application en forçant GTK à utiliser X11 :
GDK_BACKEND=x11 gitg
Solution permanente
Ajouter dans ~/.bashrc :
# Only for remote connection with X11 forward
if [ -n "$DISPLAY" ]; then
export GDK_BACKEND=x11
fi
ou de manière plus restrictive :
# Only for SSH X11 forwarding
if [ -n "$SSH_CONNECTION" ] && [[ "$DISPLAY" == localhost:* ]]; then
export GDK_BACKEND=x11
fi
Puis recharger l'environnement :
source ~/.bashrc
Vérification
Connexion SSH :
ssh -X admin@labo
Vérifier :
echo $GDK_BACKEND
Résultat attendu :
x11
Tester ensuite :
gitg
La fenêtre doit maintenant apparaître sur le poste Windows via MobaXterm.
Conclusion
Le problème ne venait ni de SSH, ni de MobaXterm, ni du forwarding X11.
Le forwarding X11 fonctionnait correctement.
La cause était la préférence de GTK pour la session Wayland locale (labwc) détectée via XDG_RUNTIME_DIR.
Le forçage :
export GDK_BACKEND=x11
résout le problème.