Hydre de l'X

Publié le 05 septembre 2007 par Peck
Cet article est maintenant sur http://linux-attitude.fr/post/Hydre-de-lX

Niveau :
Résumé : Xdmx

Si vous avez plusieurs écrans, vous voudriez bien avoir un seul couple clavier/souris (CF dadmin/machin) ainsi qu'un seul window manager pour gérer l'ensemble. Si vous êtes en local, c'est simple. Il suffit de lancer un unique serveur X avec plusieurs écrans définis ou avec un seul écran viruel (ça marche même s'il s'agit de plusieurs cartes vidéos et non d'une carte multitête).
Mais si vous devez avoir plusieurs serveurs X à cause d'un bug du driver ou, plus excusable, des écrans sur des machines différentes, vous pouvez regrouper plusieurs serveurs X en un seul. Imaginez une mosaïque de 16 ecrans sur 4 machines !

Xdmx sert justement à ça :
$ Xdmx -display machine1:0 machine2:0 :1

Notez que Xdmx ne prend pas nécessairement pour input le clavier/souris des display concernés. Vous pouvez prendre celui d'un autre display (avec une fenêtre dessus pour savoir où cliquer) existant, ou celui de la machine sur laquelle il tourne si c'est en console.

# on utilise un autre display
$ Xdmx -display machine1:0 machine2:0 -input machine3:0 :1
# on utilise le clavier local
$ Xdmx -display machine1:0 machine2:0 -input local,kbd,ps2 :1

Par défaut Xdmx crée un unique display avec plusieurs écrans (:1.0 et :1.1 dans notre exemple), ce qui est finalement peu intéressant par rapport à l'utilisation de x2x. Mais on peut aussi lui demander de les regrouper en un seul écran virtuel grâce à xinerama :

$ Xdmx +xinerama -display machine1:0 machine2:0 -input machine1:0 :1



Et maintenant, astuce ...

Il est possible de faire une application qui supporte la déconnexion d'un serveur X de façon volontaire.
Attention, lorsque ceci fonctionne, l'opengl est désactivé :

# on lance Xdmx sur un nouveau premier serveur X
$ Xdmx -display machine1:0 -addremovescreens -norender -noglxproxy :1
# on lance une application à travers xdmx (qui nous sert de proxy)
$ xclock -display :1
# on supprime l'accès au premier écran de xdmx (qui est sur le premier serveur X)
# attention à bien lancer cette commande, une coupure violent de l'écran fait planter xdmx
$ dmxrmscreen :1 0
# et on réactive le premier écran sur un 2e serveur X
$ dmxaddscreen :1 0 machine2:0

Et voilà !