web-dev-qa-db-fra.com

L'exécution du service spacenavd start n'est pas identique à /etc/init.d/spacenavd start

J'ai une application qui utilise une souris spatiale 3dconnexion. Cela fonctionne bien lorsque vous utilisez le démon spacenavd mais j'ai des problèmes pour que le démon s'exécute au démarrage ou en tant que service.

$ Sudo service spacenavd start

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

Cependant, lorsque j'exécute le script d'initialisation du système V, je n'ai aucun problème:

$ Sudo /etc/init.d/spacenavd start

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

Le problème est que j'ai besoin du démon pour démarrer à partir du démarrage au lieu de le lancer manuellement, ce qui nécessite un accès Sudo.

Modifier (suggestion de muru)

J'ai fait le script parvenu suivant

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

Je vois que spacenavd ne peut pas se connecter au serveur Xorg. En fait, tout script parvenu qui est exécuté par root semble incapable d'utiliser Xorg. Comment puis-je le faire, puisque spacenavd a besoin d'un accès Sudo aux périphériques USB?

1
user3293204

La racine n'a pas accès à Xserver par défaut. Pour l'activer, vous devez copier votre fichier /home/sam/.Xauthority dans /root/.Xauthority

Sudo cp /home/sam/.Xauthority /root/

Après le redémarrage, activez simplement le démon spacenavd au démarrage:

Sudo service spacenavd enable

Et démarrez le service spacenavd:

Sudo service spacenavd start
1
kukulo