Iniciar automáticamente el servidor VNC al inicio

29

Instalé el escritorio de Ubuntu en un servidor VPS Ubuntu 9.10 y puedo conectarme al servidor usando TightVNC. Sin embargo, el servidor VNC en este VPS solo puede iniciarse iniciando sesión a través de SSH y escribiendo el siguiente comando:

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

Si ejecuto este comando al inicio o como una tarea programada, no se iniciará. ¿Cuáles son mis opciones?

Cero
fuente
¿Has intentado descubrir por qué no comenzará?
Ignacio Vázquez-Abrams

Respuestas:

27

Encontré estas instrucciones buscando en Google " ubuntu launch vnc server on startup ".

  1. Instale el servidor VNC.
  2. Inicie vncserverpor primera vez para configurar una contraseña.
  3. Agregue el siguiente archivo como /etc/init.d/vncserver(asegúrese de modificar el USUARIO, GEOMETRÍA, NOMBRE, etc. a su gusto).
  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
fuente
Recibo el siguiente error de salida gist.github.com/anonymous/821d0ec525abb2fe42d8a070c846fb9e , creo que su configuración necesita actualizarse con algunos valores en blanco.
niftylettuce
el mío funciona, pero el único problema es que me pide que ingrese una contraseña para iniciar el script por primera vez. ya que está en el arranque no puedo entrar. ¿Cómo puedo arreglarlo?
droopie
@droopie, ¿has encontrado una solución para la contraseña?
Ben
12

Si desea una configuración más dinámica y la capacidad de conectarse para múltiples usuarios, entonces hay una mejor manera de hacerlo. Como root, cree el archivo (y el directorio si no existe) / etc / sysconfig / vncservers, es decir:

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

Agregue servidores según sea necesario para cada usuario agregando algo como lo siguiente al archivo vncservers.conf que acaba de crear:

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

luego cree un script de inicio vacío y hágalo ejecutable:

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

agregue lo siguiente 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

Como Stephen mencionó en su respuesta, deberá ejecutar vncserver AL MENOS UNA VEZ COMO CADA USUARIO en el que desee iniciar sesión. Lo pongo en mayúsculas porque si saltas ese paso, nada de eso funcionará. Entonces, como root, podrías hacer:

su justin -c vncserver
su bob -c vncserver

Esto creará un directorio .vnc en el directorio de inicio de cada usuario con los scripts de inicio apropiados.

Finalmente, haga lo siguiente:

update-rc.d vncserver defaults 99

ahora puede reiniciar o iniciar el servicio manualmente escribiendo:

service vncserver start
Justin Buser
fuente
1
esto realmente funciona para mí, pero lo único es que no se inicia automáticamente, creo, porque podría estar solicitando la contraseña del usuario. como se activa automáticamente, no lo veo, pídalo. si inicio manualmente el script, me pide una contraseña de usuario. ¿Cómo puedo arreglar esto?
caído
1

Accedo al Ubuntu de amigos que ayudo, para instalarlos o configurarlos o para enseñarles algo.
Como necesito acceso desde Internet a través del módem, uso vino.
Todas las opciones de uso compartido y seguridad se activan durante el acceso.
No quiero que el servidor de vino esté activo todo el tiempo: está bien, no se inicia automáticamente.
No tenía el menú Sistema> Escritorio remoto.
Edité /usr/share/applications/vino-preferences.desktop de la siguiente manera:

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

Antes de trabajar, les pido a mis amigos que ejecuten las Preferencias de escritorio remoto y que marque Compartir permitir ...
Al salir de Preferencias, se inicia vino-server y me dicen la dirección IP que debo usar.
Cuando finaliza el trabajo, ejecutan Preferencia nuevamente para marcar Compartir Permitir ... desactivado.
Al salir de Preferencias, vino-server se detiene y se detendría incluso si se inicia en el estado Compartir apagado.
Este procedimiento me parece muy conveniente y también el más seguro para el usuario.

PD: los desarrolladores prefieren que sus programas se ejecuten localmente (dentro de una sesión de usuario) porque un error no puede afectar el sistema global de esa manera.

Papou
fuente
0

En Ubuntu 12.1 pude ir a Configuración del sistema-> Usuarios y seleccionar un usuario y configurar "Inicio de sesión automático-> ENCENDIDO"

Luego pude usar tightVNC para ingresar sin iniciar sesión en el cuadro.

Funcionó bien para Ubuntu Linux Box sin cabeza

Jim
fuente
Por lo que puedo deducir, la pregunta es sobre encender vncserver en el inicio, no el inicio de sesión del usuario.
Roman Luštrik
0

Sugiero usar la solución de Stephen Jenning también si necesita varias vnc para diferentes usuarios, simplemente creando varios archivos vncserver_john, vncserver_bill, ... Esto le permite iniciarlos / detenerlos por separado. Ciertamente, las buenas prácticas de programación sugieren poner el código común a todos los usuarios en un archivo y obtenerlo de todos los demás.

He "heredado" la responsabilidad de un servidor donde varios colegas realizan alguna programación científica y evaluación de datos, todos con una vnc separada. El servidor en realidad se ejecuta de forma continua y estable durante años, y los usuarios se vuelven perezosos para guardar sus ventanas abiertas. Sin embargo, los servidores vncservers individuales o los servidores X11 a veces se atascan, y es una gran molestia cerrar todos los usuarios para que un servidor vuelva a funcionar.

Peter Steier
fuente