web-dev-qa-db-fra.com

Démarrer automatiquement le serveur VNC au démarrage

J'ai installé le bureau Ubuntu sur un serveur Ubuntu 9.10 et je peux me connecter au serveur à l'aide de TightVNC. Cependant, le serveur VNC sur ce serveur virtuel virtuel ne peut être démarré qu'en se connectant via SSH et en tapant la commande suivante:

vncserver :1 -geometry 800x600 -depth 16 -pixelformat rgb565

Si j'exécute cette commande au démarrage ou en tant que tâche planifiée, elle ne démarre pas. Quelles sont mes options?

28
Zero

J'ai trouvé ces instructions en recherchant sur Google " le serveur vnc ubuntu au démarrage ".

  1. Installez le serveur VNC.
  2. Lancez vncserver pour la première fois pour configurer un mot de passe.
  3. Ajoutez le fichier suivant en tant que /etc/init.d/vncserver (veillez à modifier les paramètres USER, GEOMETRY, NAME, etc., selon vos préférences).
  4. Sudo chmod +x /etc/init.d/vncserver
  5. Sudo update-rc.d vncserver defaults

/etc/init.d/vncserver

#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          vncserver
# Required-Start:    networking
# Default-Start:     S
# Default-Stop:      0 6
### END INIT INFO

PATH="$PATH:/usr/X11R6/bin/"

# The Username:Group that will run VNC
export USER="mythtv"
#${RUNAS}

# The display that VNC will use
DISPLAY="1"

# Color depth (between 8 and 32)
DEPTH="16"

# The Desktop geometry to use.
#GEOMETRY="<WIDTH>x<HEIGHT>"
#GEOMETRY="800x600"
GEOMETRY="1024x768"
#GEOMETRY="1280x1024"

# The name that the VNC Desktop will have.
NAME="my-vnc-server"

OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"

. /lib/lsb/init-functions

case "$1" in
start)
log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
;;

stop)
log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
;;

restart)
$0 stop
$0 start
;;
esac

exit 0
27
Stephen Jennings

Si vous souhaitez une configuration plus dynamique et la possibilité de se connecter pour plusieurs utilisateurs, il existe un meilleur moyen de le faire. En tant que root, créez le fichier (et le répertoire s’il n’existe pas)/etc/sysconfig/vncservers i.e. do:

mkdir -p /etc/vncserver
touch /etc/vncserver/vncservers.conf

Ajoutez des serveurs en fonction des besoins de chaque utilisateur en ajoutant le fichier vncservers.conf que vous venez de créer:

VNCSERVERS="1:justin 2:bob"
VNCSERVERARGS[1]="-geometry 1920x1080 -depth 24"
VNCSERVERARGS[2]="-geometry 800x600 -depth 8"

ensuite, créez un script init vide et rendez-le exécutable:

touch /etc/init.d/vncserver
chmod +x /etc/init.d/vncserver

ajoutez ce qui suit à /etc/init.d/vncserver:

#!/bin/bash

unset VNCSERVERARGS
VNCSERVERS=""
[ -f /etc/vncserver/vncservers.conf ] && . /etc/vncserver/vncservers.conf
prog=$"VNC server"

start() {
        . /lib/lsb/init-functions
        REQ_USER=$2
        echo -n $"Starting $prog: "
        ulimit -S -c 0 >/dev/null 2>&1
        RETVAL=0
        for display in ${VNCSERVERS}
        do
                export USER="${display##*:}"
                if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
                        echo -n "${display} "
                        unset BASH_ENV ENV
                        DISP="${display%%:*}"
                        export VNCUSERARGS="${VNCSERVERARGS[${DISP}]}"
                        su ${USER} -c "cd ~${USER} && [ -f .vnc/passwd ] && vncserver :${DISP} ${VNCUSERARGS}"
                fi
        done
}

stop() {
        . /lib/lsb/init-functions
        REQ_USER=$2
        echo -n $"Shutting down VNCServer: "
        for display in ${VNCSERVERS}
        do
                export USER="${display##*:}"
                if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
                        echo -n "${display} "
                        unset BASH_ENV ENV
                        export USER="${display##*:}"
                        su ${USER} -c "vncserver -kill :${display%%:*}" >/dev/null 2>&1
                fi
        done
        echo -e "\n"
        echo "VNCServer Stopped"
}

case "$1" in
start)
start $@
;;
stop)
stop $@
;;
restart|reload)
stop $@
sleep 3
start $@
;;
condrestart)
if [ -f /var/lock/subsys/vncserver ]; then
stop $@
sleep 3
start $@
fi
;;
status)
status Xvnc
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac

Comme Stephen l’a mentionné dans sa réponse, vous devez exécuter vncserver AT AU MOINS UNE FOIS COMME UTILISATEUR auquel vous souhaitez vous connecter. Je mets cela en majuscules car si vous sautez cette étape, rien de tout cela ne fonctionnera. Donc, en tant que root, vous pouvez faire:

su justin -c vncserver
su bob -c vncserver

Cela créera un répertoire .vnc dans chaque répertoire personnel des utilisateurs avec les scripts de démarrage appropriés.

Enfin, procédez comme suit:

update-rc.d vncserver defaults 99

maintenant vous pouvez soit redémarrer ou démarrer le service manuellement en tapant:

service vncserver start
12
Justin Buser

J'accède à Ubuntu des amis que j'aide pour installer ou configurer quelque chose.
Comme j’ai besoin d’un accès Internet par modem, j’utilise vino.
Toutes les options de partage et de sécurité sont activées pendant l'accès.
Je ne veux pas que le serveur vino soit actif en permanence: c’est bien, il ne démarre pas automatiquement.
Je n'avais pas de menu Système> Bureau à distance.
J'ai édité /usr/share/applications/vino-preferences.desktop comme suit:

# OnlyShowIn=Unity;
Exec=bash -c 'vino-preferences;/usr/lib/vino/vino-server&zenity --info --text="Accès par Internet: `curl http://ipecho.net/plain`:5900"'

Avant de travailler, je demande à mes amis d’exécuter les préférences de Bureau à distance et de cocher Partager l’autorisation ... sur.
En quittant Preferences, vino-server démarre et me dit l'adresse IP à utiliser.
Lorsque le travail est terminé, ils exécutent à nouveau Préférence pour cocher Partager autorisé ... désactivé.
En quittant Preferences, vino-server s'arrête et s'arrêterait même s'il était lancé dans l'état de partage désactivé.
Je trouve cette procédure très pratique et aussi la plus sûre pour l'utilisateur.

PS: les développeurs préfèrent que leurs programmes s'exécutent localement (dans une session utilisateur) car un bogue ne peut pas affecter le système global de cette façon.

1
Papou

Je suggère d'utiliser la solution stephen jennings également si vous avez besoin de plusieurs vnc pour différents utilisateurs, en créant simplement plusieurs fichiers vncserver_john, vncserver_bill, .... Cela vous permet de les démarrer/arrêter séparément. Certes, les bonnes pratiques de programmation suggèrent de placer le code commun à tous les utilisateurs dans un fichier et de le rechercher auprès de tous les autres.

J'ai "hérité" de la responsabilité d'un serveur sur lequel plusieurs collègues effectuent des travaux de programmation scientifique et d'évaluation des données, chacun disposant d'un vnc séparé. Le serveur fonctionne en fait de manière continue et stable au fil des années, et les utilisateurs deviennent paresseux pour enregistrer leurs fenêtres ouvertes. Cependant, des serveurs vncservers ou X11 isolés sont parfois bloqués et il est très désagréable d’arrêter tous les utilisateurs pour qu’un serveur soit à nouveau opérationnel.

0
Peter Steier

Dans Ubuntu 12.1, je pouvais accéder à Paramètres système-> Utilisateurs, sélectionner un utilisateur et définir "Connexion automatique-> Activé".

Ensuite, j'ai pu utiliser tightVNC pour entrer sans me connecter à la boîte elle-même.

A bien fonctionné pour la boîte Linux sans tête Ubuntu

0
Jim