Ubuntu, afficher des fenêtres serveur X vers des hôtes clients Windows 10 avec Putty et XMing Server

Introduction

Lorsque les bureaux graphiques ne sont pas installés sur un serveur Ubuntu, les interfaces graphiques sont cependant parfois nécessaires et doivent être transmises et affichées sur les machines clientes. Parmi ces raisons, on peut citer :

Putty XForwarding 11
  • Les programmes d'installation assez complexes (Oracle...), la version graphique étant souvent préférée aux installations en mode console et/ou installations silencieuses.
  • Exécuter Android studio sur le serveur Ubuntu, plus puissant, plutôt que sur la machine cliente qui ne possède pas les pré-requis matériels (mémoire, CPU...) nécessaires à son installation.

Évidemment, pour l'implémentation de cette fonctionnalité, la bande passante entre le serveur et le client doit être bien dimensionnée (fibre optique...).

Très peu d'étapes sont nécessaires sur Ubuntu 18.04 et le client Windows 10 pour la mise en œuvre de cette mécanique.

Configuration du serveur

Installation des packages

3 packages doivent être installés en premier :

  • xvfb : X Virtual Frame Buffer
  • xdm : X Desktop Manager
  • xfonts-base : Polices de base

Sur le serveur Ubuntu, en tant que root, en une seule de ligne de commande :

root@vps:~% apt-get install xvfb xdm xfonts-base

Ensuite, toujours en tant que root, les packages ci-dessous sont installés :

  • xterm (X Terminal)
  • twm (Tab Window Manager)
  • xfonts-100dpi* : bitmapped fonts (100 dots per inch)
root@vps:~% apt-get install twm xfonts-100dpi* xterm

X11 Forwarding

S'assurer que le paramètre X11Forwarding est défini à yes dans le fichier de configuration du démon SSH (/etc/sshd/sshd_config).

/etc/sshd/sshd_config
...
X11Forwarding yes
...

Redémarrer le service sshd si ce paramètre était initialement à no :

root@vps:~$ service ssh restart

Configuration des serveurs X

X Server est alors configuré pour utiliser xvfb (X Virtual Frame Buffer) au lieu du moteur X par défaut. Dans le fichier /etc/X11/xdm/Xservers, remplacer la ligne ci-dessous

/etc/X11/xdm/Xservers
:0 local /usr/X11R6/bin/X vt7 -dpi 100 -nolisten tcp

par

:0 local /usr/X11R6/bin/Xvfb -dpi 100 -screen 1024x768x16

Puis, en tant que root, redémarrer le service X Desktop Manager

root@vps:/etc/X11/xdm:~$ service xdm restart

[ ok ] Restarting xdm (via systemctl): xdm.service.

Configuration du client

XMing

Installer XMing Server pour Windows (Page de téléchargement: XMing 6.0.9.31 for Windows ). Sélectionner une installation complète (full installation).

XMing full installation

Xming Server devra être autorisé dans le pare-feu Windows Defender de Windows 10.

Il s'agit d'une ancienne version (2007) en 32 bits, mais elle est toujours opérationnelle sur les versions récentes de Windows 10 64 bits. Des versions plus récentes, dont la version 64 bits, sont disponibles mais malheureusement uniquement après avoir fait un don (10 £ min.), cependant des alternatives existent en cas de défaillances (par exemple : VcXsrv).

Lorsque le serveur XMing est route sur le client Windows, une icône XMing apparaît dans la barre système de Windows. Les options comme l'arrêt ou l'accès au fichier de log sont accessibles avec un clic droit sur l'icône XMing.

XMing Server icon

Par défaut, la ligne de commande pour lancer le serveur XMing est la suivante (voir le fichier de log) :

D:\software\tools\xming\Xming.exe :0 -clipboard -multiwindow

Si le serveur XMing est éteint, il est démarré à partir du menu Windows des programmes :

XMing Server icon

Le serveur XMing écoute par défaut sur le port 6000. Pour retrouver le process ID du serveur XMing, dans une invite de commandes DOS (en tant qu'administrateur) :

C:\> netstat -ano | findstr "6000" | findstr "LISTEN"

  TCP    0.0.0.0:6000           0.0.0.0:0              LISTENING       2768
       
C:\> tasklist /fi "pid eq 2768"

Image Name                 PID     Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
Xming.exe                     2768 Console                    1    20 060 Ko

Putty

Dans les sessions Putty, activer l'option X11 forwarding pour SSH (Menu : ConnectionSSHX11).

Putty SSH X11 Forwarding enabled

C'est terminé, tout est prêt. Sauf si des règles firewall bloquent quelque part, voire partout...

Quelques tests

Un premier test basique : exécuter simplement une fenêtre xterm. Cette fenêtre doit s'afficher dans l'environnement Windows 10 :

android@vps:~$ xterm -bg black -fg yellow &

[1] 26730
X11 Forwarding enabled- xterm Window

Un cas un peu plus ardu, afin de tester plus de fonctionnalités avancées (redimensionnement...) : ouverture d'une fenêtre Android Studio 3.4

android@vps:~$ cd /software/android/android-studio

android@vps:~$ ./bin/studio.sh &

[1] 26730
X11 Forwarding enabled- Android studio 3.4