Table des matières
Le contrôle à distance est devenu une pratique très courante. Les informaticiens s'en servent quasiment tous les jours, presque tous le temps dans ces deux cas : l’administration de serveurs distants et la télémaintenance (pour venir en aide aux utilisateurs). Je vais détailler ici, quelques méthodes ainsi que quelques astuces croustillantes comme le fameux Seamless.
Logiciels de télémaintenance
Il en existe plusieurs que je liste ci dessous :
- Anydesk
- TeamViewer
- Microsoft Remote Desktop (RDP / mstsc)
- Chrome Remote Desktop
- VNC (UltraVNC, TightVNC, TigerVNC, RealVNC…)
Anydesk et Teamviewer sont tous deux des logiciels complets et faciles à prendre en main. On l'installe sur les deux postes (l'assistant et l'assisté en gros), l'assisté communique à l'assistant les codes affichés par le logiciel, et l'assistant se connecte et accède enfin au bureau de l'utilisateur assisté.
Microsoft Remote Desktop est intégré dans toutes les versions de Windows, et y est spécifique (même s'il existe une implémentation de ce protocole sur linux qui s'appelle xrdp et qui permet de faire un serveur RDP sur un système GNU/Linux). On s'en sert beaucoup pour prendre la main sur un serveur windows depuis une machine windows.
Chrome Remote Desktop est une extension du navigateur Chrome, et permet de prendre la main d'un pc à l'autre pourvu que Google Chrome y soit installé et soit lancé des deux coté (avec le navigateur ouvert, ou bien simplement exécuté en fond).
VNC est en fait un protocole d'affichage distant. Il est très complet et permet quelques bricolages sympas notamment sur Linux (comme utiliser l'écran d'une seconde machine comme étant un second écran du premier par exemple)
Seamless
Le seamless, ou headless, est le fait d'afficher la fenetre d'un systeme sur un autre, mais sans rien d'autre que la fenetre elle même. Ca peut etre très pratique dans certains cas.
Client Windows - Serveur/Hote/VM Linux
Exemple : je suis sur Windows. Je souhaite afficher une ou plusieurs fenêtre d'un système Linux distant (ça peut être un serveur, un pc, ou même une machine virtuelle)… Voici la méthode pour le faire :)
Prérequis
- SSH pour windows
- VCXSRV - Serveur d'affichage X pour Windows
- XForward activé coté linux
Installer les prérequis sur Windows
SSH sur Windows 10
- Aller dans Paramètres > Applications et cliquer sur Fonctionnalités facultatives
- Si Client OpenSSH n'est pas dans la liste, cliquer sur Ajouter une fonctionnalités et l'installer
SSH sur Windows 7 et 8
- Installer Chocolatey
- Ouvrir CMD et saisir choco install -y openssh
VCXSRV
Ce serveur X pour Windows est basé sur les sources git de Xorg (le “vrai” serveur X pour linux), mais compilé avec MS Visual C++ 2012. Je choisis ce projet et pas Xming car ce dernier est inactif depuis plusieurs années maintenant… On peut le télécharger ICI.
Activation du XForward sur Linux
- Se connecter sur la machine linux, soit en ssh, soit directement sur son propre clavier/écran.
- Editer le fichier /etc/ssh/sshd_config (en root)
- Trouver la ligne X11Forwarding yes et la décommenter
- Redémarrer le service ssh systemctl restart sshd (cette commande fonctionne sur les systèmes utilisant SystemD, comme Archlinux ou Debian)
VirtualBox
S'il s'agit d'une machine virtuelle Linux sous VirtualBox, configurez comme ceci :
- Entrer dans la configuration réseau de la VM
- cliquer sur Avancé, puis Redirection de port
- Saisir la règle suivante:
Nom | Protocole | IP Hôte | Port Hôte | IP invité | Port invité |
---|---|---|---|---|---|
SSH | TCP | 192.168.5.26 | 22 | 10.0.2.15 | 22 |
On peut bien sûr adapter comme on veut. Précision : l'IP invité est bien celle que la VM prend dans le NAT (faire un ip -4 a pour l'obtenir)
Utilisation
- La première chose à faire est de lancer la VM (ou de s'assurer que l'hôte linux soit bien démarré)
- Lancer le serveur X pour windows (vcxsrv)
- Ouvrir CMD (ou bash pour windows / MSYS2 / Cygwin)
- Se connecter en SSH sur la VM (si la connexion entre l'hote linux et le client windows est lente, spécifier -C pour activer la compression). ssh -C t0mux@192.168.5.26
- Exporter la variable DISPLAY pour que linux sache où envoyer les fenêtres export DISPLAY=10.0.2.2:0
- Il suffit ensuite simplement de taper le nom du programme à lancer mate-calculator
Attention : le lancement d'une application de cette façon va monopoliser le terminal… ce qui nous oblige à en lancer un nouveau, puis se reconnecter en ssh etc… c'est pas viable on veut se servir du linux comme un véritable serveur d'applications. Je vous propose d'ajouter l'alias suivant dans le .bashrc de votre linux :
alias SR='setsid $1 > /dev/null 2>&1 &'
Ceci aura pour effet de lancer le processus de façon indépendante avec setsid (si le terminal est fermé, le programme reste ouvert), de masquer le stdout et stderr avec > /dev/null 2>&1 et de libérer aussitôt le terminal avec &. Pour lancer un programme il suffit alors de saisir :
SR mate-calculator
Utilisateurs de MATE : je vous conseil transformer l'alias précédent en fonction et d'ajouter les 3 lignes suivantes à votre .bashrc
SR() { setsid $1 > /dev/null 2>&1 & } export TERM=xterm-256color export DISPLAY=10.0.2.2:0 SR /usr/lib/mate-settings-daemon/mate-settings-daemon
Utilisateurs XFCE : même chose que les utilisateurs de Mate mais avec la dernière ligne suivante SR xfce4-session
Ces 3 lignes permettent d'exporter immédiatement la varible DISPLAY au lancement de la connexion ssh, de définir la variable TERM correctement (empeche certains messages d'erreur…), et de lancer le daemon de MATE qui gère le parametrage de ce dernier y compris les thèmes ! Sinon vous n'aurez pas de thème sur vos application et ce sera assez moche. :)
Lanceurs (facultatifs)
Je n'ai pas trouvé de lanceurs sur le net pour ce genre de cas finalement assez spécifique. Donc j'ai tout simplement rédigé des scripts qui nous simplifient grandement la vie en faisant exactement tout ce que je viens de décrire précédemment mais de façon automatisée !
Lancement VM+X+menu
Ce script batch est à adapter en fonction de votre install et à exécuter sur l'hote windows. Il lance la machine virtuelle (si éteinte) en mode headless (en arrière plan), lance le serveur X pour windows (si non lancé), se connecte en ssh à la VM puis exécute le script bash qui est un menu CLI.
- Xnunux.cmd
@echo off REM Pour avoir une petite fenetre mode con cols=30 lines=12 echo Demarrage de la VM... "%programfiles%\Oracle\VirtualBox\VBoxManage.exe" startvm "Manjaro" --type headless if %errorlevel% neq 0 cls tasklist | findstr vcxsrv.exe > NUL if %errorlevel% equ 0 goto ssh echo Demarrage du serveur X... start P:\apps\VcXsrv\vcxsrv.exe -multiwindow timeout /T 10 > NUL :ssh ssh -t -X t0mux@192.168.5.26 "bash ~/xmenu.sh"
script menu CLI
C'est le script qui est lancé par la connexion ssh du script batch… Je l'ai écrit pour me simplifier la vie pour lancer les programmes linux depuis windows. Attention, à adapter aussi : 10.0.2.2 est l'IP que mon hote windows a par rapport au réseau NAT de la VM.
- xmenu.sh
#!/bin/bash # "Silent Run" SR() { setsid $1 > /dev/null 2>&1 & } export TERM=xterm-256color export DISPLAY=10.0.2.2:0 # SR /usr/lib/mate-settings-daemon/mate-settings-daemon # pour Mate # SR xfce4-session # pour XFCE while : do clear echo "## Lanceur ##" echo echo "C) Calculette" echo "E) Caja" echo "F) Firefox" echo "G) Qutebrowser" echo "R) Riot" echo "T) Terminal" echo echo "Q) Quitter" read -n1 -p ">" ch case $ch in c|C) SR mate-calculator;; e|E) SR caja;; f|F) SR firefox;; g|G) SR qutebrowser;; r|R) SR riot-desktop;; t|T) SR mate-terminal;; q|Q) exit;; esac done
Ouvrir une session distante (Linux)
C'est une sorte de multiseat, mais distant. En gros, on utilise les ressources d'un ordinateur (potentiellement déjà utilisé physiquement par quelqu'un) mais à distance. Donc par le biais d'une session, d'un VNC…
Méthode VNC
(en cours)