Niveau :      
Résumé : xrestop && xwininfo && xev && x2x && import

Si vous avez lancé une application graphique chez vous et que, comme moi, vous êtes parti au boulot sans cliquer sur sauvegarder, c'est rageant de ne pas pouvoir le faire à distance. Eh bien je vais vous proposer une solution à l'aveugle qui marche.

On commence par se connecter sur la machine portant l'affichage distant et on fait en sorte de se connecter au serveur X. En cas de problèmes de droits, lire l'article sur xauth :

$ ssh mamachine.net.net
$ export DISPLAY=:0

Maintenant il nous faut le pid du processus concerné, rien de plus simple :

$ pgrep -l firefox
> 4908 firefox-bin
$ PID=4908

Ensuite on cherche les fenêtres appartenant à ce processus et en particulier leur titre :

$ xrestop -b -m 1 | grep -A 15 "PID: $PID"
> 0 - Linux attitude - Iceweasel ( PID: 4908 ):
>  [... blah ...]

$ TITLE="Linux attitude - Iceweasel" 

De ce titre on peut déduire l'ID de la fenêtre :

$ xwininfo -name "$TITLE" 
> xwininfo: Window id: 0x2400276 "Linux attitude - Iceweasel"
>  [... blah ...]
$ ID=0x2400276

Ça y est nous avons notre info, nous allons pouvoir commencer à travailler. Rappelez-vous, nous sommes aveugles, il nous faut obtenir le toucher, nous allons donc percevoir ce qui ce passe sur cette fenêtre :

$ xev -id $ID

Ensuite notre canne blanche pour toucher à distance. Pour cela nous utiliserons une nouvelle connexion à la machine distante, avec accès au serveur local cette fois (même remarque que précédemment sur les droits d'accès à l'affichage distant) :

$ ssh -X mamachine.net.net
$ x2x -from $DISPLAY -to :0 -east 

Déplacez votre souris à droite de votre écran et hop, elle apparaît sur l'écran distant (que vous ne voyez pas bien sûr). Ne bougez plus, il est temps d'utiliser une nouvelle astuce, en effet pour être sur de pouvoir aller sur notre fenêtre, il faut la mettre au premier plan. Pour cela, regardez bien la sortie de xev sur votre écran, dès qu'un évènement surviendra, de nombreuses lignes apparaîtront. Utilisez le raccourci alt-shift-tab (et relâchez) successivement jusqu'à ce que votre fenêtre génère des évènements. Cette combinaison permet en effet de parcourir les fenêtres en ordre inverse et donc de ne pas en changer l'ordre pour pouvoir toutes les parcourir facilement.

Une fois que votre fenêtre est au premier plan selon votre window manager et ce que vous voulez faire, il est possible que vous puissiez déjà faire un ctrl-s (ouf le plus important est fait). Sinon, il vous faudra parcourir votre écran distant un peu au hasard jusqu'à tomber sur votre fenêtre.

Mais plutôt que de bouger au hasard, il y a une technique pour savoir à quoi ressemble votre écran distant :

# À lancer sur la machine distante
# du paquet imagemagick
$ import -window root -display :0 ecran.jpg

Copiez ce fichier en local avec scp (ou mieux, utilisez sshfs) et ouvrez-le, miracle !

Si vous voulez cliquer à un endroit précis, ça se corse, il va vous falloir un peu plus de patience. Tout d'abord prenons une capture d'écran de la fenêtre qui nous intéresse, comme précédemment :

$ import -window $ID -display :0 ecran.jpg

Regardons ensuite les positions possibles du pointeur, par exemple ouvrez la capture avec Gimp, regardez les coordonnées des points supérieur gauche et inférieur droit du bouton à cliquer et gardez les dans un coin. Ensuite il nous faut choisir un bouton de la souris qui ne change pas fondamentalement le comportement de l'application (vous pouvez en avoir 6, mais en général vous en avez 5, en comptant la molette). Prenons le bouton droit, qui va nous afficher un menu contextuel, il nous faudra faire attention à ne pas cliquer sur celui-ci. Pour cela il suffit de prendre la fenêtre par le bas à droite et de monter en diagonale vers le haut à gauche tout en cliquant tous les quelques millimètres.

Donc dans xev lorsque vous êtes dans la fenêtre, bouton droit, vous aurez des lignes ressemblant à ceci :

    root 0x2ed, subw 0x24015df, time 52802300, (77,144), root:(81,192),

Les premières coordonnées (77,144) sont celles qui nous intéressent, les autres sont les coordonnées sur l'écran (qui peuvent vous intéresser aussi). Remontez jusqu'à ce que vous soyez dans le rectangle noté plus haut et hop bouton gauche et vous avez gagné !

PS: On me souffle dans l'oreillette que x11vnc fait tout ça en bien mieux. Mais l'article vaut quand même le coup pour toutes les techniques qu'il présente.