Como iniciar o servidor VNC no start-up no Ubuntu 10.04

5

Eu tenho lutado com isso por tempo suficiente para fazer outra pergunta sobre o script de inicialização.

Eu tenho um script de inicialização que é relativamente simples, ou seja:

### BEGIN INIT INFO
# Provides:          startVNC
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      
# Short-Description: Start VNC server at boot time
# Description:       Test
### END INIT INFO

#!/bin/sh
echo "JOB RUN AT $(date)"
echo "============================"
echo ""
/usr/bin/vncserver -geometry 1280x1024 -depth 24

Obviamente, é apenas a última linha que é realmente importante. O script é executável, ou seja.

ls -l startVNC

rendimentos:

-rwxr-xr-x 1 root root 406 2011-12-07 15:45 startVNC

Quando eu o executo quando estou logado em ssh, quando my_user vncserver é iniciado e posso ver a GUI da minha área de trabalho. Então eu tentei 5 coisas para fazer funcionar na inicialização:

  1. Copiando meu script para /etc/init.d/ , chamando update-rc.d -f startVNC defaults (também com 99 após defaults para garantir que tudo o que vncserver depende já esteja em execução). Eu verifiquei todos os links simbólicos gerados estavam lá nas pastas /etc/rcX.d/ . Mas não funcionou na reinicialização ou na inicialização
  2. Adicionando meu script a /etc/rc.local antes de exit 0
  3. Adicionando a crontab -e as @reboot /home/my_user/scripts/startVNC
  4. Adicionando meu script a /etc/init.d/rcS
  5. Adicionando meu script ao Sistema - > Preferências - > Aplicativos de inicialização no Gnome

mas nenhum deles funcionou. O que mais posso verificar? Existe um erro no meu script talvez? Eu acho que o proprietário do processo deve ser my_user para funcionar, mas não tenho idéia de como depurá-lo.

Quaisquer pistas apreciadas.

    
por mmm 07.12.2011 / 16:41

2 respostas

6

Você pode usar su [YourUserName] -c /usr/bin/vncserver para executar o vncserver como usuário, não como raiz.

Outro ponto: no seu script, não há diferença entre iniciar e parar o servidor VNC. Normalmente, um script de inicialização usaria casos diferentes para iniciar / parar o serviço:

case "$1" in
    start)
    # code to start the application
    ;;

    stop)
    # code to stop the application
    ;;

    restart)
    $0 stop
    $0 start
    ;;
esac

Aqui é um exemplo elaborado de como iniciar um servidor vnc usando um init roteiro.

    
por 07.12.2011 / 17:11
3

OK, eu entendi. O problema foi:

  1. Executar meu script como root, o que normalmente aconteceria, não funcionará. É por isso que é necessário usar su [my_user] -c
  2. É necessário usar aspas para as opções, ou seja.

    su my_user -c "/usr/bin/vncserver -geometry 1280x1024 -depth 16"

  3. Também adicionei . /lib/lsb/init-functions e exit 0 - não sei se são necessários, mas com certeza não causam nenhum dano. Apenas copiei aqueles do exemplo elaborado fornecido por tohuwawohu .

Então acabei com:

### BEGIN INIT INFO
# Provides:          startVNC
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      
# Short-Description: Start VNC server at boot time
# Description:       A sophisticated script to do the job.
### END INIT INFO

#!/bin/sh
echo "JOB RUN AT $(date)"
echo "============================"
echo ""

. /lib/lsb/init-functions
su my_user -c "/usr/bin/vncserver -geometry 1280x1024 -depth 16"

exit 0

O que funciona bem. É claro que usar o script citado elaborado pode ser ainda melhor. Eu adicionei o script para iniciar por:

sudo update-rc.d -f startVNC start 99 2 3 4 5 .

porque não vejo nenhum motivo para executar qualquer coisa no desligamento (além do registro, o que não estou fazendo).

Veja também o comentário sobre o shebang (a linha que começa com #!) sendo perdida aqui sob a minha pergunta original. Funciona, portanto, não quis incluir o código não testado aqui. Você deve alterá-lo provavelmente se quiser usá-lo.

    
por 09.12.2011 / 12:37