Ich habe eine Anwendung, die eine 3dconnexion Space Mouse verwendet. Sie funktioniert einwandfrei, wenn ich den spacenavd
Daemon verwende, aber ich habe Probleme, den Daemon beim Booten oder als Dienst auszuführen.
$ sudo service spacenavd start
in /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
Wenn ich jedoch das System-V-Init-Skript ausführe, habe ich keine Probleme:
$ sudo /etc/init.d/spacenavd starten
in /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
Das Problem besteht darin, dass ich den Daemon per Bootvorgang starten muss und nicht manuell starten muss, wofür ein Sudo-Zugriff erforderlich wäre.
Bearbeiten (Vorschlag von Muru)
Ich habe das folgende Upstart-Skript erstellt
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
Ich sehe, dass spacenavd keine Verbindung zum Xorg-Server herstellen kann. Tatsächlich scheint jedes Upstart-Skript, das von root ausgeführt wird, Xorg nicht verwenden zu können. Wie kann ich das tun, da spacenavd Sudo-Zugriff auf die USB-Geräte benötigt?
Antwort1
Der Root hat standardmäßig keinen Zugriff auf den Xserver. Um ihn zu aktivieren, müssen Sie Ihre Datei /home/sam/.Xauthority nach /root/.Xauthority kopieren.
sudo cp /home/sam/.Xauthority /root/
Nach dem Neustart aktivieren Sie einfach den Spacenavd-Daemon beim Booten:
sudo service spacenavd enable
Und starten Sie den Spacenavd-Dienst:
sudo service spacenavd start