La ejecución del servicio spacenavd start no es igual que /etc/init.d/spacenavd start

La ejecución del servicio spacenavd start no es igual que /etc/init.d/spacenavd start

Tengo una aplicación que utiliza un mouse espacial de 3dconnexion. Funciona bien cuando uso el spacenavddemonio, sin embargo, tengo problemas para ejecutar el demonio en el arranque o como servicio.

$ sudo servicio spacenavd inicio

en /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

Sin embargo, cuando ejecuto el script de inicio del sistema V, no tengo ningún problema:

$ sudo /etc/init.d/spacenavd inicio

en /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

El problema es que necesito que el demonio se inicie desde el arranque en lugar de iniciarlo manualmente, lo que requiere acceso sudo.

Editar (sugerencia de muru)

Hice el siguiente script advenedizo

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 $1 }'`
        if [ -z "$pid" ]; then
             echo 'spacenavd daemon is not running, nothing to do.'
             exit 1
        fi
    fi
    kill $pid
end script

Veo que spacenavd no puede conectarse al servidor Xorg. De hecho, cualquier script inicial ejecutado por root parece incapaz de usar Xorg. ¿Cómo puedo hacerlo, ya que spacenavd necesita acceso sudo a los dispositivos USB?

Respuesta1

La raíz no tiene acceso a Xserver de forma predeterminada. Para habilitarlo, necesita copiar su archivo /home/sam/.Xauthority a /root/.Xauthority

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

Después del reinicio, simplemente habilite el demonio spacenavd en el arranque:

sudo service spacenavd enable

E inicia el servicio spacenavd:

sudo service spacenavd start

información relacionada