Avvia automaticamente il server VNC all'avvio


29

Ho installato il desktop Ubuntu su un server Ubuntu 9.10 VPS e sono in grado di connettermi al server usando TightVNC. Tuttavia, il server VNC su questo VPS può essere avviato solo accedendo tramite SSH e digitando il comando seguente:

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

Se eseguo questo comando all'avvio o come attività di pianificazione, non verrà avviato. Quali sono le mie opzioni?


Hai provato a capire perché non inizierà?
Ignacio Vazquez-Abrams,

Risposte:


27

Ho trovato queste istruzioni cercando Google " Ubuntu avvia il server vnc all'avvio ".

  1. Installa il server VNC.
  2. Avviare vncserverper la prima volta per impostare una password.
  3. Aggiungi il seguente file come /etc/init.d/vncserver(assicurati di modificare USER, GEOMETRY, NAME, ecc. A tuo piacimento).
  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

Viene visualizzato il seguente errore gist.github.com/anonymous/821d0ec525abb2fe42d8a070c846fb9e , credo che la tua configurazione debba essere aggiornata con alcuni valori vuoti.
niftylettuce,

il mio funziona ma l'unico problema è che mi chiede di inserire una password per avviare lo script per la prima volta. dato che è all'avvio non posso accedervi. come posso ripararlo?
droopie,

@droopie hai trovato una soluzione per la password?
Ben

12

Se si desidera una configurazione più dinamica e la possibilità di connettersi per più utenti, esiste un modo migliore per farlo. Come root, crea il file (e la directory se non esiste) / etc / sysconfig / vncservers ovvero:

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

Aggiungi server in base alle necessità per ciascun utente aggiungendo qualcosa di simile al seguente nel file vncservers.conf che hai appena creato:

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

quindi crea uno script init vuoto e rendilo eseguibile:

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

aggiungere quanto segue a /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

Come Stephen ha menzionato nella sua risposta, dovrai eseguire vncserver ALMENO UNA VOLTA COME OGNI UTENTE, vuoi accedere come. Lo metto in maiuscolo perché se salti quel passaggio nessuno di questi funzionerà. Quindi come root potresti fare:

su justin -c vncserver
su bob -c vncserver

Ciò creerà una directory .vnc nella home directory di ogni utente con gli script di avvio appropriati.

Infine, procedi come segue:

update-rc.d vncserver defaults 99

ora puoi riavviare o avviare il servizio manualmente digitando:

service vncserver start

1
questo in realtà funziona per me, ma l'unica cosa è che non si avvia automaticamente automaticamente penso perché potrebbe richiedere la password dell'utente. poiché si è attivato automaticamente, non vedo che lo richieda. se avvio manualmente lo script, richiede una password per il mio utente. come posso risolvere questo?
droopie,

1

Accedo a Ubuntu di amici che aiuto, per installare o configurare o per insegnare loro qualcosa.
Poiché ho bisogno dell'accesso da Internet tramite il modem, utilizzo vino.
Tutte le opzioni di condivisione e sicurezza sono attivate durante l'accesso.
Non voglio che il vino-server sia sempre attivo: va bene non si avvia automaticamente.
Non avevo menu Sistema> Desktop remoto.
Ho modificato /usr/share/applications/vino-preferences.desktop come segue:

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

Prima del lavoro, chiedo ai miei amici di eseguire le Preferenze del desktop remoto e di selezionare Condivisione Consenti ... su.
All'uscita dalle preferenze, vino-server si avvia e mi dicono l'indirizzo IP da usare.
Al termine del lavoro, eseguono nuovamente Preferenze per selezionare Condivisione Consenti ... disattivato.
All'uscita dalle preferenze, vino-server si interrompe e si arresterebbe anche se avviato in stato di condivisione.
Trovo questa procedura molto conveniente e anche la più sicura per l'utente.

PS: gli sviluppatori preferiscono che i loro programmi vengano eseguiti localmente (all'interno di una sessione utente) perché un bug non può influenzare il sistema globale in quel modo.


0

In Ubuntu 12.1 sono stato in grado di accedere a Impostazioni di sistema-> Utenti e selezionare un utente e impostare "Accesso automatico-> ATTIVO"

Quindi sono stato in grado di utilizzare tightVNC per accedere senza accedere alla casella stessa.

Ha funzionato bene per Ubuntu Linux senza testa


Da quello che posso raccogliere, la domanda riguarda l'accensione di vncserver all'avvio, non l'accesso utente.
Roman Luštrik,

0

Suggerisco di usare la soluzione stephen jennings anche se hai bisogno di più vnc per utenti diversi, semplicemente creando diversi file vncserver_john, vncserver_bill, .... Ciò consente di avviarli / arrestarli separatamente. Certamente, le buone pratiche di programmazione suggeriscono di mettere il codice comune a tutti gli utenti in un file e di estrarlo da tutti gli altri.

Ho "ereditato" la responsabilità di un server in cui diversi colleghi eseguono una programmazione scientifica e una valutazione dei dati, tutti con un VNC separato. Il server in realtà funziona in modo continuo e stabile nel corso degli anni e gli utenti diventano pigri per salvare le finestre aperte. Tuttavia, i singoli server virtuali o server X11 a volte si bloccano, ed è un fastidio chiudere tutti gli utenti per riavviare un server.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.