User Tools

Site Tools


notes:make-single-window-vnc-session

Comment lier une fenêtre unique à une session vnc

Pour exposer une seule fenêtre d'une application déjà lancée x11vnc prend en charge le partage d'une fenêtre en fonction de son identifiant,

Exemple de commande:

x11vnc -id 0x200002

Utilistaion de xwinfo

xwininfo permet de récupérer l'ID d'une fenêtre:

  • Exécuter xwininfo à partir d'un terminal. Cliquer sur la fenêtre que l'on souhaite partager. xwininfo affichera l'identifiant de la fenêtre.
  • Exécuter x11vnc -id win_id en utilisant l'identifiant win_id récupéré ci-dessus.
# créer un affichage virtuel sur le nœud de calcul
Xvnc :33 &

# lancer l'application sur cet écran virtuel
export DISPLAY=:33
glxgears &

# découvrir son identifiant de fenêtre
xwininfo -root -children

# -> xwininfo: ID de la fenêtre: 0xdc (la fenêtre racine) (n'a pas de nom)
#
#  Root window id: 0xdc (the root window) (has no name)
#  Parent window id: 0x0 (none)
#     1 child:
#     0x200002 "glxgears": ()  300x300+0+0  +0+0

# démarrer le serveur vnc avec ce xid spécifique
x11vnc -id 0x200002 &

pour récupérer l'ID de la fenêtre dans une variable:

window_id=$(xwininfo -root -tree | grep glxgears | tail -n1 | sed "s/^[ \t]*//" | cut -d ' ' -f1)

On obtient donc:

  1. xwininfo -root -tree l'arborescence,
  2. grep glxgears filtrage du programme que l'on recherche,
  3. tail -n1 la dernière option,
  4. sed "s/^[ \t]*//" suppression des espaces blancs de fin,
  5. cut -d ' ' -f1 la première colonne uniquement et la sauvegarde.
x11vnc -id $window_id &

Pour récupérer l'ID de la fenêtre en ligne de commande:

echo "Select Window...";x11vnc -id $(xwininfo|grep -oP '(?<=id: ).*(?= ")') -viewonly -forever

Ou un plus court:

x11vnc -id pick -viewonly -forever

Création d'un pont de présentation avec guacamole

Apache Guacamole est une passerelle de bureau à distance sans client. Il prend en charge les protocoles standard tels que VNC, RDP et SSH.

Par exemple on peut partager une unique application ouverte dans une fenêtre de bureau (pour une présentation) en utilisant une session x11vnc avec guacamole:

  • On ouvre la session X11vnc en utilisant **xwininfo pour récupérer l'ID de la fenêtre que lon souhaite partager.
echo "Select Window...";x11vnc -shared -id $(xwininfo|grep -oP '(?<=id: ).*(?= ")') -forever -viewonly

Le commutateur -shared de la commande x11vnc autorise la connexion de plusieurs clients sur la même session

  • Puis on ouvre l'accès aux clients à la session ainsi ouverte en définissant un mot de passe fort (14c base64) dans le fichier /etc/guacamole/user-mapping.xml

    sudo sed -i -e '/termvnc/ s/password=".*"/password="'$(openssl rand -base64 14)'"/g' /etc/guacamole/user-mapping.xml ; wait 2; sed -n '/termvnc/p' /etc/guacamole/user-mapping.xml; sudo systemctl restart tomcat9 guacd

La commande retourne le mot de passe attribué que l'on peut envoyer aux clients pour qu'ils puissent se connecter:

<authorize username="termvnc" password="Ob2VnoinjmoJxBempXY=">
notes/make-single-window-vnc-session.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1