2010-05-31 02:34:16 +0000 2010-05-31 02:34:16 +0000
31
31

Avviare automaticamente il server VNC all'avvio

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

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

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

Risposte (5)

29
29
29
2010-05-31 02:51:43 +0000

Ho trovato queste istruzioni cercando su Google ubuntu launch vnc server on startup “.

  1. Installare il server VNC.
  2. Avviare vncserver per la prima volta per impostare una password.
  3. Aggiungere il seguente file come /etc/init.d/vncserver (assicurarsi di modificare USER, GEOMETRY, NAME, ecc. a proprio 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
12
12
12
2012-05-05 21:34:45 +0000

Se volete una configurazione più dinamica e la possibilità di connettersi per più utenti, allora c'è un modo migliore per farlo. Come root create il file (e la directory se non esiste) /etc/sysconfig/vncservers cioè fate:

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

Aggiungete i server come necessario per ogni utente aggiungendo qualcosa come il seguente al file vncservers.conf appena creato:

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

Poi create un init script vuoto e rendetelo eseguibile:

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

aggiungere il seguente 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, avrete bisogno di eseguire vncserver ALMENO UNA VOLTA COME OGNI UTENTE con cui volete fare il login. L'ho messo in maiuscolo perché se si salta questo passo non funzionerà nulla. Quindi come root potresti fare:

su justin -c vncserver
su bob -c vncserver

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

Infine, fate quanto segue:

update-rc.d vncserver defaults 99

ora puoi riavviare o avviare il servizio manualmente digitando:

service vncserver start
1
1
1
2015-06-28 01:18:17 +0000

Accedo all'Ubuntu degli amici che aiuto, per installare o configurare o per insegnare loro qualcosa.
Poiché ho bisogno di accedere da Internet attraverso il modem, uso vino.
Tutte le opzioni di condivisione e sicurezza sono attivate durante l'accesso.
Non voglio che il vino-server sia sempre attivo: va benissimo che non si avvii automaticamente.
Non avevo nessun menu Sistema>Remote Desktop.
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 di lavorare, chiedo ai miei amici di lanciare Preferenze Desktop Remoto e di spuntare Condivisione consentita… su.
All'uscita da Preferenze, si avvia vino-server e mi dicono l'indirizzo IP da usare.
Quando il lavoro è finito, eseguono nuovamente Preferenze e spuntano Sharing Allow… off.
All'uscita da Preferenze, vino-server si ferma e si fermerebbe anche se fosse avviato in stato Sharing off.
Trovo questa procedura molto comoda 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 questo modo.

0
0
0
2013-10-26 21:05:15 +0000

In Ubuntu 12.1 sono stato in grado di andare in Impostazioni di sistema->Utenti e selezionare un utente e impostare “Login automatico->ON”

Poi sono stato in grado di utilizzare tightVNC per entrare senza accedere alla scatola stessa.

Ha funzionato bene per il box linux ubuntu headless

0
0
0
2017-01-06 11:27:48 +0000

Suggerisco di usare la soluzione di Stephen Jennings anche se avete bisogno di diverse vnc per diversi utenti, semplicemente creando diversi file vncserverjohn, vncserverbill, …. Questo vi permette di avviarli e fermarli separatamente. Certamente, la buona pratica di programmazione suggerisce di mettere il codice comune a tutti gli utenti in un solo file, e di estrarlo da tutti gli altri.

Ho “ereditato” la responsabilità di un server dove diversi colleghi fanno programmazione scientifica e valutazione dei dati, ognuno con una vnc separata. Il server funziona effettivamente in modo continuo e stabile per anni, e gli utenti diventano pigri per salvare le loro finestre aperte. Tuttavia, singoli vncserver o server X11 a volte si bloccano, ed è una grande seccatura spegnere tutti gli utenti per far funzionare di nuovo un server.