xvnc11 sur lubuntu : un daemon retors

x11vnc / remmina

x11vnc / remmina

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…

Aucun Trackback

Vous pouvez laisser un trackback en utilisant cet URL: http://philippe.breucker.org/xvnc11-sur-lubuntu-un-daemon-retors/trackback/

Un Commentaire

  1. J’ai déjà était confronté au problème du partage d’écran notamment en utilisant Arch Linux et devant faire un partage à un … ahem, un Windowsien :-p J’avoue ne pas être adepte du démon, j’ai donc rajouté un alias dans mon .bashrc comme ceci :

    alias sharescreen=’x11vnc -ncache 10 -display :0 -viewonly’

    Je peux donc lancer la commande à tout moment et la stopper avec Ctrl+C

    Et en général je préfère ne partager qu’une seule fenêtre (ça peut alléger la bande passante) donc je peux utiliser le paramètre -id avec l’id de la fenêtre.

    Pour obtenir l’id d’une fenêtre j’utilises la commande xwininfo | grep « Window id »
    Comme ça je peux sélectionner la fenêtre et j’obtient son identifiant.

    Posté le 17/03/2016 à 14:59 | Permalien | Répondre

Ajouter un commentaire

Votre email n'est jamais partagé. Les champs obligatoires sont notés : *

*
*