VNC-Server beim Start automatisch starten

29

Ich habe den Ubuntu-Desktop auf einem Ubuntu 9.10 VPS-Server installiert und kann mit TightVNC eine Verbindung zum Server herstellen. Der VNC-Server auf diesem VPS kann jedoch nur gestartet werden, indem Sie sich über SSH anmelden und den folgenden Befehl eingeben:

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

Wenn ich diesen Befehl beim Start oder als Zeitplanaufgabe ausführe, wird er nicht gestartet. Welche Möglichkeiten habe ich?

Null
quelle
Haben Sie versucht herauszufinden, warum es nicht startet?
Ignacio Vazquez-Abrams

Antworten:

27

Ich habe diese Anweisungen gefunden, indem ich bei Google nach " Ubuntu VNC-Server beim Start starten" gesucht habe .

  1. Installieren Sie den VNC-Server.
  2. Starten Sie vncserverzum ersten Mal ein Passwort einzurichten.
  3. Fügen Sie die folgende Datei hinzu /etc/init.d/vncserver(stellen Sie sicher, dass Sie USER, GEOMETRY, NAME usw. nach Ihren Wünschen ändern).
  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
quelle
Ich erhalte die folgende Fehlermeldung: gist.github.com/anonymous/821d0ec525abb2fe42d8a070c846fb9e . Ich glaube, Ihre Konfiguration muss mit einigen leeren Werten aktualisiert werden.
Niftylettuce
meins funktioniert, aber das einzige Problem ist, dass ich aufgefordert werde, ein Passwort einzugeben, um das Skript zum ersten Mal zu starten. Da es beim Booten ist, kann ich es nicht betreten. wie kann ich es reparieren?
Droopie
@droopie hast du eine lösung für das passwort gefunden?
Ben
12

Wenn Sie eine dynamischere Konfiguration und die Möglichkeit einer Verbindung für mehrere Benutzer wünschen, gibt es eine bessere Möglichkeit, dies zu tun. Erstellen Sie als root die Datei (und das Verzeichnis, falls es nicht existiert) / etc / sysconfig / vncservers.

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

Fügen Sie nach Bedarf Server für jeden Benutzer hinzu, indem Sie der soeben erstellten Datei vncservers.conf Folgendes hinzufügen:

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

Als nächstes erstellen Sie ein leeres Init-Skript und machen es ausführbar:

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

Fügen Sie Folgendes zu /etc/init.d/vncserver hinzu:

#!/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

Wie Stephen in seiner Antwort erwähnt hat, müssen Sie vncserver MINDESTENS EINMAL ALS JEDEN BENUTZER ausführen, unter dem Sie sich anmelden möchten. Ich setze das in Großbuchstaben, denn wenn Sie diesen Schritt überspringen, wird nichts davon funktionieren. Als root könnten Sie also tun:

su justin -c vncserver
su bob -c vncserver

Dadurch wird in jedem Benutzer-Ausgangsverzeichnis ein .vnc-Verzeichnis mit den entsprechenden Startskripten erstellt.

Führen Sie abschließend Folgendes aus:

update-rc.d vncserver defaults 99

Jetzt können Sie den Dienst entweder neu starten oder manuell starten, indem Sie Folgendes eingeben:

service vncserver start
Justin Buser
quelle
1
Das funktioniert tatsächlich für mich, aber das einzige, was ich denke, ist, dass es nicht ganz automatisch gestartet wird, weil es möglicherweise das Benutzerpasswort anfordert. da es automatisch ausgelöst wird, sehe ich es nicht danach fragen. Wenn ich das Skript manuell starte, fragt es nach meinem Benutzerpasswort. Wie kann ich das beheben?
Droopie
1

Ich greife auf das Ubuntu von Freunden zu, denen ich helfe, um sie zu installieren, zu konfigurieren oder ihnen etwas beizubringen.
Da ich über das Modem einen Internetzugang benötige, verwende ich vino.
Alle Freigabe- und Sicherheitsoptionen sind während des Zugriffs aktiviert.
Ich möchte nicht, dass der Vino-Server die ganze Zeit aktiv ist. Es ist in Ordnung, dass er nicht automatisch startet.
Ich hatte kein Menü System> Remotedesktop.
Ich habe /usr/share/applications/vino-preferences.desktop folgendermaßen bearbeitet:

# 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"'

Vor der Arbeit fordere ich meine Freunde auf, die Einstellungen für Remotedesktop auszuführen und die Option Freigeben zulassen ... zu aktivieren.
Beim Verlassen der Einstellungen startet der Vino-Server und teilt mir die zu verwendende IP-Adresse mit.
Wenn die Arbeit beendet ist, führen sie die Option Einstellungen erneut aus, um die Option Freigeben zulassen ... zu deaktivieren.
Beim Beenden der Voreinstellungen stoppt der vino-server und wird auch dann beendet, wenn er im Status "Freigabe deaktiviert" gestartet wird.
Ich finde dieses Verfahren sehr bequem und für den Benutzer am sichersten.

PS: Entwickler bevorzugen, dass ihre Programme lokal (innerhalb einer Benutzersitzung) ausgeführt werden, da ein Fehler das globale System nicht auf diese Weise beeinflussen kann.

Papou
quelle
0

In Ubuntu 12.1 konnte ich unter Systemeinstellungen-> Benutzer einen Benutzer auswählen und "Automatische Anmeldung-> EIN" einstellen.

Dann konnte ich tightVNC verwenden, um mich einzuloggen, ohne mich an der Box selbst anzumelden.

Funktionierte gut für kopflose Ubuntu-Linux-Box

Jim
quelle
Soweit ich weiß, geht es um das Einschalten von vncserver beim Start und nicht um die Benutzeranmeldung.
Roman Luštrik
0

Ich schlage vor, stephen jennings solution auch dann zu verwenden, wenn Sie mehrere VNCs für verschiedene Benutzer benötigen, indem Sie einfach mehrere VNC-Server_John-, VNC-Server_Bill-, ... -Dateien erstellen. Auf diese Weise können Sie sie separat starten / stoppen. Gewiss, gute Programmierpraxis schlägt vor, den Code, der allen Benutzern gemeinsam ist, in eine Datei zu packen und von allen anderen zu beziehen.

Ich habe die Verantwortung für einen Server "geerbt", auf dem mehrere Kollegen wissenschaftliche Programmierung und Datenauswertung durchführen, jeder mit einem separaten VNC. Der Server läuft tatsächlich über Jahre hinweg kontinuierlich und stabil, und Benutzer können ihre geöffneten Fenster nicht mehr richtig speichern. Einzelne vncserver oder X11-Server bleiben jedoch manchmal hängen, und es ist sehr ärgerlich, alle Benutzer herunterzufahren, um einen Server wieder zum Laufen zu bringen.

Peter Steier
quelle