#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:
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:
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
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:
installation 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
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:
et évidemment les man pages (pas toujours très abordables mais gorgés d'informations utiles)
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 !
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
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 ).
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
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
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