実行中のサービス spacenavd start は /etc/init.d/spacenavd start と同じではありません

実行中のサービス spacenavd start は /etc/init.d/spacenavd start と同じではありません

3dconnexion スペース マウスを使用するアプリケーションがあります。spacenavdデーモンを使用すると正常に動作しますが、起動時にデーモンを実行したり、サービスとして実行したりする際に問題が発生します。

$ sudo サービス 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

ただし、System V init スクリプトを実行すると、問題は発生しません。

$ 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さんからの提案)

私は次のアップスタートスクリプトを作成しました

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 サーバーに接続できないようです。実際、root によって実行される upstart スクリプトはどれも Xorg を使用できないようです。spacenavd は USB デバイスへの sudo アクセスが必要なので、どうすればよいでしょうか?

答え1

デフォルトでは、ルートはXserverにアクセスできません。これを有効にするには、/home/sam/.Xauthorityファイルを/root/.Xauthorityにコピーする必要があります。

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

再起動後、起動時に spacenavd デーモンを有効にするだけです。

sudo service spacenavd enable

そして、spacenavd サービスを開始します。

sudo service spacenavd start

関連情報