Запуск службы spacenavd start не совпадает с /etc/init.d/spacenavd start

Запуск службы spacenavd start не совпадает с /etc/init.d/spacenavd start

У меня есть приложение, которое использует 3dconnexion space mouse. Оно отлично работает при использовании демона, spacenavdоднако у меня возникают проблемы с запуском демона при загрузке или в качестве службы.

$ sudo service spacenavd запуск

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

Однако при запуске сценария инициализации системы V у меня не возникает никаких проблем:

$ sudo /etc/init.d/spacenavd запустить

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

Проблема в том, что мне нужно, чтобы демон запускался при загрузке, а не запускался вручную, для чего требуется доступ sudo.

Редактировать (предложение от muru)

Я сделал следующий скрипт upstart

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

Я вижу, что spacenavd не может подключиться к серверу Xorg. Фактически, любой скрипт upstart, запущенный root, похоже, не может использовать Xorg. Как мне это сделать, поскольку spacenavd нужен доступ sudo к USB-устройствам?

решение1

У root по умолчанию нет доступа к Xserver. Чтобы включить его, вам нужно скопировать файл /home/sam/.Xauthority в /root/.Xauthority

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

После перезагрузки просто включите демон spacenavd при загрузке:

sudo service spacenavd enable

И запустите службу spacenavd:

sudo service spacenavd start

Связанный контент