Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/10/2010, à 04:48

emri

[Résolu] x11vnc - démarrage avant fenêtre de connexion + script init.d

Bonjour à tous,

J'ai un PC qui est destiné à tourner en serveur NAS sans moniteur.
La connexion a mon compte utilisateur est automatique, j'arrive directement sur le bureau et le service VNC est automatiquement démarré.
Je souhaite pouvoir y accéder depuis mon réseau local (poste sous windows 7 et ubuntu).

Lors de la connexion avec VncViewer sur le client, je saisis mon mot de passe (différent de mon mot de passe de session utilisateur du serveur). La connexion est alors bloquée tant que je n'ai pas saisis le mot de passe du trousseau de connexion sur le serveur (identique à mon mot de passe de session du serveur).

Le message exact est:

Déverrouiller le trousseau de connexion a écrit :

Saisissez votre mot de passe pour déverrouiller le trousseau de connexion

Le trousseau de connexion n'a pas été déverrouillé lors de votre connexion à cet ordinateur.

Je suis donc bloqué, car sans clavier directement branché sur le serveur, impossible de me connecter (et sans écran, pas très pratique pour comprendre ce qu'il se passe).

La solution expliquée ici (doc de network-manager) (paragraphe "Éviter les saisies du mot de passe") n'a pas fonctionné pour ma part.
Dans cette solution il est dit:

Documentation network-manager a écrit :

Cette solution fonctionne réllement, c'est indiscutable. Il se peut que son fonctionnement soit conditionné par d'autres réglages ou à l'installation de paquets spécifiques (lipamXX par exemple).

Cette solution est indiquée dans le cadre d'une connexion wifi sécurisée; est-elle valide pour une connexion VNC ?
Si c'est le cas, pouvez m'indiquer ce qu'il pourrait faire que cela coince ? Que me faut-il vérifier pour libamXX ?


J'ai aussi pensé à une autre solution, qui consisterait à ouvrir une connexion VNC avant la fenêtre de connexion (qui dans ce cas ne serait pas automatique), mais là je ne sais comment faire.


Auriez vous une solution ou une piste à me proposer ?
Merci d'avance.


Note: tous mes postes linux sont sous ubuntu Lucid LTS 32bits (serveur et client), mon poste Windows est un Seven 64bits.

Dernière modification par emri (Le 26/10/2010, à 14:05)

Hors ligne

#2 Le 26/10/2010, à 14:03

emri

Re : [Résolu] x11vnc - démarrage avant fenêtre de connexion + script init.d

Après de longues et douloureuses lectures de documentations et manpage, de nombreuses recherches Google et une calvitie précoce naissante, j'ai enfin trouvé une solution à mon problème.

J'ai finalement opté pour la solution suivante:
- plus de connexion automatique à mon compte
- démarrage du serveur VNC avant la fenêtre de connexion.

Il réside l'inconvénient que lors du démarrage de la machine, il faut que je prenne le contrôle en VNC pour ouvrir ma session, mais ceci est à mon sens bien moins problématique que de devoir avoir un écran, un clavier et une souris branchée pour saisir le mot de passe du trousseau de connexion.

Je vous explique les manipulations effectuées pour parvenir à mes fins, cela pourra servir de piste à d'autres débutants linux je suppose.
Cette méthode n'est pas forcément la meilleure, ni même les moyens mis en œuvre pour y arriver, n'hésiter pas à me corriger ou à me proposer une meilleure solution si vous en connaissez, je suis en pleine auto formation 'nux et je serais ravi d'en apprendre toujours plus.
J'ai d'ailleurs peut-être sorti le bazooka pour tuer une mouche, mais j'ai appris  un tas de choses durant cette folle nuit, reste à savoir si lorsque j'aurais fini le tour du bocal, je m'en souviendrais encore roll

Passons dans le vif du sujet:

Toutes les opérations sont à effectuer sur le serveur distant (accès ssh indispensable ou clavier/souris/écran connectés durant la mise en place)

Contexte:

  • Coté serveur:

    • x11vnc

    • Gnome Desktop Manager

  • Coté client:

    • poste Linux: Visionneur de bureaux distants (vinagre)

    • Poste Windows: RealVNC Viewer

OS: Ubuntu Lucid Lynx desktop 32bits,  Windows 7 Ultimate 64 bits.


Installation de x11vnc:

apt installinstallation en un clic ou en ligne de commande:

sudo apt-get install x11vnc


Création du script de démarrage du serveur:

Fichier /etc/init.d/x11vnc: (ce script n'est surement pas parfait, toute suggestion est la bienvenue)

#!/bin/sh
### BEGIN INIT INFO
# Provides: x11vnc-server
# Required-Start: networking
# Required-Stop: 
# Default-Start: S
# Default-Stop: 0 6
# Description: Manage X11VNC server
### END INIT INFO

## Script de démarrage de serveur VNC avant la fenêtre de connexion
## basé sur le serveur VNC x11vnc et le gestionnaire de fenêtre GDM
##
## emri.e9 [ AT ] gmail.com

## Limitation: lorsque plusieurs instances du serveur VNC sont lancées
## l'option stop les termine toutes, il n'est pas possible de choisir
## une instance en fonction du port écouté

## OPTIONS ############

## Utilisateur principal
## /!\ Ne correspond pas à l'utilisateur avec lequel est lancé le serveur !
## Correspond à l'utilisateur avec lequel vous allez vous loguez sur le
## serveur.
## Limitation: le verrouillage de la session lors de la déconnexion du client
##             VNC fonctionnera uniquement pour cet utilisateur.
## Je n'ai pas trouvé comment récupérer dynamiquement ceci pour l'adapter à
## la session en cours, si vous avez une solution, maillez moi ;)
USER=emri

## Fichier de log
LOGFILE=/var/log/x11vnc.log

## Permet de démarrer plusieurs instances si le serveur est déjà en train de
## fonctionner
ALLOW_MULTI_INSTANCES=false

## Port par défaut (sert aussi numéro de base pour avoir plusieurs instances)
## lorsque l'option ALLOW_MULTI_INSTANCES à true
DEFAULT_PORT=5900

## Autres options de x11vnc
## Pour la liste complète et détaillée des options (anglais)
## cf http://www.karlrunge.com/x11vnc/x11vnc_opts.html
EXTRA_OPTIONS="\
-shared \
-verbose \
-o $LOGFILE \
-forever \
-xkb"

## Commande de vérouillage de session lors de la deconnexion du client VNC
## L'utilisateur lançant le serveur x11vnc étant le root, le verrouillage de l'écran
## n'impose pas la saisie du mot de passe à nouveau, voici la raison du sudo -u.
## Si l'utilisateur spécifié dans USER n'est pas celui connecté, cette commande
## ne fonctionnera pas et l'écran ne sera pas verrouillé.
GONE_COMMAND="sudo -u $USER gnome-screensaver-command --lock"

## FIN DES OPTIONS ############


. /lib/lsb/init-functions

COMMAND=$1

## Gère le port envoyé via la ligne de commande (prioritaire sur DEFAULT_PORT)
if [ -z $2 ]; then
  PORT=$DEFAULT_PORT
else
  PORT=$2
fi

pid=

get_pid() {
  pid=`pidof x11vnc` || false
}

is_running() {
  get_pid
  if [ "X$pid" != "X" ] ; then
    return 0
  else
    return 1 
  fi
}

start() {
  ## Ligne de commande principale pour le démarrage du serveur 
  ## Pour ajouter des options, il est préférable de modifier les EXTRA_OPTIONS 
  ## plutot que cette ligne de commande
  return `x11vnc -bg -autoport $1 ${EXTRA_OPTIONS} -gone "${GONE_COMMAND}" -nopw -safer -auth /var/lib/gdm/:0.Xauth -display :0 | gawk -F PORT= '{print $2}' `  
}

X11VNC_stop() {
  log_daemon_msg "[X11VNC] Stopping server..."
  
  if is_running ; then
    kill $pid
    ret=0
  else
    log_warning_msg "[X11VNC] Server not running"
    ret=1
  fi  
  log_end_msg $ret
  return $ret
}


X11VNC_start() {
    log_daemon_msg "[X11VNC] Starting server listening on port ${PORT}..."
    if is_running && ! $ALLOW_MULTI_INSTANCES; then
        log_failure_msg "[X11VNC] Server already running. Operation aborted !"
        log_end_msg 1
        exit
    fi
    start $PORT
    real_port=$?
    if [ -z $real_port ] || [ $real_port -lt $PORT ]; then
      log_failure_msg "[X11VNC] Error(s) occured, consult log file for more informations"
      log_failure_msg "[X11VNC] ${LOGFILE}"
      log_end_msg 1
    else
      log_daemon_msg "[X11VNC] Server started on port $real_port"
      log_end_msg 0
    fi
}


case "$1" in
  start)
    X11VNC_start
    ;;
  stop)
    X11VNC_stop
    ;;
  restart)
    X11VNC_stop
    X11VNC_start
    ;;
  *) 
      log_failure_msg "Incorrect syntax: argument missing or incorrect"
      log_success_msg "Usage: $0 {start [port]|stop|restart [port]}"
    exit 1
esac

Rendre le script exécutable

sudo chmod 755 /etc/init.d/x11vnc

Ensuite, c'est comme d'habitude pour le démarrage, redémarrage, et arrêt du serveur respectivement:

sudo /etc/init.d/x11vnc start
sudo /etc/init.d/x11vnc restart
sudo /etc/init.d/x11vnc stop

Options du script
L'option USER dans le script doit être mise à jour pour conserver un minimum de sécurité.
Remplacer emri par le nom d'utilisateur avec lequel vous vous allez vous loguez sur le serveur distant.
(Voir note de sécurité)
Les options du scripts sont suffisamment détaillées dans celui-ci, lisez les pour plus d'informations.



Détails rapides des options de x11vnc mises en place
Si vous voulez le détail de toutes les options disponibles (et elles nombreuses), c'est ici.

  • gone: commande à exécuter lorsque l'utilisateur distant ferme son client VNC (permet de verrouiller l'écran dans notre cas)

  • shared: Permet de démarrer se connecter avec plusieurs clients VNC simultanément

  • verbose: Mode parlant

  • o $LOGFILE: Le serveur est démarré en tâche de fond de de manière automatique (sans aucun retour sur la console), il est toujours sympa de pouvoir voir ce qui se passe en cas de problèmes.

  • forever: Le serveur ne se termine pas lors de la déconnexion du client VNC.

  • xkb: fixe les problèmes de claviers (entre autre: pas de gestion de la touche shift via mon expérience)

  • auth /var/lib/gdm/:0.Xauth -display :0: si j'ai bien compris, c'est cette ligne qui permet un démarrage de VNC avant l'ouverture de la session utilisateur (j'avoue c'est un Copier/Coller ! source)

  • autoport $PORT: défini de manière automatique le port à utiliser (servira de base à la numérotation) si l'option du script ALLOW_MULTI_INSTANCES est fixé à vrai

  • nopw: Désactive la saisie du mot de passe de VNC (reste tout de même sécurisé si l'utilisateur loggué sur le système distant est celui spécifié dans le script (variable USER), cf Note de sécurité plus bas.

  • bg: Lancement en tâche de fond, pas de sortie console, d'où l'utilité  du fichier le log


Ajout du script au démarrage du système:

sudo update-rc.d x11vnc defaults

update-rc.d: warning: x11vnc start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (S)
update-rc.d: warning: x11vnc stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (0 6)
Adding system startup for /etc/init.d/x11vnc ...
   /etc/rc0.d/K20x11vnc -> ../init.d/x11vnc
   /etc/rc1.d/K20x11vnc -> ../init.d/x11vnc
   /etc/rc6.d/K20x11vnc -> ../init.d/x11vnc
   /etc/rc2.d/S20x11vnc -> ../init.d/x11vnc
   /etc/rc3.d/S20x11vnc -> ../init.d/x11vnc
   /etc/rc4.d/S20x11vnc -> ../init.d/x11vnc
   /etc/rc5.d/S20x11vnc -> ../init.d/x11vnc

Je constate des warnings lors cette étape, si vous savez comment y remédier, je suis preneur wink

Il sera peut-être nécessaire d'ajouter cette ligne dans votre fichier /etc/gdm/custom.conf dans la section [daemon] pour éviter que le client VNC soit fermé par gdm lors la première connexion:

#to get remote vnc to not die after login
KillInitClients=false


Note de sécurité:
Malgré l'absence de mot de passe vnc, le système reste sécurisé vu qu'il est obligatoire de saisir son mot de passe pour l'ouverture de session et que lors de la déconnexion, l'écran est automatiquement verrouillé, il faut donc le ressaisir lors d'une connexion ultérieure.
En revanche, le changement d'utilisateur n'est pas possible une fois l'ouverture de session effectuée, car le fait de se déconnecter (sur le système) provoque la déconnexion du client VNC qui verrouille l'écran; après impossible de se reconnecter via VNC (ce point est surement améliorable en farfouillant les options x11vnc mais je ne sais pas comment).
D'autres options permettent d'accroitre la sécurité, notamment de restreindre l'accès VNC à certaines IP du réseau; voir la documentation des options de x11vnc.


Connexion client
Je passe les détails des opérations sur le client, c'est très simple.
Sous ubuntu, normalement tous les outils sont fournis de base:
Applications->internet->Visionneur de bureaux distants
Se connecter -> Protocole VNC -> Saisir l'ip du serveur -> Se connecter

Sous windows, récupérer le client vnc de votre choix et c'est encore plus simple...


Liens
Voici parmi le tas de pages que j'ai lu ceux qui m'ont le plus servi pour mettre ceci en place:



Voilà, en espérant que cela puisse aider quelques uns d'entre vous.
emri

Dernière modification par emri (Le 26/10/2010, à 14:07)

Hors ligne

#3 Le 10/02/2011, à 21:38

danclarm

Re : [Résolu] x11vnc - démarrage avant fenêtre de connexion + script init.d

Merci pour les infos.
Cependant, chez moi cela ne marche que si le serveur démarre avec un écran branché.
Si aucun écran n'est branché, x11vnc ne peut pas se lancer [fail]

Des pistes ?

Hors ligne

#4 Le 10/02/2011, à 23:26

emri

Re : [Résolu] x11vnc - démarrage avant fenêtre de connexion + script init.d

Ca fait quelques temps que j'ai fait ces manips, et j'avoue qu'en bon poisson rouge, le tour du bocal a "reseté" pas mal d'infos dans ma mémoire ! roll

As tu bien remplacé le nom d'utilisateur (emri) dans le script de démarrage ? (pas sûr que cela soit nécessaire pour le démarrage du serveur cependant...)

Tu as juste [fail] au démarrage ? Essaie de jeter un oeil aux fichiers de log (/var/log/x11vnc.log si tu as utilisé mon script sans modification) et files les infos wink

A la relecture de mon post, j'ai l'impression que j'ai fait une erreur dans la ligne de commande de démarrage au niveau du port. As tu changé le port par défaut ou spécifies tu un port différent via la ligne de commande ?

emri

Dernière modification par emri (Le 10/02/2011, à 23:28)

Hors ligne

#5 Le 11/02/2011, à 17:22

danclarm

Re : [Résolu] x11vnc - démarrage avant fenêtre de connexion + script init.d

Oui, j'avais changé pour le bon user, port 5900... et en fait, en faisant quelques manipulations, je suis parvenu à un résultat correct, cependant je ne saurais pas dire exactement laquelle a fonctionné pour mon cas (mon poisson rouge est très rapide smile).
Peut être en modifiant le fichier /etc/X11/xorg.conf
Dans la section

Section "Screen"
        Identifier      "Default Screen"
        Monitor         "Configured Monitor"
        Device          "Configured Video Device"
        DefaultDepth    24
        SubSection "Display"
                Virtual 1024 768
        EndSubSection
EndSection

Il ne devait pas y avoir les bons paramètres.
Je précise qu'en modifiant la ligne Virtual 1024 768 on peut définir la résolution de son écran virtuel.

Merci roll

Hors ligne

#6 Le 22/08/2012, à 22:46

djetdail

Re : [Résolu] x11vnc - démarrage avant fenêtre de connexion + script init.d

Bonjour;

Ce petit mot pour vous dire merci pour ce script

Celui ci m'a sortie d'un problème :
Le projet etait  :
1 station linux accessible via le net avec vncviewer ( windows)  et pouvoir la mettre en veille, la réactiver.

Le réseau perso ,  des pc linux et windows, un NAS Synology, un routeur Netgear VNR2000

1° problème le routeur refuse de configurer un port ( 9 ) pour le Wake on wan ( redémarrage de la station via le net )

Solution trouvé avec le NAS Synology (avec DNS Dynamique ), ce NAS est une véritable boite à outils. Donc à l'aide du NAS je peut sortir de la veille ma station linux  ..... cool

2 ° problème  l'installation de x11vnc et sa configuration basique ( script de lancement dans /etc/init ) ne fonctionnais qu'une fois. Lorsque je "réveillais" ma station  x11vnc/vncviewer ne fonctionnais plus et je perdais la main.

Solution avec ce sript  :-)) 

J'ai modifié cette ligne pour l'adapter à ma 12.04 

emri a écrit :

return `x11vnc -bg -autoport $1 ${EXTRA_OPTIONS} -gone "${GONE_COMMAND}" -nopw -safer -auth /var/lib/gdm/:0.Xauth -display :0 | gawk -F PORT= '{print $2}' ` 
}

Mon ajustement :

return `x11vnc -bg -autoport $1 ${EXTRA_OPTIONS} -gone "${GONE_COMMAND}" -nopw -safer -auth /var/run/lightdm/root/:0 -display :0 | gawk -F PORT= '{print $2}' `

De plus installation du paquet gawk , qui n'est pas installé en standard

Hervé

Dernière modification par djetdail (Le 22/08/2012, à 22:49)

Hors ligne

#7 Le 03/10/2012, à 16:00

labiloute

Re : [Résolu] x11vnc - démarrage avant fenêtre de connexion + script init.d

Merci pour ce script qui permet de mettre un pied dans x11vnc.

Juste une petite coquille il me semble à la ligne :
 

return `x11vnc -bg -autoport $1 ${EXTRA_OPTIONS} -gone "${GONE_COMMAND}" -nopw -safer -auth /var/lib/gdm/:0.Xauth -display :0 | gawk -F PORT= '{print $2}' `  

les valeurs de "return" ne peuvent pas exceder 255. or on essaye de passer en retour une valeur le plus souvent égale à 5900 (le port de vnc).
Je propose aussi de changer gawk par cut comme la ligne ci-dessous

Ce qui donne donc la ligne :

real_port=`x11vnc -bg -autoport $1 ${EXTRA_OPTIONS} -gone "${GONE_COMMAND}" -nopw -safer -auth /var/lib/gdm/:0.Xauth -display :0 |  cut -f2 -d"=" `  

et ensuite de commenter la ligne
#    real_port=$?
située après la ligne
start $PORT

Bonne continuation et merci !

Dernière modification par labiloute (Le 03/10/2012, à 16:01)

Hors ligne