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