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.
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?
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