Eu tenho um aplicativo que utiliza um mouse espacial 3dconnexion. Funciona bem ao usar o spacenavd
daemon, mas estou tendo problemas para executar o daemon na inicialização ou como um serviço.
$ sudo serviço spacenavd start
em /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
No entanto, quando executo o script de inicialização do sistema V, não tenho problemas:
$ sudo /etc/init.d/spacenavd start
em /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
O problema é que preciso que o daemon inicie desde a inicialização, em vez de iniciá-lo manualmente, o que requer acesso sudo.
Editar (sugestão de muru)
Eu fiz o seguinte script inicial
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
Vejo que o spacenavd não consegue se conectar ao servidor Xorg. Na verdade, qualquer script inicial executado pelo root parece incapaz de usar o Xorg. Como posso fazer isso, já que o spacenavd precisa de acesso sudo aos dispositivos USB?
Responder1
O root não tem acesso ao Xserver por padrão. Para habilitá-lo, você precisa copiar seu arquivo /home/sam/.Xauthority para /root/.Xauthority
sudo cp /home/sam/.Xauthority /root/
Após a reinicialização, basta ativar o daemon spacenavd na inicialização:
sudo service spacenavd enable
E inicie o serviço spacenavd:
sudo service spacenavd start