Depuis un bout de temps, je tente d’avoir une bonne manière de contrôler mes machines à distance. Jusqu’ici j’ai tenté plusieurs approches, et la plus stable reste (en dehors bien sûr de ssh), vnc.
Or le problème qui subsistait jusqu’ici pour moi était de connecter un client vnc avant que la session ne soit ouverte sur le serveur (cas d’un serveur sans écran par exemple). Je viens de chercher plusieurs heures donc je mets ici, sans aucune garanties bien entendu, ce qui marche pour moi…
Ce qui suit est la méthode qui fonctionne sous Lubuntu 14.04, avec x11vnc sur le serveur et remmina comme client ubuntu (Mint en l’occurrence) :
serveur : x11vnc, Lubuntu 14.04
Sous lubuntu, normalement x11vnc est installé par défaut : ouvrez un terminal et taper « x11vnc » pour le vérifier. Voir cet excellent article d’ubuntu pour des informations plus détaillées sur le sujet.
Pour gérer le démarrage de x11vnc en deamon, j’ai écrit le script suivant (librement inspiré d’un script similaire vu dans les forums) :
#! /bin/sh # ### BEGIN INIT INFO # Provides: x11vnc # Required-Start: $syslog $local_fs # Required-Stop: $syslog $local_fs # Should-Start: LightDM # Default-Start: 2 # Default-Stop: 1 # Short-Description: x11 vnc by darkhan :) # Description: x11vnc by darkhan :) ### END INIT INFO DAEMON=/usr/bin/x11vnc NAME=x11vnc DESC="X11 vnc" test -x $DAEMON || exit 0 DAEMON_OPTS=" -safer -nopw -auth /var/run/lightdm/root/:0 -display :0 -nomodtweak -shared -forever -o /var/log/x11vnc.log -bg" set -e case "$1" in start) echo -n "Starting $DESC: " start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON -- $DAEMON_OPTS & echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --oknodo --quiet --pidfile /var/run/$NAME.pid \ --exec $DAEMON echo "$NAME." ;; restart) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON sleep 1 start-stop-daemon --start --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS echo "$NAME." ;; status) if [ -s /var/run/$NAME.pid ]; then RUNNING=$(cat /var/run/$NAME.pid) if [ -d /proc/$RUNNING ]; then if [ $(readlink /proc/$RUNNING/exe) = $DAEMON ]; then echo "$NAME is running." exit 0 fi fi # No such PID, or executables don't match echo "$NAME is not running, but pidfile existed." rm /var/run/$NAME.pid exit 1 else rm -f /var/run/$NAME.pid echo "$NAME not running." exit 1 fi ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0
– Enregistrer le fichier dans /etc/init.d/x11vnc (par exemple) puis rendez-le exécutable (chmod +x)
– Il peut ensuite être démarré via la commande sudo x11vnc start
La commande lancée par le daemon est donc :
/usr/bin/x11vnc -safer -nopw -auth /var/run/lightdm/root/:0 -display :0 -nomodtweak -shared -forever -o /var/log/x11vnc.log
En gros c’est la façon standard de lancer le serveur sans mot de passe (à vos risques et périls), le connecter sur l’écran « 0 » (par défaut en général) et ne jamais l’arrêter. Pour plus de détail sur les options, voir la documentation.
Donc la méthode pour l’instant sera :
– Se connecter au serveur en ssh depuis le client une fois le boot fini (ie l’invite de session doit apparaître)
– Lancer le daemon : sudo x11vnc start
– Se connecter avec un client vnc (cf. paragraphe suivant)
client : remmina, ubuntu/Linux Mint
De ce côté là, rien de compliqué :
– Installer remmina s’il n’est pas encore présent sur votre système :
$ sudo apt-get install remmina
– Configurer le serveur : ajouter un serveur dans la liste avec l’ip de votre serveur et éventuellement vos identifiants si vous utiliser la version sécurisée
– Double-cliquer sur la ligne du serveur, et hop ! Vous pouvez vous connecter sur votre machine distante et ouvrir n’importe qu’elle session !
– A la fin de votre session, taper sudo x11vnc stop
dans votre console, puis exit pour la fermer.
Pour mémoire :
– La commande présentée ici est minimaliste, et notamment elle dépend du système utilisée.
– Le fait de démarrer le serveur manuellement est une question de sécurité : lorsque le daemon est lancé, le système est ouvert sur internet et potentiellement la cible d’attaque en brute force sur vos sessions. Il existe des moyens de sécuriser en utilisant l’option -localhost pour l’exécuter en local sur le serveur, et un tunel ssh pour rediriger le port (5900 par défaut) sur votre client (voir également la documentation de ssh à ce sujet)
Reste à démarrer le daemon au démarrage de la session automatiquement pour ceux qui n’ont pas peur. Je n’ai pas encore trouvé la bonne manière (un update-rc.d servicename defaults
marche mais le daemon plante), à suivre donc…