====== X2Go : LXDE distant sur écran 4K (HiDPI) ====== Dernière mise à jour : août 2026 ===== Problème ===== Client X2Go sur poste 4K (CachyOS/GNOME) : le contenu de la session LXDE distante s'affiche minuscule (pas de scaling HiDPI). Points constatés : * ''QT_SCALE_FACTOR=2'' côté client n'agrandit que l'interface du client x2goclient, pas la session. * Le réglage DPI du profil (''setdpi=true'', ''dpi=192'') est transmis (''X2GODPI=192'') mais LXDE (GTK2/3) l'ignore. * ''~/.xsessionrc'' côté serveur n'est **pas sourcé** par X2Go : les variables ''GDK_SCALE'' etc. n'apparaissent pas dans l'environnement de ''lxsession''. * La géométrie et le DPI ne s'appliquent qu'à la **création** de session : une session suspendue/reprise garde ses anciens réglages. ===== Solution : script wrapper côté serveur ===== Sur le serveur (utilisateur de session, ex. ''maitre'') : mkdir -p ~/bin && cat > ~/bin/lxde-hidpi.sh << "EOF" #!/bin/bash export GDK_SCALE=2 export GDK_DPI_SCALE=0.5 export QT_SCALE_FACTOR=2 export XCURSOR_SIZE=48 echo "Xft.dpi: 192" | xrdb -merge exec startlxde EOF chmod +x ~/bin/lxde-hidpi.sh Rôle des variables : * ''GDK_SCALE=2'' : widgets GTK3 à 2x * ''GDK_DPI_SCALE=0.5'' : évite le double scaling des polices GTK3 * ''Xft.dpi: 192'' : polices GTK2 (panneau LXDE, pcmanfm) * ''XCURSOR_SIZE=48'' : curseur agrandi ===== Panneau LXDE : hauteur HiDPI ===== Le profil par défaut (''/etc/xdg/lxpanel/LXDE/panels/panel'') fixe ''height=26'' — quasi invisible en 4K, et le panneau peut s'effondrer à une géométrie 20x20 après un changement de résolution RANDR (redimensionnement de la fenêtre X2Go). Symptôme : « plus de menu ». Correctif persistant — profil utilisateur avec hauteur adaptée : mkdir -p ~/.config/lxpanel/LXDE/panels cp -n /etc/xdg/lxpanel/LXDE/panels/panel ~/.config/lxpanel/LXDE/panels/panel sed -i 's/^ height=.*/ height=52/' ~/.config/lxpanel/LXDE/panels/panel S'applique au prochain démarrage du panneau (nouvelle session ou relance). Diagnostic de l'effondrement (depuis SSH, display de ''x2golistsessions'', 3ᵉ colonne) : DISPLAY=:50 xwininfo -root -children | grep -i lxpanel # 20x20 = panneau effondré Notes : * ''lxpanelctl restart'' peut être **sans effet** (le processus lxpanel n'est pas relancé — vérifier avec ''pgrep -a lxpanel'' que le PID change). * Relance manuelle : tuer le PID puis relancer **avec l'environnement HiDPI**, sinon le panneau revient sans scaling : kill DISPLAY=:50 GDK_SCALE=2 GDK_DPI_SCALE=0.5 XCURSOR_SIZE=48 setsid lxpanel --profile LXDE & ===== Configuration client ===== x2goclient → éditer le profil → onglet **Session** : * Type de session : **Bureau personnalisé** (Custom desktop) * Commande : ''/home/maitre/bin/lxde-hidpi.sh'' **Attention au mode rootless** : si le profil lance la commande comme //application unique// (rootless) au lieu de //session de bureau//, les fenêtres distantes — dont le panneau LXDE — apparaissent directement sur le bureau **local**, hors de la fenêtre x2goclient. Déroutant (le panneau distant semble être un panneau local). Vérifier que le type est bien un bureau ; en cas de doute, ''hostname'' dans un LXTerminal ouvert depuis ce panneau doit répondre le nom du serveur. ===== Application ===== Terminer toute session existante (les réglages ne s'appliquent qu'à la création) : x2goterminate-session $(x2golistsessions | cut -d'|' -f2) Puis se reconnecter : la nouvelle session est créée avec le scaling. ===== Dépannage ===== * Vérifier les sessions côté serveur : ''x2golistsessions'' (état ''S'' = suspendue, ''R'' = active ; sortie vide = aucune). * Session zombie (« Connection refused » au resume, crash client) : ''x2goterminate-session '' voire ''x2gocleansessions''. * Vérifier que les variables sont bien dans la session : pid=$(pgrep -u maitre lxsession | head -1) tr "\0" "\n" < /proc/$pid/environ | grep -E "GDK|QT_SCALE" * Config client dans ''~/.x2goclient/sessions'' (champs ''width'', ''height'', ''fullscreen'', ''dpi'') — éditable à la main, client fermé. * Limite GTK2 : seules les polices scalent, pas les icônes → ajuster la hauteur du panneau LXDE manuellement (voir section dédiée ci-dessus).