Tengo una aplicación que utiliza un mouse espacial de 3dconnexion. Funciona bien cuando uso el spacenavd
demonio, sin embargo, tengo problemas para ejecutar el demonio en el arranque o como servicio.
$ sudo servicio spacenavd inicio
en /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
Sin embargo, cuando ejecuto el script de inicio del sistema V, no tengo ningún problema:
$ sudo /etc/init.d/spacenavd inicio
en /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
El problema es que necesito que el demonio se inicie desde el arranque en lugar de iniciarlo manualmente, lo que requiere acceso sudo.
Editar (sugerencia de muru)
Hice el siguiente script advenedizo
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
Veo que spacenavd no puede conectarse al servidor Xorg. De hecho, cualquier script inicial ejecutado por root parece incapaz de usar Xorg. ¿Cómo puedo hacerlo, ya que spacenavd necesita acceso sudo a los dispositivos USB?
Respuesta1
La raíz no tiene acceso a Xserver de forma predeterminada. Para habilitarlo, necesita copiar su archivo /home/sam/.Xauthority a /root/.Xauthority
sudo cp /home/sam/.Xauthority /root/
Después del reinicio, simplemente habilite el demonio spacenavd en el arranque:
sudo service spacenavd enable
E inicia el servicio spacenavd:
sudo service spacenavd start