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

Iniciar automáticamente el servidor VNC al arrancar

He instalado el escritorio de Ubuntu en un servidor VPS de Ubuntu 9.10 y soy capaz de conectarme al servidor usando TightVNC. Sin embargo, el servidor VNC en este VPS sólo se puede iniciar iniciando la sesión a través de SSH y escribiendo el siguiente comando:

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

Si ejecuto este comando en el arranque o como tarea programada, no se inicia. ¿Cuáles son mis opciones?

Respuestas (5)

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

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

  1. Instalar el servidor VNC.
  2. Inicie vncserver por primera vez para establecer una contraseña.
  3. Añade el siguiente archivo como /etc/init.d/vncserver (asegúrate de modificar el USUARIO, GEOMETRIA, NOMBRE, etc. a tu 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
12
12
12
2012-05-05 21:34:45 +0000

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, haga:

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

Añade los servidores necesarios para cada usuario añadiendo algo como lo siguiente al archivo vncservers.conf que acabas de crear:

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

A continuación cree un script de init vacío y hágalo ejecutable:

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

añade 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, necesitarás ejecutar vncserver POR LO MENOS UNA VEZ COMO CADA USUARIO con el que quieras iniciar sesión. Lo pongo en mayúsculas porque si te saltas ese paso no funcionará nada. Así que como root podrías hacer:

su justin -c vncserver
su bob -c vncserver

Esto creará un directorio .vnc en el directorio 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
1
1
1
2015-06-28 01:18:17 +0000

Accedo al Ubuntu de los amigos a los que ayudo, para instalar o configurar o para enseñarles algo.
Como necesito acceso desde Internet a través del módem, uso vino.
Todas las opciones de compartir y de seguridad están activadas durante el acceso.
No quiero que el servidor de vino esté activo todo el tiempo: está bien que no se inicie automáticamente.
No tengo el menú System>Remote Desktop.
He editado /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, pido a mis amigos que ejecuten Preferencias de Escritorio Remoto y que marquen Compartir Permitir… activado.
Al salir de Preferencias, se inicia vino-servidor y me indican la dirección IP a utilizar.
Al terminar el trabajo, vuelven a ejecutar Preferencias y marcan Compartir Permitir… desactivado.
Al salir de Preferencias, vino-servidor se detiene y se detendría incluso si se iniciara en estado de Compartir desactivado.
Este procedimiento me parece muy cómodo y 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 al sistema global de esa manera.

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

En Ubuntu 12.1 pude ir a la Configuración del Sistema->Usuarios y seleccionar un usuario y poner “Inicio de Sesión Automático->ON”

Luego pude usar tightVNC para entrar sin iniciar sesión en la propia caja.

Funcionó bien para la caja linux de ubuntu sin cabeza

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

Sugiero usar la solución de stephen jennings también si necesitas varios vnc’s para diferentes usuarios, simplemente creando varios archivos vncserver_john, vncserver_bill, …. Esto le permite iniciar/detenerlos por separado. Ciertamente, las buenas prácticas de programación sugieren poner el código común a todos los usuarios en un solo archivo, y el origen de todos los demás.

He “heredado” la responsabilidad de un servidor en el que varios colegas hacen algo de programación científica y evaluación de datos, cada uno con un vnc separado. Realmente el servidor funciona de forma continua y estable durante años, y a los usuarios les da pereza guardar sus ventanas abiertas. Sin embargo, los servidores vnc individuales o los servidores X11 a veces se atascan, y es una gran molestia cerrar a todos los usuarios para que un servidor vuelva a funcionar.