Debian: Como resolver a falha do Xserver

1

Eu continuo encontrando posts semelhantes on-line, mas não consigo usar as soluções no meu caso. no meu arquivo /etc/bash.bashrc , tenho o seguinte código colocado na parte inferior:

if [ -e /tmp/.X0-lock ]; then
    rm /tmp/.X0-lock
fi

startx
cd /home/user1/Documents/ProgramFile
./ myProgram.sh

Isso é para executar meu programa automaticamente na inicialização.

Estou usando o Debian 6.0.7 squeeze. Eu quero executar meu programa como root na inicialização. Eu executei o seguinte comando para desativar a GUI:

 update-rc.d -f gdm3 remove

Eu modifiquei /etc/inittab para permitir que o usuário root faça login automaticamente:

1:2345:respawn:/bin/login -f root tty1 </dev/tty1 > /dev/tty1 2>&1

quando inicializo minha caixa, recebo o seguinte erro:

_XSERVTransSocketUNIXCreateListener: ...SocketCreateListener() failed
_XSERVTransMakeAllCOTSServerListeners: server already running

Fatal server error:
Cannot establish any listening sockets - Make sure an X server isn't already running

Please consult the The X.Org Foundation support 
at http://wiki.x.org
for help. 
Please also check the log file at "/var/log/Xorg.0.log" for additional information.

(WW) xf86CloseConsole: KDSETMODE failed: Bad file descriptor   
(WW) xf86CloseConsole: VT_GETMODE failed: Bad file descriptor

É estranho que isso apareça em uma caixa branca no canto superior esquerdo da tela, ele fica lá por um tempo (~ 15 segundos) e então eu vejo meu código ser executado e a tela muda para o meu aplicativo.

P: Alguém pode me explicar o que está acontecendo aqui e o que posso fazer para não receber as mensagens de erro?

    
por fifamaniac04 16.01.2014 / 00:28

2 respostas

1

Parece que você não alterou o nível de execução padrão e o X Server já está em execução. Você deveria ter definido para 3, ou seja:

id:3:initdefault:

Embora eu não ache que seu roteiro irá funcionar de qualquer maneira. Esta parte:

cd /home/user1/Documents/ProgramFile
./ myProgram.sh

será executado somente após o X Server parar.

    
por 16.01.2014 / 09:00
1

Seu script não verifica se o X já está em execução.
Solução alternativa:

if [ -e /tmp/.X0-lock ]; then
   XPID=$(cat /tmp/.X0-lock)
   if ps -p $XPID >/dev/null; then
      echo "X already running"
   else
      rm /tmp/.X0-lock
      startx
   fi
fi

cd /home/user1/Documents/ProgramFile
./myProgram.sh

No entanto, eu faria algo assim:

# /etc/inittab
3:2345:respawn:/bin/login -f username tty3 < /dev/tty3 > /dev/tty3 2>&1

e

# /home/username/.bashrc
if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty3 ]; then
  startx -- :0  -quiet -logverbose 11
  cd /mydir
  ./myprog
fi

Então você gera automaticamente um shell no tty3. Supondo que o bash é o seu shell atual, o bash verifica se ele é executado no tty3 e, em seguida, executa suas coisas.

    
por 17.01.2014 / 14:44