Mettre en place des multi-sessions graphiques VNC avec MATE avec tunnel SSH sur OpenIndiana

Vous trouverez ici un guide technique pas à pas pour transformer une installation fraîche d'OpenIndiana (minimal) en un environnement de bureau distant prêt à l'emploi.

Il s'agît d'une méthode ancienne, mais toujours très robuste.
On utilisera de nos jours un serveur VNC plus moderne comme TigerVNC sur OpenIndiana, qui sera plus performant dans ce cas de figure.
Néanmoins la méthode que je montre reste valide et est utile pour la transparence et la compatibilité.

Il couvre les étapes essentielles : sécurisation initiale (mots de passe, firewall IPFilter), configuration réseau et système (DNS, hostname, timezone, boot), installation de l'environnement graphique MATE, mise en place d'un serveur VNC headless via Xorg et le driver dummy, automatisation avec tmux, et intégration de VirtualBox pour la virtualisation.
Enfin, je montrer comment créer et gérer plusieurs sessions utilisateurs indépendantes, chacune avec son propre affichage et accès VNC sécurisé.

Ce tutoriel peut-être particulièrement utile pour :

S'identifier en root pour commencer.


Configurer IPF (ne laisser entrer que le SSH... laisser les flux sortants revenir)

Créer un fichier de règles pour IPFilter : /etc/ipf/ipf.conf :

block in log all
block out log all
block in log quick from any to any with ipopts
block in log quick proto tcp from any to any with short
pass in quick on lo0 all
pass out quick on lo0 all
pass out quick on ixgbe0 all keep state
## CETTE REGLE DOIT RESTER COMMENTEE CAR ELLE OUVRE LE PARE-FEU !! pass in quick on igb0 all keep state
pass in log quick proto tcp from any to any port = 22 keep state

Démarrer IPFilter avec notre fichier de configuration :

svcadm enable ipfilter ; ipf -Fa -f /etc/ipf/ipf.conf

Se connecter via SSH à adminweb puis passer en root

1) Installer mate :

pkg install mate_install ; sleep 2 ; svcadm enable lightdm

2) Mettre mate en français pour l'utilisateur adminweb :

echo "[Desktop]\nSession=mate\nLanguage=fr_FR.UTF-8" > /export/home/adminweb/.dmrc

3) Configurer lightdm avec le clavier AZERTY

printf "Section \"InputClass\"\n Identifier \"KeyboardDefaults\"\n MatchIsKeyboard \"on\"\n Option \"XkbLayout\" \"fr\"\nEndSection" > /etc/X11/xorg.conf.d/keyboard-fr.conf

4) Redémarrer.

reboot

Se reconnecter en SSH à adminweb puis passer en root

5) Installer le driver dummy :

pkg install xorg-video-dummy

6) Installer le serveur x11vnc et tmux

pkg install x11vnc tmux

7) Créer un fichier de configuration (/etc/X11/xorg.conf.d/20-dummy.conf) pour le driver dummy

Section "Device"
 Identifier "DummyDevice"
 Driver "dummy"
 VideoRam 256000
EndSection

Section "Monitor"
 Identifier "DummyMonitor"
 HorizSync 1.0 - 200.0
 VertRefresh 1.0 - 200.0
EndSection

Section "Screen"
 Identifier "DummyScreen"
 Device "DummyDevice"
 Monitor "DummyMonitor"
 DefaultDepth 24
 SubSection "Display"
 Depth 24
 Modes "2560x1600" "1920x1080" "1280x720"
 Virtual 2560 1600
 EndSubSection
EndSection

Section "ServerLayout"
 Identifier "DummyLayout"
 Screen "DummyScreen"
EndSection

8) Puis, continuer en tant qu'adminweb tout du long ! (quitter root !)

- La procédure suivante doit être reproduite en changeant le port (5901) et le DISPLAY=:1 (1 -> 5901) pour un nouvel utilisateur.
- Voir exemple tout en bas.

9) Créer un mot de passe VNC pour adminweb :

x11vnc -storepasswd # se rappeler que le mot de passe doit faire 8 caractères max.
umask 077
touch ~/.Xauthority
chmod 600 ~/.Xauthority
COOKIE=$(openssl rand -hex 16)
xauth -f ~/.Xauthority add :1 . "$COOKIE"

10) Lancer Xorg (ne pas tenir compte des nombreuses erreurs et warning)

nohup /usr/bin/Xorg :1 -noreset -nolisten tcp -auth /export/home/adminweb/.Xauthority > ~/.x11.log 2>&1 &

(taper ENTRER après le lancement pour revenir au prompt)

11) Vérifier que X répond :

DISPLAY=:1 xdpyinfo >/dev/null && echo "Xorg ok" || echo "Xorg pas ok"

12) Pointer le shell vers l'affichage headless

export DISPLAY=:1
export XAUTHORITY=/export/home/adminweb/.Xauthority

13) Vérifier que X répond toujours :

xdpyinfo >/dev/null && echo "Xorg ok" || echo "Xorg pas ok"

14) Lancer MATE dans le même shell :

nohup dbus-launch --exit-with-session mate-session > ~/.mate-session.log 2>&1 &

(taper ENTRER après le lancement pour revenir au prompt)

15) Désactiver l'écran noir/veille

xset s off -dpms
xset s noblank

16) Démarrer VNC :

nohup x11vnc -display :1 -auth "$XAUTHORITY" -rfbauth /export/home/adminweb/.vnc/passwd -rfbport 5901 -forever -loop -noxdamage -repeat -shared -ncache > ~/.x11vnc.log 2>&1 &

Se connecter via VNC avec UltraVNC viewer. Affichage à 125%

17) Ne pas oublier d'installer Virtualbox si vous le souhaitez

pkg install virtualbox virtualbox-additions

Pour l'usage de Virtualbox (à l'intérieur des VM, mettre l'hôte (le PC duquel on travaille avec une console VNC ouverte, pas OpenIndiana, en QWERTY)
Créer une première VM et ajoutez-lui une carte réseau réseau privé hôte. Voir la carte vboxnet0 s'ajouter avec "ipadm" puis modifier la configuration du pare-feu pour l'ajouter aux autorisations :
/etc/ipf/ipf.conf

block in log all
block out log all
block in log quick from any to any with ipopts
block in log quick proto tcp from any to any with short
pass in quick on lo0 all
pass out quick on lo0 all
pass out quick on ixgbe0 all keep state
pass out quick on vboxnet0 all keep state
## CETTE REGLE DOIT RESTER COMMENTEE CAR ELLE OUVRE LE PARE-FEU !! pass in quick on igb0 all keep state
pass in log quick proto tcp from any to any port = 22 keep state
svcadm enable ipfilter ; ipf -Fa -f /etc/ipf/ipf.conf

Pas besoin de créer un NAT pour Virtualbox, on peut rajouter plusieurs cartes (NAT pour internet, réseau privé hôte pour l'hôte etc.)

18) Arrêter Xorg et MATE à la fin :

pkill Xorg

19) Configurer un tunnel SSH pour la connexion VNC avec KiTTY/PuTTY.

-L5901 127.0.0.1:5901

20) Configurer un NAT utilisable pour VirtualBox si nécessaire


CONDENSE pour démarrer tout ça rapidement après connexion SSH (sauf si vous avez configuré l'exécution de la commande dans le profile KiTTY/PuTTY)

tmux new-session -d -s adminweb
tmux send-keys -t adminweb 'nohup /usr/bin/Xorg :1 -noreset -nolisten tcp -auth /export/home/adminweb/.Xauthority > ~/.x11.log 2>&1 &' C-m
tmux send-keys -t adminweb 'export DISPLAY=:1 ; export XAUTHORITY=/export/home/adminweb/.Xauthority' C-m
tmux send-keys -t adminweb 'nohup dbus-launch --exit-with-session mate-session > ~/.mate-session.log 2>&1 &' C-m
tmux send-keys -t adminweb 'nohup x11vnc -display :1 -auth "$XAUTHORITY" -rfbauth /export/home/adminweb/.vnc/passwd -rfbport 5901 -forever -loop -noxdamage -repeat -shared -ncache > ~/.x11vnc.log 2>&1 &' C-m

L'avantage de tout envoyer dans tmux : si la session SSH coupe, le bureau ne coupe pas !
Pas besoin de relancer le tmux en se reconnecter, il suffit juste de rouvrir le client VNC


Créer une nouvelle session utilisateur VNC avec son propre display :

Remplacer (pour aller plus vite)
- prénom : marcel
- rfb : 5902
- display : :2

useradd -m -s /bin/bash "marcel"
passwd marcel

- se loguer en tant que marcel, puis :

x11vnc -storepasswd
umask 077
touch ~/.Xauthority
chmod 600 ~/.Xauthority
COOKIE=$(openssl rand -hex 16)
xauth -f ~/.Xauthority add :2 . "$COOKIE"
nohup /usr/bin/Xorg :2 -noreset -nolisten tcp -auth /export/home/marcel/.Xauthority > ~/.x11.log 2>&1 &
export DISPLAY=:2 ; export XAUTHORITY=/export/home/marcel/.Xauthority
nohup dbus-launch --exit-with-session mate-session > ~/.mate-session.log 2>&1 &
xset s off -dpms ; xset s noblank
nohup x11vnc -display :2 -auth "$XAUTHORITY" -rfbauth /export/home/adminweb/.vnc/passwd -rfbport 5902 -forever -loop -noxdamage -repeat -shared -ncache > ~/.x11vnc.log 2>&1 &

Configurer un tunnel SSH pour la connexion VNC avec KiTTY/PuTTY.

-L5902 127.0.0.1:5902

CONDENSE pour démarrer tout ça rapidement après connexion SSH :

tmux new-session -d -s marcel
tmux send-keys -t marcel 'nohup /usr/bin/Xorg :2 -noreset -nolisten tcp -auth /export/home/marcel/.Xauthority > ~/.x11.log 2>&1 &' C-m
tmux send-keys -t marcel 'export DISPLAY=:2 ; export XAUTHORITY=/export/home/marcel/.Xauthority' C-m
tmux send-keys -t marcel 'nohup dbus-launch --exit-with-session mate-session > ~/.mate-session.log 2>&1 &' C-m
tmux send-keys -t marcel 'nohup x11vnc -display :2 -auth "$XAUTHORITY" -rfbauth /export/home/marcel/.vnc/passwd -rfbport 5902 -forever -loop -noxdamage -repeat -shared -ncache > ~/.x11vnc.log 2>&1 &' C-m


↑ Haut de page