Ausführen des Dienstes „spacenavd start“ ist nicht dasselbe wie „/etc/init.d/spacenavd start“

Ausführen des Dienstes „spacenavd start“ ist nicht dasselbe wie „/etc/init.d/spacenavd start“

Ich habe eine Anwendung, die eine 3dconnexion Space Mouse verwendet. Sie funktioniert einwandfrei, wenn ich den spacenavdDaemon 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

verwandte Informationen