Comment lier une fenêtre unique à une session vnc
Table of Contents
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:
xwininfo -root -tree
l'arborescence,grep glxgears
filtrage du programme que l'on recherche,tail -n1
la dernière option,sed "s/^[ \t]*//"
suppression des espaces blancs de fin,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=">