Inicia automaticamente o servidor VNC na inicialização

26

Instalei o desktop Ubuntu em um servidor Ubuntu 9.10 VPS e consegui conectar-me ao servidor usando o TightVNC. No entanto, o servidor VNC neste VPS só pode ser iniciado efetuando login através do SSH e digitando o seguinte comando:

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

Se eu executar este comando na inicialização ou como uma tarefa de agendamento, ele não será iniciado. Quais são minhas opções?

    
por Zero 31.05.2010 / 04:34

5 respostas

26

Eu encontrei estas instruções pesquisando no Google por " ubuntu inicia o servidor vnc na inicialização ".

  1. Instale o servidor VNC.
  2. Inicie o vncserver pela primeira vez para configurar uma senha.
  3. Adicione o seguinte arquivo como /etc/init.d/vncserver (não se esqueça de modificar o USER, GEOMETRY, NAME, 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
    
por 31.05.2010 / 04:51
11

Se você deseja uma configuração mais dinâmica e a capacidade de se conectar a vários usuários, há uma maneira melhor de fazer isso. Como root, crie o arquivo (e o diretório, se ele não existir) / etc / sysconfig / vncservers, por exemplo:

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

Adicione servidores conforme necessário para cada usuário, adicionando algo como o seguinte ao arquivo vncservers.conf que você 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 ao /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 em sua resposta, você precisará executar o vncserver PELO MENOS UMA VEZ COMO CADA USUÁRIO que você quiser fazer login. Eu coloquei isso em caps porque se você pular essa etapa, nada disso funcionará. Então, como root, você poderia fazer:

su justin -c vncserver
su bob -c vncserver

Isso criará um diretório .vnc no diretório inicial de cada usuário com os scripts de inicialização apropriados.

Por fim, faça o seguinte:

update-rc.d vncserver defaults 99

agora você pode reiniciar ou iniciar o serviço manualmente digitando:

service vncserver start
    
por 05.05.2012 / 23:34
1

Eu acesso o Ubuntu de amigos que eu ajudo, para instalar ou configurar ou ensinar algo a eles.
Como eu preciso acessar da Internet através do modem, eu uso o vino.
Todas as opções de compartilhamento e segurança são ativadas durante o acesso.
Eu não quero que o servidor vino fique ativo o tempo todo: está bem, ele não inicia automaticamente.
Eu não tinha um menu System > Remote Desktop.
Eu editei /usr/share/applications/vino-preferences.desktop da seguinte forma:

# 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 do trabalho, peço aos meus amigos que executem as Preferências da Área de Trabalho Remota e marque a opção Compartilhando Permitir ... em. Ao sair de Preferences, o vino-server é iniciado e eles me informam o endereço IP a ser usado.
Quando o trabalho é concluído, eles executam Preference novamente para marcar Sharing Allow ... off.
Ao sair de Preferences, o vino-server para e pararia mesmo se iniciado no estado Sharing off.
Eu acho este procedimento muito conveniente, bem como o mais seguro para o usuário.

PS: desenvolvedores preferem que seus programas sejam executados localmente (dentro de uma sessão de usuário) porque um bug não pode afetar o sistema global dessa maneira.

    
por 28.06.2015 / 03:18
0

No Ubuntu 12.1, consegui acessar as Configurações do sistema- > Usuários, selecionar um usuário e definir "Login automático > ON"

Depois, consegui usar o tightVNC para entrar sem fazer login na própria caixa.

Funcionou bem para a caixa de Linux sem cabeça do ubuntu

    
por 26.10.2013 / 23:05
0

Eu sugiro usar a solução stephen jennings também se você precisar de vários vnc para usuários diferentes, apenas criando vários arquivos vncserver_john, vncserver_bill, .... Isso permite que você inicie / pare-os separadamente. Certamente, uma boa prática de programação sugere colocar o código comum a todos os usuários em um único arquivo e obtê-lo de todos os outros.

Eu "herdei" 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, na verdade, é executado continuamente e está estável ao longo dos anos, e os usuários ficam com preguiça de salvar suas janelas abertas. No entanto, servidores vncservers ou X11 únicos às vezes ficam paralisados, e é um grande incômodo desligar todos os usuários para que um servidor volte a funcionar.

    
por 06.01.2017 / 12:27