Releases: AndyCappDev/tuxbox
v3.1.4
Bug fixes
USB auto-detect no longer probes non-TourBox CDC-ACM devices
Follow-up to v3.1.2's hot-plug fix. While running in BLE mode, the
auto-detect supervisor previously sent the unlock probe bytes to every
/dev/ttyACM* device on the bus every rescan tick. Harmless to virtually
every other CDC-ACM device, but spammy if an Arduino, 3D printer board, or
modem happened to share the bus.
The supervisor now reads idVendor/idProduct/manufacturer from sysfs
first and skips ports that positively identify as something else. Genuine
TourBoxes hit a fast allowlist path; unrecognized firmware variants whose
manufacturer string contains "tourbox" fall through and probe with an
INFO log surfacing the new VID:PID pair. On older kernels or systems where
sysfs isn't usable, the supervisor falls through to probing exactly as
before.
Thanks to @KylieBenfield for the contribution (#44).
Compatibility
No config or API changes. Drop-in upgrade from v3.1.3.
v3.1.3
Bug fixes
"View on GitHub" button now opens the matching release notes
In the Check for Updates dialog, the View on GitHub button
previously opened the /releases index page. It now opens the specific
release tag for the version the dialog is announcing, so you land
directly on the release notes for that update.
Compatibility
No config or API changes. Drop-in upgrade from v3.1.2.
v3.1.2
Bug fixes
USB hot-plug now works in auto-detect mode (#42, #43)
The driver previously ran USB detection exactly once at startup. If the
TourBox cable wasn't plugged in at that moment — for example because the
service started at login before you connected the cable, or because you
share the device with another machine — the driver would fall back to BLE
permanently and never reconsider, even after a fully functional
/dev/ttyACM0 appeared.
The auto-detect path now keeps watching for the USB cable while running
in BLE mode, and switches to USB within ~3-10 seconds of the cable being
plugged in. --usb and --ble flags retain their existing
single-transport semantics.
Thanks to @KylieBenfield for the detailed bug report and the fix.
BLE disconnect handling
Fixed a duplicate disconnect-callback registration in the BLE transport
and corrected a misleading timeout message in the reconnect path.
Compatibility
No config or API changes. No new dependencies. Drop-in upgrade from
v3.1.1.
v3.1.1
Fixes
- Modifier+mouse combos now work out of the box — Bindings like
KEY_LEFTALT+REL_WHEEL:1(Alt+scroll),KEY_LEFTCTRL+BTN_LEFT(Ctrl+click) and similar previously delivered only the mouse part because the modifier had no time to latch into the compositor's keystate before the pointer event arrived. TuxBox now automatically inserts a small delay between the modifier and the mouse event for these combos. No configuration required —modifier_delayis still respected for keyboard-only combos in stubborn apps like GIMP, and if you've set it higher than the new auto-floor, your value still wins.- Reported in #39 — affects e.g. Alt+Scroll zoom in DaVinci Resolve.
Docs
- Updated
CONFIG_GUIDE.md,GUI_USER_GUIDE.md, anddefault_mappings.confto document the new auto-delay behavior and clarify thatmodifier_delayis for keyboard-only combos.
v3.1.0
What's New
- Locale-aware key display — GUI now uses the system keyboard layout for key names
- Physical scancode capture — key capture in the GUI editor uses scancodes for reliable mapping
--versionflag —tuxbox --versionprints the current version- GitHub issue templates — new templates for bugs, features, and connection issues
Fixes
- Fix ImportError on Python 3.14 (missing pyproject.toml)
- Fix left panel vertical resize in GUI (profiles pane expands, controller stays fixed)
- Fix virtual device crash and GUI layout issues
- Fix install on immutable distros (Bazzite, Silverblue, etc.)
- Broaden pgrep patterns to detect driver on NixOS and pip entry points
- Fix BLE driver indentation and config dir rename on migration
- Fix stale profile not cleaned up after rename migration
- Fix systemd service example in README
v3.0.1 - Bug fixes
TuxBox v3.0.1
Bug fix release addressing issues reported by users.
Bug Fixes
-
Fix crash loop on some systems — The driver could crash with
'NoneType' object has no attribute 'path'when the virtual input device was recreated during a profile switch, causing an infinite reconnect loop. The device path is now handled safely in all logging statements. (#30) -
Fix GUI controls table not expanding — When resizing the GUI window taller, the Edit Control section was absorbing the extra space instead of the Controls Configuration table. The table now expands to fill available space, reducing the need to scroll. (#29)
-
Add libxcb-cursor0 to Debian/Ubuntu dependencies — PySide6 (Qt 6.5+) requires
libxcb-cursor0which isn't installed by default on some distributions like Linux Mint. Added to the documented system requirements. (#28)
Upgrading
cd /path/to/tuxbox
git pull
./install.shv3.0.0 - Renamed driver to TuxBox
TuxBox v3.0.0
The project has been renamed from tourbox-linux to TuxBox. "TourBox" continues to refer to the hardware device; "TuxBox" is the name of this Linux driver and configuration tool.
Upgrading from v2.x
For existing installations, pull the latest code and re-run the install script:
cd /path/to/your/clone
git pull
./install.shThe install script will automatically:
- Migrate your config from
~/.config/tourbox/to~/.config/tuxbox/, preserving all your profiles and button mappings - Rename the old config directory to
~/.config/tourbox.pre-v3-backup/ - Stop and remove the old
tourbox.service - Remove old launcher, desktop entry, and icon
- Install everything under the new
tuxboxnames - Update the git remote URL if it still references
tourbox-linux
Note: If you pinned the TuxBox GUI to your taskbar, the pin will be removed during the upgrade. After installing, find "TuxBox Configuration" in your application menu and pin it again.
What Changed
- Python package:
tourboxelite/→tuxbox/ - Config directory:
~/.config/tourbox/→~/.config/tuxbox/ - Service:
tourbox.service→tuxbox.service - GUI launcher:
tourbox-gui→tuxbox-gui - Desktop entry:
tourbox-gui.desktop→tuxbox-gui.desktop - Version: 2.10.0 → 3.0.0
Fresh Install
git clone https://github.com/AndyCappDev/tuxbox.git
cd tuxbox
./install.shBreaking Changes
- The Python package is now
tuxbox(wastourboxelite). Any custom scripts usingfrom tourboxelite import ...will need to be updated. - The environment variable
TOURBOX_USB_PORThas been renamed toTUXBOX_USB_PORT.
After Upgrading
Once you're satisfied everything works, you can delete the backup of your old config:
rm -rf ~/.config/tourbox.pre-v3-backupv2.10.0 - X11 Support
X11 Window Detection
Profile switching previously only worked on Wayland compositors (Sway, Hyprland, GNOME, KDE, Niri). This release adds a generic X11 fallback using xdotool, enabling app-specific profiles on all X11 desktops — Cinnamon, MATE, XFCE, i3, and more.
Features
- X11 profile switching — Automatic profile switching now works on X11 desktops via
xdotool, covering Linux Mint/Cinnamon, MATE, XFCE, i3, and any other X11 window manager. - Seamless fallback — X11 detection runs after all Wayland-specific detectors, so Wayland users are unaffected.
- Installer support —
install.shnow detects X11 sessions and checks forxdotool, with distro-specific install instructions if it's missing.
Setup for X11 Users
Install xdotool from your distro's package manager:
# Debian/Ubuntu/Mint
sudo apt install xdotool
# Fedora/RHEL
sudo dnf install xdotool
# Arch
sudo pacman -S xdotoolNo configuration changes needed — the driver automatically detects X11 and uses xdotool for window detection.
Other Changes
- Renamed internal
WaylandWindowMonitorclass toWindowMonitor(backward-compatible alias preserved)
v2.9.0
Modifier Key Delay
Some applications (notably GIMP) don't recognize key combinations sent by the TourBox because the modifier key (Ctrl, Shift, Alt) and the main key arrive at nearly the same time. This release adds a configurable delay between them so the application has time to register the modifier first.
Features
- Global setting — Set
modifier_delayin the[device]section ofconfig.confto apply a default delay (in milliseconds) across all profiles. - Per-profile override — Set
modifier_delayin a profile's[profile]section to override the global value for that specific profile. This lets you add delay only where it's needed (e.g., 30ms for GIMP) while keeping zero latency everywhere else. - Explicit disable — Setting a profile's
modifier_delayto0explicitly disables the delay for that profile, even if a global value is set. - GUI support — New "Modifier Key Delay" section in profile settings (⚙) with an "Override global setting" checkbox and a 0-100ms spin box.
- Live reload — Changes to both global and per-profile values are picked up via SIGHUP without restarting the driver.
Configuration
Global (all profiles):
[device]
modifier_delay = 30Per-profile (in a .profile file):
[profile]
name = Gimp
app_id = gimp
modifier_delay = 30Recommended values: 20-50ms. Most applications don't need this — only enable it for profiles where key combos aren't being recognized.
Documentation
- New "Configuring Modifier Key Delay" section in the GUI User Guide
- New "Modifier Key Delay" section in the Config Guide
- Updated
[device]section documentation in both guides
v2.8.0
What's Changed
Immediate Fire for Modifier Buttons
- Modifier buttons now fire their base action immediately (0ms) when Activate on Release is OFF
- Removes the 125-150ms combo deferral delay that made buttons feel sluggish
- Combos still work correctly - base action is released when combo key is pressed
This change makes button response feel instant and consistent with the documented "Immediate Fire" behavior.
Bug Fixes
- Fixed BLE unlock code being interpreted as button presses (thanks @eternal)
Full Changelog: v2.7.0...v2.8.0