Wayland X11 et ssh

De knowledge
Aller à la navigation Aller à la recherche

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.