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

Iniciar automaticamente o servidor VNC ao arrancar

Instalei o ambiente de trabalho Ubuntu num servidor Ubuntu 9.10 VPS e consigo ligar-me ao servidor usando TightVNC. No entanto, o servidor VNC neste VPS só pode ser iniciado através de SSH e datilografando o seguinte comando:

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

Se eu executar este comando no arranque ou como uma tarefa de agenda, ele não arranca. Quais são as minhas opções?

Respostas (5)

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

Encontrei estas instruções ao procurar no Google por ubuntu launch vnc server on startup “.

  1. instalar o servidor VNC.
  2. Lançar vncserver& pela primeira vez para configurar uma palavra-passe.
  3. Adicionar o seguinte ficheiro como /etc/init.d/vncserver& (não se esqueça de modificar o USUÁRIO, GEOMETRIA, NOME, etc. ao seu gosto).
  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 desejar uma configuração mais dinâmica e a capacidade de ligação para múltiplos utilizadores, então existe uma melhor forma de o fazer. Como root criar o ficheiro (e directório se este não existir) /etc/sysconfig/vncservers i.e. fazer:

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

Adicionar servidores conforme necessário para cada utilizador, adicionando algo como o seguinte ao ficheiro vncservers.conf que acabou de criar:

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

em seguida, crie um script de inicialização vazio e torne-o executável:

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

adicione o seguinte 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 mencionou na sua resposta, terá de executar o vncserver pelo menos uma vez como CADA UTILIZADOR que queira iniciar sessão. Coloco isso em maiúsculas porque se saltar esse passo, nada disso irá funcionar. Por isso, como raiz, pode fazer:

su justin -c vncserver
su bob -c vncserver

Isto irá criar um directório .vnc em cada diretório home dir de cada utilizador com os scripts de arranque apropriados.

Finalmente, faça o seguinte:

update-rc.d vncserver defaults 99

agora pode reiniciar ou iniciar o serviço manualmente, digitando:

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

Tenho acesso ao Ubuntu de amigos que ajudo, para instalar ou configurar ou para lhes ensinar algo.
Como preciso de acesso a partir da Internet através do modem, utilizo o vino.
Todas as opções de partilha e Segurança são activadas durante o acesso.
Não quero que o vino-servidor esteja sempre activo: tudo bem que não se reinicie automaticamente.
Eu não tinha menu System>Remote Desktop.
Eu editei /usr/share/applications/vino-preferences.desktop como se 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"'

Antes de trabalhar, peço aos meus amigos para executarem o Remote Desktop Preferences e para assinalarem o tick Sharing Allowing… on.
Ao sair de Preferências, o vino-servidor inicia e eles dizem-me o endereço IP a utilizar.
Quando o trabalho termina, executam novamente Preferência para marcar Permissão de Partilha… desligado.
Ao sair de Preferências, o vino-servidor pára e pararia mesmo que fosse iniciado no estado de Partilha desligada.
Acho este procedimento muito conveniente, bem como o mais seguro para o utilizador.

PS: os programadores preferem que os seus programas sejam executados localmente (dentro de uma sessão do utilizador) porque um bug não pode afectar o sistema global dessa forma.

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

No Ubuntu 12.1 fui capaz de entrar em System Settings->Users e seleccionar um utilizador e definir “Automatic Login->ON”

Depois fui capaz de usar o VNC apertado para entrar sem entrar na própria caixa.

Funcionou bem para a caixa de linux ubuntu sem cabeça

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

Sugiro a utilização da solução stephen jennings também se precisar de vários vnc’s para diferentes utilizadores, apenas criando vários ficheiros vncserver_john, vncserver_bill, … Isto permite-lhe iniciá-los/pará-los separadamente. Certamente, as boas práticas de programação sugerem colocar o código comum a todos os utilizadores num único ficheiro, e obtê-lo a partir de todos os outros.

Tenho “herdado” a responsabilidade por um servidor onde vários colegas fazem alguma programação científica e avaliação de dados, todos com um vnc separado. O servidor funciona de facto continuamente e estável ao longo dos anos, e os utilizadores tornam-se preguiçosos para salvar as suas janelas abertas. Contudo, servidores vncservers únicos ou X11 ficam por vezes presos, e é um grande incómodo desligar todos os utilizadores para voltar a ter um servidor a funcionar.