Xbox 360 userspace driver with extra configurability
C++
435
734 commits
updated Aug 28, 2026
[!WARNING] xboxdrv is mostly obsolete for everyday use. Prefer the in-kernel
xpaddriver and/or Steam Input. This tree remains useful for heavy remapping, userspace experimentation, and PROTOCOL notes.
Xboxdrv is a userspace Xbox / Xbox 360 gamepad driver for Linux. It is an
alternative to the xpad kernel driver and supports Xbox classic pads,
Xbox 360 USB and wireless receivers, plus a number of third-party and
related devices (see src/xpad_device.cpp). Optional backends include
PlayStation 3 (USB), Wiimote (when built with CWiid), generic USB, and an
experimental Steam Controller backend.
Chatpad support: wired USB controllers (interface 2) and experimental
wireless receiver multiplexing (--chatpad). Headset audio works on
wired Xbox 360 USB and on a wireless receiver slot (--headset /
--headset-pipewire / --headset-pulse); wireless often has less noise than wired.
Use this driver when you need more configurability than xpad, or when
xpad does not work for a particular device. For most games, the kernel
driver is preferable.
masterNEWS.md--help-x11keysym key namesdbus-binding-tool for glue generation)bin2h generation)Optional:
HAVE_CWIID when detected)Vendored C++ helpers live under external/ and are built via CMake; they
are not separate system packages. No GTK or Boost dependency is required.
uinput kernel moduledata/org.seul.Xboxdrv.confA flake is provided (flake.nix):
nix build
mkdir build
cd build
cmake ..
cmake --build .
Example package set on Debian/Ubuntu-style systems:
sudo apt-get install \
g++ cmake pkg-config \
libusb-1.0-0-dev libudev-dev libevdev-dev \
libx11-dev libdbus-glib-1-dev libglib2.0-dev \
python3
# optional Wiimote:
# sudo apt-get install libcwiid-dev libbluetooth-dev
Load uinput:
sudo modprobe uinput
To load it on boot, add uinput to /etc/modules (or the equivalent for
your distribution).
cmake --install build
Prefix and DESTDIR work as usual:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
cmake --build .
DESTDIR=/tmp/stage cmake --install .
Running from the build tree without installing is fine for testing.
If you run xboxdrv as a daemon that owns org.seul.Xboxdrv on the system
bus, install the policy file:
sudo cp data/org.seul.Xboxdrv.conf /etc/dbus-1/system.d/
Without it, startup may fail with a D-Bus security policy error.
Detailed options are documented in the man page:
man -l doc/xboxdrv.1
Example configs live in examples/. USB protocol notes are in
PROTOCOL.
GPL-3.0-or-later. See COPYING.
C++
92.9%
Python
3.2%
C
2.1%
CMake
1.2%
Xbox 360 userspace driver with extra configurability
C++
435
734 commits
updated Aug 28, 2026
[!WARNING] xboxdrv is mostly obsolete for everyday use. Prefer the in-kernel
xpaddriver and/or Steam Input. This tree remains useful for heavy remapping, userspace experimentation, and PROTOCOL notes.
Xboxdrv is a userspace Xbox / Xbox 360 gamepad driver for Linux. It is an
alternative to the xpad kernel driver and supports Xbox classic pads,
Xbox 360 USB and wireless receivers, plus a number of third-party and
related devices (see src/xpad_device.cpp). Optional backends include
PlayStation 3 (USB), Wiimote (when built with CWiid), generic USB, and an
experimental Steam Controller backend.
Chatpad support: wired USB controllers (interface 2) and experimental
wireless receiver multiplexing (--chatpad). Headset audio works on
wired Xbox 360 USB and on a wireless receiver slot (--headset /
--headset-pipewire / --headset-pulse); wireless often has less noise than wired.
Use this driver when you need more configurability than xpad, or when
xpad does not work for a particular device. For most games, the kernel
driver is preferable.
masterNEWS.md--help-x11keysym key namesdbus-binding-tool for glue generation)bin2h generation)Optional:
HAVE_CWIID when detected)Vendored C++ helpers live under external/ and are built via CMake; they
are not separate system packages. No GTK or Boost dependency is required.
uinput kernel moduledata/org.seul.Xboxdrv.confA flake is provided (flake.nix):
nix build
mkdir build
cd build
cmake ..
cmake --build .
Example package set on Debian/Ubuntu-style systems:
sudo apt-get install \
g++ cmake pkg-config \
libusb-1.0-0-dev libudev-dev libevdev-dev \
libx11-dev libdbus-glib-1-dev libglib2.0-dev \
python3
# optional Wiimote:
# sudo apt-get install libcwiid-dev libbluetooth-dev
Load uinput:
sudo modprobe uinput
To load it on boot, add uinput to /etc/modules (or the equivalent for
your distribution).
cmake --install build
Prefix and DESTDIR work as usual:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
cmake --build .
DESTDIR=/tmp/stage cmake --install .
Running from the build tree without installing is fine for testing.
If you run xboxdrv as a daemon that owns org.seul.Xboxdrv on the system
bus, install the policy file:
sudo cp data/org.seul.Xboxdrv.conf /etc/dbus-1/system.d/
Without it, startup may fail with a D-Bus security policy error.
Detailed options are documented in the man page:
man -l doc/xboxdrv.1
Example configs live in examples/. USB protocol notes are in
PROTOCOL.
GPL-3.0-or-later. See COPYING.
C++
92.9%
Python
3.2%
C
2.1%
CMake
1.2%