Contenu | Rechercher | Menus
Selon les tags présents sur cette page, celle-ci est ancienne et ne contient plus d'informations sur une des versions supportées d'Ubuntu.
Apportez votre aide…

XVNC - Un Terminal Serveur X par Vnc

Xvnc est le VNC (Virtual Network Computing) pour serveur X. Il est basé sur un serveur X standard, mais il a un écran "virtuel" plutôt que physique ( un écran déporté d'un serveur X). Les Applications X s'affichent comme s'il s'agissait d'un affichage X normal.

Pour la comparaison : c'est une alternative à la connections Terminal Serveur - qui demande moins de ressource processeur et réseau. ( A vous de voir les avantages ).

Pour les applications, c'est un serveur X, et pour les utilisateurs à distance VNC c'est un serveur VNC.

Par convention, les développeurs Xvnc ont convenu que le nombre de l'écran du serveur VNC sera le même que le numéro du serveur d'affichage X, ce qui signifie que vous pouvez utiliser par exemple :

  • snoopy:2 pour se référer à l'affichage numéro 2 sur la machine de "Snoopy" à la fois dans le monde X et le monde VNC.

En cour de traduction et de (re)test…

Pré-installation

Tout d'abord, vous devez décider quelle version de VNC vous souhaitez utiliser.

  • TightVNC est plus sûr et plus efficace. Il dispose d'un client java pour se connecter, même avec un simple navigateur. C'est utile quand un blocage firewall/port vous empêche de vous connecter autrement qu'en faisant des modifications pas toujours possibles, ex. : en entreprise, à l'école)
  • Vino - installé dans Ubuntu par défaut. Il est gourmand en ressource et en réseau.
  • RealVNC n'est pas vraiment recommandé - Voir XF4VNC plus bas.
  • XF4VNC devrait se montrer plus efficace et plus sûr que RealVNC. Il supporte également les extensions GLX, ce que TightVNC ne fait pas (à vérifier dans les dernières version).

Le fonctionnement de Xvnc peut nécessiter l'établissement d'un lien vers le répertoire des polices (C'est également le cas pour RealVNC) :

sudo ln -s /usr/share/fonts /usr/lib/X11/fonts

et aussi :

sudo ln -s /usr/share/X11/rgb.txt /usr/lib/X11/rgb.txt

La partie serveur VNC est contrôlée par le drapeau "Use flag", qu'on peut donc activer pour le packet approprié.

Installation

TightVNC (conseillé)

Cliquer pour installer tightvnc.

Fonctionnera également dans un navigateur web - avec java.

X11Vnc (conseillé)

Vino

Installé par défaut sur ubuntu.

RealVNC:

Cliquer pour installer Realvnc

XF4VNC:

emerge xf4vnc

Post-installation : Mot de passe Serveur

Une fois terminé, cela devrait vous donner quatre programmes vnc connexes : vncconnect, vncserver, vncpasswd, et vncviewer.

Ce n'était pas facile?

Pas de vncconnect, vncserver vncpasswd et vncviewer après installation de x11vnc…

Nous ne sommes déjà loin de la fin, mais vous pouvez facilement tester votre nouvelle installation de VNC en démarrant votre serveur VNC.

vncserver

Vous serez invité à entrer un mot de passe pour les clients (VNC viewer), alors allez-y. Ensuite, vous serez invité à entrer un mot de passe pour les clients "view only", ce qui signifie qu'ils peuvent voir le bureau mais ne peuvent pas interagir avec lui. Sympathique pour des démonstrations ! Après avoir saisi le mot de passe, l'initialisation du serveur VNC se terminera.

Voici ce que vous verrez :

kafka@kafka-laptop:~$ vncserver

You will require a password to access your desktops.

Password: 
Warning: password truncated to the length of 8.
Verify:   
Would you like to enter a view-only password (y/n)? y         
Password: 
Warning: password truncated to the length of 8.
Verify:   
Found /usr/share/tightvnc-java for http connections.

New 'X' desktop is kafka-laptop:1

Creating default startup script /home/kafka/.vnc/xstartup
Starting applications specified in /home/kafka/.vnc/xstartup
Log file is /home/kafka/.vnc/kafka-laptop:1.log

Tester votre serveur VNC

Testez le serveur VNC :

vncviewer localhost:1 

Cela permettra d'ouvrir un client 800x600x24bit (d'après la configuration par défaut sur ubuntu).

attention, il faudrait peut-être préciser des choses car dans mon cas l'écran est vide avec le serveur TightVNC. par contre c'est ok avec le serveur x11vnc. ceci est sans doute lié au fait que le serveur TightVNC s'occupe d'un écran virtuel (DISPLAY :1) tandis que le serveur x11vnc s'occupe de l'écran courant (DISPLAY :0).

Mais c'est un début, et il prouve que vous avez fait un grand pas de plus sur le bureau X à distance. Si vous voulez une autre résolution ou une couleur de fond, il suffit d'utiliser le numéro deux qui figure dans le fichier des services.

Nous allons faire une configuration complète - c'est à dire - avec beaucoup de possibilité - résolution et nombre de bit.

Vous pouvez sélectionner ce dont vous avez besoin.

N'oubliez pas ensuite de router les ports dont vous aurez besoin :

  • Dans le cas ou vous voulez router directement de l'extérieur vers votre machine → les ports VNC : (5950-5954, 5960-5964, 5970-5974, 5980-5984) pour l'accès externe.
  • Ou dans le cas du vpn ou ssh, voir par la suite.

Si vous vous connectez depuis une machine Windows, il suffit d'ouvrir la boîte de dialogue avec un client vnc (ex: TightVNC viewer) et assurez-vous d'ajouter le: 1 à la fin de l'adresse.

Si vous avez installé tightvnc (java) vous pouvez vous connecter par navigateur à http://localhost:5950

Connexion automatique du Serveur Vnc

Xinetd

Xinetd est utilisé pour lancer automatiquement un serveur VNC sur l'appel d'un client externe.

Il y a plusieurs façons de permettre à xinetd d'écouter les appels externes, voici quelques exemples:

  • Modifier /etc/xinetd.conf :
    sudo xdg-open /etc/xinetd.conf

Pour ouvrir les connexions à tous (peut poser des problèmes de sécurité) mettre un # devant la ligne :

#only_from = localhost 
  • Si vous voulez seulement l'accès aux clients internes, vous pouvez dresser la liste:
only_from = 192.168.0.1 192.168.0.2
  • Pour une interface donné, vous pouvez spécifier l'IP de cette interface:
bind = 192.168.0.1 

Exemple de fichier ( pour découvrir d'autres options ) :

{
  instances = 60
  log_type = SYSLOG authpriv 
  log_on_success = HOST PID
  log_on_failure = HOST
  cps = 25 30
}
includedir /etc/xinetd.d

Le manuel xinetd.

Ajouter les Services

1. Editer /etc/services :

sudo xdg-open /etc/services

Et Ajouter (à la fin) :

#
# VNC Servers
#
vnc-640x480x8 5950/tcp
vnc-800x600x8 5951/tcp
vnc-1024x768x8 5952/tcp
vnc-1280x1024x8 5953/tcp
vnc-1600x1200x8 5954/tcp

vnc-640x480x16 5960/tcp
vnc-800x600x16 5961/tcp
vnc-1024x768x16 5962/tcp
vnc-1280x1024x16 5963/tcp
vnc-1600x1200x16 5964/tcp

vnc-640x480x24 5970/tcp
vnc-800x600x24 5971/tcp
vnc-1024x768x24 5972/tcp
vnc-1280x1024x24 5973/tcp
vnc-1600x1200x24 5974/tcp

vnc-640x480x32 5980/tcp
vnc-800x600x32 5981/tcp
vnc-1024x768x32 5982/tcp
vnc-1280x1024x32 5983/tcp
vnc-1600x1200x32 5984/tcp

2. Créer /etc/xinetd.d/xvncserver si il n'existe pas déjà.

sudo touch /etc/xinetd.d/xvncserver && sudo xdg-open /etc/xinetd.d/xvncserver

Attention: Assurez-vous que votre éditeur de texte (tel que nano) ne coupe pas certaines des longues lignes. Si cela arrive vous obtiendrez connexion refusée erreurs.

Vous pouvez trouver toutes les options d'xvnc ici.

Et ajouter :

  • Si vous avez choisi Tightvnc :
 
service vnc-640x480x8
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 640x480 -depth 8 -SecurityTypes=None  
}
service vnc-800x600x8
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 800x600 -depth 8 -SecurityTypes=None 
}
service vnc-1024x768x8
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1024x768 -depth 8 -SecurityTypes=None 
}
service vnc-1280x1024x8
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1280x1024 -depth 8 -SecurityTypes=None 
}
service vnc-1600x1200x8
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1600x1200 -depth 8 -SecurityTypes=None 
}
service vnc-640x480x16
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 640x480 -depth 16 -SecurityTypes=None 
}
service vnc-800x600x16
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 800x600 -depth 16 -SecurityTypes=None 
}
service vnc-1024x768x16
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1024x768 -depth 16 -SecurityTypes=None 
}
service vnc-1280x1024x16
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1280x1024 -depth 16 -SecurityTypes=None 
}
service vnc-1600x1200x16
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1600x1200 -depth 16 -SecurityTypes=None 
}
service vnc-640x480x24
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 640x480 -depth 24 -SecurityTypes=None 
}
service vnc-800x600x24
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 800x600 -depth 24 -SecurityTypes=None 
}
service vnc-1024x768x24
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1024x768 -depth 24 -SecurityTypes=None 
}
service vnc-1280x1024x24
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1280x1024 -depth 24 -SecurityTypes=None 
}
service vnc-1600x1200x24
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1600x1200 -depth 24 -SecurityTypes=None 
}
service vnc-640x480x32
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 640x480 -depth 32 -SecurityTypes=None 
}
service vnc-800x600x32
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 800x600 -depth 32 -SecurityTypes=None 
}
service vnc-1024x768x32
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1024x768 -depth 32 -SecurityTypes=None 
}
service vnc-1280x1024x32
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1280x1024 -depth 32 -SecurityTypes=None 
}
service vnc-1600x1200x32
{
         protocol = tcp
         socket_type = stream
         wait = no
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1600x1200 -depth 32 -SecurityTypes=None 
}

  • Si vous avez choisi un autre serveur vnc :
 
service vnc-640x480x8
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 640x480 -depth 8 -SecurityTypes=None  
}
service vnc-800x600x8
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 800x600 -depth 8 -SecurityTypes=None 
}
service vnc-1024x768x8
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1024x768 -depth 8 -SecurityTypes=None 
}
service vnc-1280x1024x8
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1280x1024 -depth 8 -SecurityTypes=None 
}
service vnc-1600x1200x8
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1600x1200 -depth 8 -SecurityTypes=None 
}
service vnc-640x480x16
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 640x480 -depth 16 -SecurityTypes=None 
}
service vnc-800x600x16
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 800x600 -depth 16 -SecurityTypes=None 
}
service vnc-1024x768x16
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1024x768 -depth 16 -SecurityTypes=None 
}
service vnc-1280x1024x16
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1280x1024 -depth 16 -SecurityTypes=None 
}
service vnc-1600x1200x16
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1600x1200 -depth 16 -SecurityTypes=None 
}
service vnc-640x480x24
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 640x480 -depth 24 -SecurityTypes=None 
}
service vnc-800x600x24
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 800x600 -depth 24 -SecurityTypes=None 
}
service vnc-1024x768x24
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1024x768 -depth 24 -SecurityTypes=None 
}
service vnc-1280x1024x24
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1280x1024 -depth 24 -SecurityTypes=None 
}
service vnc-1600x1200x24
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1600x1200 -depth 24 -SecurityTypes=None 
}
service vnc-640x480x32
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 640x480 -depth 32 -SecurityTypes=None 
}
service vnc-800x600x32
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 800x600 -depth 32 -SecurityTypes=None 
}
service vnc-1024x768x32
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1024x768 -depth 32 -SecurityTypes=None 
}
service vnc-1280x1024x32
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1280x1024 -depth 32 -SecurityTypes=None 
}
service vnc-1600x1200x32
{
         protocol = tcp
         socket_type = stream
         wait = no
         user = nobody
         server = /usr/bin/Xvnc
         server_args = -inetd -query localhost -once -geometry 1600x1200 -depth 32 -SecurityTypes=None 
}

Comme vous pouvez le voir, nous utilisons l'utilisateur nobody pour ouvrir une session VNC et-SecurityTypes = None pour la connexion sans mot de passe, utilisez uniquement des -SecurityTypes = None si vous utilisez RealVNC ou TightVNC , car ils ne supportent pas cette option!

Configurer le gestionnaire de connexion (XDMCP)

Faisons la prochaine étape, configurez le gestionnaire de connexion. Une fois connecté, l'utilisateur devra s'authentifier dans votre gestionnaire de connexion (gdm, kdm …) et ensuite la session choisie sera lancée.

SI vous souhaitez autoriser les connexions anonymes, l'utilisateur nobody doit avoir un shell valide attribué lors de l'utilisation du gestionnaire de connexion. Vous ne recevrez qu'un écran gris lors de la connexion si personne n'a défini la valeur par défaut de /bin/false.

sudo usermod -s /bin/bash nobody 

Si vous utilisez kdm, aucune modification n'est nécessaire pour l'utilisateur nobody.

A VALIDER, Si encore nécessaire ?

Vous pourriez vouloir vous assurer que vous avez défini xsession :

gksudo gedit /etc/rc.conf

Pour KDE ajouter :

XSESSION="kde-3.5"

utilisent xdm | gnome en conséquence.

GDM - (Gnome - Ubuntu)

A partir de karmic koala (ubuntu 9.10) il faut éditer /etc/gdm/gdm.shemas :

gksudo gedit /etc/gdm/gdm.schemas

Et mettre la balise xdmcp/Enable à true. Comme vous pouvez le voir il y a d'autres paramètres disponibles pour xdmcp.

Pour les versions antérieurs → éditez /etc/gdm/gdm.conf :

gksudo gedit /etc/gdm/gdm.conf
#Cherchez [xdmcp]
[xdmcp]
# Ajouter ou modifier la ligne qui suit 
Enable=True

ou

Solution alternative, vous pouvez Démarrer gdmsetup

gksudo gdmsetup

, puis aller sur l'onglet "Sécurité" Assurez-vous que "Activer XDMCP" est cochée.(dépendant de votre version de gdm).

KDM - (Kde - Kubuntu)

Modifier /etc/kde/kdm/kdmrc (ou /usr/kde/3.?/share/config/kdm/kdmrc ) et activer XDMCP sur le port 177

gksudo gedit /etc/kde/kdm/kdmrc
[Xdmcp]  
#  KDM doit écouter les requêtes XDMCP. 
Enable=true 
# Le port UDP : KDM doit écouter les demandes XDMCP.Ne changez pas le 177. 
Port=177
gksudo gedit /usr/kde/3.?/share/config/kdm/Xaccess
* CHOOSER BROADCAST # n'importe quel hôte indirects peuvent obtenir un sélecteur
192.168.0 .* 
# ou hôtes autorisés depuis le réseau 192.168.0 

XDM

Ouvrir /etc/X11/xdm/xdm-config avec votre éditeur préféré.

gksudo gedit /etc/X11/xdm/xdm-config

Regardez la dernière ligne: "DisplayManager.requestPort: 0"

Commentez-la en insérant un ! au début de la ligne.

!DisplayManager.requestPort:     0 ! 

Modifier /etc/X11/xdm/Xaccess et décommenter la ligne " '* #any host can get a login window" en supprimant '. Vous pourrez également changer à 192.168.0 .* pour une certaine raison de sécurité.

Définir l'accès

Pour éviter un problème où vous pouvez vous connecter, mais par la suite vous n'avez qu'un écran noir, éditer le fichier /etc/security/pam_env.conf

gksudo gedit /etc/security/pam_env.conf 

et vérifiez que les lignes suivantes sont commentées (ont # devant):

#REMOTEHOST     DEFAULT= OVERRIDE=@{PAM_RHOST}
#DISPLAY        DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
#XAUTHORITY     DEFAULT= OVERRIDE=@{XAUTHORITY}

Redémarrer les services

Note: gdm restart mettra fin à votre session X. Remplacer gdm, par kdm, xdm …

sudo /etc/init.d/xinetd restart
sudo /etc/init.d/gdm restart

Tester la Configuration

Tunneling via SSH

Comme dit auparavant si vous utilisez un tunnel ssh ou un vpn vous n'aurez pas besoin de rediriger d'autre port sur votre machine !

  1. En partant du principe le serveur vncserver sur l'hôte (serveur) est lancé, fonctionnel, bien configuré, et testé !
  2. Sur le client vous pouvez lancer cette commande : ssh-f-N-L portLocal: vncserver: Pseudo vncServerPort @ vncServerPort
ssh -f -N -L localPort:vncServer:vncServerPort username@vncServer
  • -f Requests ssh to go to background just before command execution. This is useful if ssh is going to ask for passwords or passphrases,

but the user wants it in the background. This implies -n. The recommended way to start X11 programs at a remote site is with something like ssh -f host xterm.

  • -N Do not execute a remote command. This is useful for just forwarding ports (protocol version 2 only).
  • -L [bind_address:]port:host:hostport

Plutôt que de répéter l'information (et au crédit de l'auteur original), je vais mettre lien vers cette page:

http://pigtail.net/LRP/vnc/ (cette page est destiné à Windows).

Liens



Le contenu de ce wiki est sous licence : CC BY-SA v3.0