A execução do serviço spacenavd não é iniciado como /etc/init.d/spacenavd start

1

Eu tenho um aplicativo que faz uso de um mouse espacial 3dconnexion. Ele funciona bem ao usar o daemon spacenavd , mas estou tendo problemas para fazer o daemon rodar na inicialização ou como um serviço.

serviço $ sudo spacenavd start

em /var/log/spnavd.log

Spacenav daemon 0.5
failed to open config file /etc/spnavrc: No such file or directory. using defaults.
Device detection, parsing /proc/bus/input/devices
using device: /dev/input/event5
device name: 3Dconnexion SpaceNavigator
trying to open X11 display ":0.0"
XAUTHORITY=/root/.Xauthority
No protocol specified
No protocol specified
failed to open X11 display ":0.0"
waiting for X socket file to appear

No entanto, quando executo o script de inicialização do sistema V, não tenho problemas:

$ sudo /etc/init.d/spacenavd start

em /var/log/spnavd.log

Spacenav daemon 0.5
failed to open config file /etc/spnavrc: No such file or directory. using defaults.
Device detection, parsing /proc/bus/input/devices
using device: /dev/input/event5
device name: 3Dconnexion SpaceNavigator
trying to open X11 display ":0"
XAUTHORITY=/home/sam/.Xauthority

O problema é que preciso que o daemon inicie a partir da inicialização, em vez de ativá-lo manualmente, o que requer acesso sudo.

Editar (sugestão do muru)

Eu fiz o seguinte script inicial

description "Spacenavd upstart script. Starts after lightdm to allow for binding with the Xorg server"
author "Samuel Charreyron"

start on started lightm
stop on shutdown

pre-start script
    echo "Starting spacenavd daemon"
end script

script 
    env DISPLAY=:0.0
    exec /usr/sbin/spacenavd -v -d 2> /var/log/spnavd.log
end script

pre-stop script
    echo "Stopping spacenavd daemon"
    # detect daemon's process id
    pid='cat /var/run/spnavd.pid 2>/dev/null'
    if [ $? != 0 ]; then
        pid='ps -e | grep spacenavd | awk '{ print  }''
        if [ -z "$pid" ]; then
             echo 'spacenavd daemon is not running, nothing to do.'
             exit 1
        fi
    fi
    kill $pid
end script

Eu vejo que o spacenavd não pode se conectar ao servidor Xorg. Na verdade, qualquer script upstart executado pelo root parece incapaz de usar o Xorg. Como posso fazer isso, já que o spacenavd precisa de acesso ao sudo para os dispositivos USB?

    
por user3293204 05.12.2014 / 16:02

1 resposta

1

A raiz não tem acesso ao Xserver por padrão. Para habilitá-lo, você precisa copiar seu arquivo /home/sam/.Xauthority para /root/.Xauthority

sudo cp /home/sam/.Xauthority /root/

Após a reinicialização, simplesmente ative o daemon spacenavd na inicialização:

sudo service spacenavd enable

E inicie o serviço spacenavd:

sudo service spacenavd start
    
por kukulo 06.11.2015 / 13:41