Démarrer automatiquement le serveur VNC au démarrage

29

J'ai installé le bureau Ubuntu sur un serveur Ubuntu 9.10 VPS et je peux me connecter au serveur à l'aide de TightVNC. Cependant, le serveur VNC sur ce VPS 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 de planification, elle ne démarre pas. Quelles sont mes options?

Zéro
la source
Avez-vous essayé de comprendre pourquoi cela ne démarre pas?
Ignacio Vazquez-Abrams

Réponses:

27

J'ai trouvé ces instructions en recherchant Google pour " ubuntu launch vnc server on startup ".

  1. Installez le serveur VNC.
  2. Lancez-vous vncserverpour la première fois pour configurer un mot de passe.
  3. Ajoutez le fichier suivant en tant que /etc/init.d/vncserver(assurez-vous de modifier l'UTILISATEUR, la GÉOMÉTRIE, le NOM, etc. à votre convenance).
  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
Stephen Jennings
la source
Je reçois la sortie d'erreur suivante gist.github.com/anonymous/821d0ec525abb2fe42d8a070c846fb9e , je crois que vos besoins de configuration ont été mis à jour avec des valeurs vides.
niftylettuce
le mien fonctionne mais le seul problème est qu'il me demande d'entrer un mot de passe pour démarrer le script pour la première fois. depuis son démarrage, je ne peux pas y entrer. comment puis-je le réparer?
droopie
@droopie avez-vous trouvé une solution pour le mot de passe?
Ben
12

Si vous souhaitez une configuration plus dynamique et la possibilité de vous 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, c'est-à-dire:

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

Ajoutez des serveurs selon les besoins de chaque utilisateur en ajoutant quelque chose comme ce qui suit au 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"

créez ensuite 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 AU MOINS UNE FOIS COMME UTILISATEUR sous lequel vous souhaitez vous connecter. Je mets cela en majuscules parce que si vous sautez cette étape, rien 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 le répertoire personnel de chaque utilisateur avec les scripts de démarrage appropriés.

Enfin, procédez comme suit:

update-rc.d vncserver defaults 99

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

service vncserver start
Justin Buser
la source
1
cela fonctionne réellement pour moi mais la seule chose est qu'il ne démarre pas tout à fait automatiquement je pense parce qu'il pourrait demander le mot de passe utilisateur. depuis son déclenchement automatique, je ne le vois pas le demander. si je lance manuellement le script, il demande un mot de passe utilisateur. Comment puis-je réparer cela?
droopie
1

J'accède à l'Ubuntu des amis que j'aide, à installer ou à configurer ou à leur apprendre quelque chose.
Comme j'ai besoin d'accéder à Internet via le modem, j'utilise vino.
Toutes les options de partage et de sécurité sont activées lors de l'accès.
Je ne veux pas que le vino-server soit actif tout le temps: ça va, 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 du Bureau à distance et de cocher Partager Autoriser ... activé.
En quittant les Préférences, vino-server démarre et ils me disent l'adresse IP à utiliser.
Une fois le travail terminé, ils exécutent à nouveau Préférence pour cocher Partage Autoriser ... désactivé.
En quittant les Préférences, vino-server s'arrête et s'arrêterait même s'il était démarré en mode Partage désactivé.
Je trouve cette procédure très pratique ainsi que 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.

Papou
la source
0

Dans Ubuntu 12.1, j'ai pu aller dans Paramètres système-> Utilisateurs et sélectionner un utilisateur et définir "Connexion automatique-> ON"

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

Fonctionne bien pour la boîte Linux sans tête Ubuntu

Jim
la source
D'après ce que je peux comprendre, la question concerne la mise sous tension de vncserver au démarrage, pas la connexion de l'utilisateur.
Roman Luštrik
0

Je suggère d'utiliser également la solution stephen jennings 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 mettre le code commun à tous les utilisateurs dans un seul fichier et de le sourcener de tous les autres.

J'ai "hérité" de la responsabilité d'un serveur où plusieurs collègues font de la programmation scientifique et de l'évaluation des données, chacun avec un vnc séparé. Le serveur fonctionne en fait de manière continue et stable au fil des ans, et les utilisateurs deviennent paresseux pour enregistrer leurs fenêtres ouvertes. Cependant, des serveurs vnc ou des serveurs X11 uniques sont parfois bloqués, et il est très gênant d'arrêter tous les utilisateurs pour faire fonctionner à nouveau un serveur.

Peter Steier
la source