xboxdrv - mdeguzis/RetroRig GitHub Wiki
Table of Contents
About xboxdrv
Xboxdrv is a Xbox/Xbox360 gamepad driver for Linux that works in userspace. It is an alternative to the xpad kernel driver and has support for Xbox1 gamepads, Xbox360 USB gamepads and Xbox360 wireless gamepads.
Configuration File Locations
The configuraiton files for this component are located at:
/etc/init.d/xboxdrv
/etc/default/xboxdrv/
<a name="install"
Installing
RetroRig includes xboxdrv as part of its base install, but if you should need to add it manually for whatever reason, you can install it as so:
sudo apt-get install xboxdrv
<a name="config"
Configuration
RetroRig makes use of two files to enable controller support
The /etc/default/xboxdrv file*
This file dictates the number of controllers and attaches them to the xboxdrv service in sequence. Up to four controllers are supported.
# How many Controllers? (support up to 4 Controllers)
CONTROLLER_NUM=4
case $CONTROLLER_NUM in
1) CONTROLLER="-w 0 -l 2 --trigger-as-button --dpad-as-button"
;;
2) CONTROLLER="-w 0 -l 2 --trigger-as-button --dpad-as-button --next-controller -w 1 -l 3 --trigger-as-button --dpad-as-button"
;;
3) CONTROLLER="-w 0 -l 2 --trigger-as-button --dpad-as-button --next-controller -w 1 -l 3 --trigger-as-button --dpad-as-button --next-controller -w 2 -l 4 --trigger-as-button --dpad-as-button"
;;
4) CONTROLLER="-w 0 -l 2 --trigger-as-button --dpad-as-button --next-controller -w 1 -l 3 --trigger-as-button --dpad-as-button --next-controller -w 2 -l 4 --trigger-as-button --dpad-as-button --next-controller -w 3 -l 5 --trigger-as-button --dpad-as-button"
;;
*) CONTROLLER="incorrect amount of controller specified"
;;
esac
The xboxdrv service
#! /bin/bash
### BEGIN INIT INFO
# Provides: xbox-controller
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start XBOX Controller Service
# Description: Start the xboxdrv daemon with several options
# support up to 4 Controllers
### END INIT INFO
# Author: MasteRehm
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="XBOX Controller Service"
NAME=xboxdrv
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="-D -d --deadzone 4000 --dbus disabled --detach"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions
do_start()
{
if [ $CONTROLLER_NUM -gt 4 ]; then
echo -e "\n$CONTROLLER"; exit 1;
fi
start-stop-daemon -S -q -x $DAEMON -- $DAEMON_ARGS $CONTROLLER
# Workaround: xboxdrv daemon creates /dev/input/js[4-7] device files, if /dev/input/js[0-3] cr
eated on startup.
if [ -x /usr/bin/rename ]; then
sleep 1
if [ `ls /dev/input/js*` =~ /dev/input/js[4-7] ](/mdeguzis/RetroRig/wiki/-`ls-/dev/input/js*`-=~-/dev/input/js[4-7]-); then rename 's/js4/js0/;s/js5/js1/;s/js6/js2/;s/js7/js3/' /dev/input/js*; fi
fi
}
do_stop()
{
start-stop-daemon -K -o -q -x $DAEMON
sleep 1
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
do_start
status=$?
log_end_msg $status
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
status=$?
log_end_msg $status
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
restart)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
exit 3
;;
esac