Iniciar automaticamente o servidor VNC na inicialização


29

Instalei a área de trabalho Ubuntu em um servidor Ubuntu 9.10 VPS e consigo conectar-me ao servidor usando o TightVNC. No entanto, o servidor VNC neste VPS pode ser iniciado apenas 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 agendada, ele não será iniciado. Quais são as minhas opções?


Você já tentou descobrir por que não vai começar?
Ignacio Vazquez-Abrams

Respostas:


27

Encontrei essas instruções pesquisando no Google por " ubuntu launch vnc server na inicialização ".

  1. Instale o servidor VNC.
  2. Inicie vncserverpela primeira vez para configurar uma senha.
  3. Adicione o seguinte arquivo como /etc/init.d/vncserver(certifique-se de modificar USUÁRIO, GEOMETRIA, NOME etc.) como desejar.
  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

Estou recebendo a seguinte saída de erro gist.github.com/anonymous/821d0ec525abb2fe42d8a070c846fb9e , acredito que sua configuração precisa ser atualizada com alguns valores em branco.
niftylettuce

o meu funciona, mas o único problema é que ele solicita que eu digite uma senha para iniciar o script pela primeira vez. desde a sua inicialização, eu não posso entrar. como posso consertar isso?
droopie

@droopie você encontrou uma solução para a senha?
Ben

12

Se você deseja uma configuração mais dinâmica e a capacidade de se conectar a vários usuários, existe uma maneira melhor de fazer isso. Como root, crie o arquivo (e o diretório, se 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 init 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 a cada usuário que deseja fazer o login. Coloquei isso em maiúsculas porque se você pular esse passo, 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

1
isso realmente funciona para mim, mas a única coisa é que ele não o inicia automaticamente, acho que pode estar solicitando a senha do usuário. desde que é acionado automaticamente, não o vejo pedir. se eu iniciar manualmente o script, ele solicitará a senha do meu usuário. Como posso consertar isso?
droopie

1

Acesso o Ubuntu de amigos que ajudo, para instalar ou configurar ou para ensinar-lhes algo.
Como preciso acessar a Internet através do modem, uso o vino.
Todas as opções de compartilhamento e segurança são ativadas durante o acesso.
Não quero que o vino-server esteja ativo o tempo todo: tudo bem, não é iniciado automaticamente.
Eu não tinha o menu Sistema> Área de trabalho remota.
Editei /usr/share/applications/vino-preferences.desktop da seguinte maneira:

# 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 Permitir compartilhamento ... em.
Ao sair das Preferências, o vino-server é iniciado e eles me informam o endereço IP a ser usado.
Quando o trabalho é concluído, eles executam a Preferência novamente para marcar a opção Permitir compartilhamento ... desativada.
Ao sair das Preferências, o vino-server para e pára mesmo se iniciado no estado Compartilhamento desativado.
Acho esse procedimento muito conveniente e também o mais seguro para o usuário.

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


0

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

Então, pude usar o tightVNC para entrar sem fazer login na própria caixa.

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


Pelo que entendi, a pergunta é sobre como ativar o vncserver na inicialização, não o login do usuário.
Roman Luštrik 15/03/19

0

Sugiro usar a solução stephen jennings também se você precisar de vários vnc's para usuários diferentes, criando vários arquivos vncserver_john, vncserver_bill, .... Isso permite que você os inicie / pare separadamente. Certamente, boas práticas de programação sugerem colocar o código comum a todos os usuários em um arquivo e originar todos os outros.

Eu "herdei" a responsabilidade por um servidor em que vários colegas fazem alguma programação científica e avaliação de dados, todos com um vnc separado. O servidor realmente é executado de forma contínua e estável ao longo dos anos, e os usuários ficam com preguiça de salvar suas janelas abertas. No entanto, servidores únicos vncservers ou X11 às vezes ficam presos, e é um grande incômodo desligar todos os usuários para que um servidor volte a funcionar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.