Linux port of go-organizer by Rhyyn, a multi-window manager for Dofus.
Original project (Windows): https://github.com/Rhyyn/go-organizer This fork (Linux): https://github.com/Dxsk/go-organizer-linux
Pre-built binaries are automatically compiled via GitHub Actions and published to the Releases page.
Download the latest go-organizer binary from there — no need to build from source.
- Automatic detection of open Dofus windows
- Switch active window via keyboard shortcuts or mouse buttons
- Global hotkeys (work even when Dofus is not in focus)
- Support for gaming mouse side buttons
- Configurable always-on-top window
- Key binding configuration through the GUI
The original project is Windows-only and relies on:
| Component | Original (Windows) | This fork (Linux) |
|---|---|---|
| Window management | Win32 API (user32.dll, w32) |
X11/EWMH via github.com/jezek/xgb |
| Keyboard/mouse hook | lxn/go-hook (WinAPI SetWindowsHookEx) |
evdev — direct read from /dev/input/event* |
| Key codes | Windows Virtual Key codes (VK_F2, etc.) |
Linux evdev codes (linux/input-event-codes.h) |
| Process detection | kernel32 GetModuleFileName |
/proc/[pid]/exe symlink |
| Window handles | w32.HWND |
uint64 (X11 Window ID) |
| Always-on-top | Win32 SetWindowPos |
_NET_WM_STATE_ABOVE (EWMH) |
windows.go+win32hook.go→windows_linux.go(X11 via xgb)hook.go: full hook system rewritten (evdev instead of go-hook)keycode.go: Windows VK codes → Linux evdev codeshelpers.go:GetExecutableNamevia/proc/[pid]/exeevent.go:w32.HWND→uint64app.go: removed Windows-specific importsgo.mod: removedw32/lxn/go-hook, addedjezek/xgb
Window switching:
An X11 watcher (_NET_ACTIVE_WINDOW) tracks which Dofus window was last focused. Hotkeys cycle from that index — so you can press shortcuts from any application (terminal, browser, etc.) without Dofus needing to be in the foreground.
Keyboard/mouse hook:
Raw evdev events are read from /dev/input/event*. Keyboards are detected via EV_KEY + EV_REP, mice via EV_KEY + EV_REL. Gaming mice that also set EV_REP are supported.
X11 display detection:
The DISPLAY environment variable takes priority, then the app automatically scans /tmp/.X11-unix/ — compatible with multi-monitor setups and XWayland.
Mouse side buttons:
BTN_SIDE (code 275) → SOURIS_4, BTN_EXTRA (code 276) → SOURIS_5.
- Linux with XWayland running (for Dofus AppImage under Wayland)
DISPLAYenvironment variable set (usually automatic)
The evdev hook requires read access to /dev/input/event*:
sudo usermod -aG input $USER
# Log out and back in afterwardsIf mouse side buttons are not detected, it is likely a logind ACL issue. Create a udev rule with your device's VID/PID (find it with lsusb):
# Example for Razer Viper V3 Pro (1532:00c1)
echo 'SUBSYSTEM=="input", ATTRS{idVendor}=="1532", ATTRS{idProduct}=="00c1", TAG+="uaccess"' \
| sudo tee /etc/udev/rules.d/70-mouse-uaccess.rules
sudo udevadm control --reload && sudo udevadm triggerThis port was developed and tested on Fedora Atomic (Bazzite) with KDE Plasma, running Dofus as an AppImage through XWayland.
The build environment is a distrobox container (Arch Linux) running on top of the immutable Bazzite host. This approach is recommended for immutable distributions where installing Go and Node.js system-wide is not practical.
# Create an Arch Linux container
distrobox create --name go-dev --image archlinux:latest
distrobox enter go-dev
# Inside the container — install dependencies
sudo pacman -S go nodejs npm
# Install Wails
go install github.com/wailsapp/wails/v2/cmd/wails@v2.9.2
export PATH="$PATH:$(go env GOPATH)/bin"To run the compiled binary on the host from a KDE/GNOME launcher, use distrobox-export:
# Inside the container
distrobox-export --bin /path/to/go-organizer --export-path ~/.local/bin- Go ≥ 1.22
- Node.js ≥ 18
- Wails v2:
go install github.com/wailsapp/wails/v2/cmd/wails@v2.9.2
cd /path/to/go-organizer-linux
wails build
# Binary output at build/bin/go-organizerconfig.ini and characters.ini must be in the same directory as the binary.
Key bindings are configurable from the GUI and saved to config.ini:
[KeyBindings]
StopOrganizer = 62,F4
PreviousChar = 275,SOURIS_4
NextChar = 276,SOURIS_5The format is evdev_code,display_name. Available codes are defined in keycode.go.
| Action | Key |
|---|---|
| Enable / disable organizer | F4 |
| Previous window | SOURIS_4 (mouse back side button) |
| Next window | SOURIS_5 (mouse forward side button) |
To launch from KDE/GNOME without a terminal, create ~/.local/share/applications/go-organizer.desktop:
[Desktop Entry]
Name=Dofus Organizer
Comment=Multi-window organizer for Dofus
Exec=/path/to/go-organizer
Icon=/path/to/icon.png
Type=Application
Categories=Game;Utility;
StartupNotify=true- Original project: Rhyyn/go-organizer
- Framework: Wails v2
- X11: jezek/xgb