- JavaScript 48.7%
- Go 40.5%
- CSS 9.3%
- TypeScript 1.1%
- HTML 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .github/workflows | ||
| frontend | ||
| .gitignore | ||
| app.go | ||
| event.go | ||
| go.mod | ||
| go.sum | ||
| helpers.go | ||
| hook.go | ||
| keybinds.go | ||
| keycode.go | ||
| main.go | ||
| README.md | ||
| wails.json | ||
| windows_linux.go | ||
Dofus Organizer — Linux Port
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
Download
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.
Features
- 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
What changed from the original project
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) |
Modified / replaced files
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
Technical details
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.
Requirements
System
- Linux with XWayland running (for Dofus AppImage under Wayland)
DISPLAYenvironment variable set (usually automatic)
input group
The evdev hook requires read access to /dev/input/event*:
sudo usermod -aG input $USER
# Log out and back in afterwards
Gaming mice (side buttons only)
If 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 trigger
Tested environment
This 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.
Setting up a distrobox build container
# 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
Build
Requirements
- Go ≥ 1.22
- Node.js ≥ 18
- Wails v2:
go install github.com/wailsapp/wails/v2/cmd/wails@v2.9.2
Compile
cd /path/to/go-organizer-linux
wails build
# Binary output at build/bin/go-organizer
config.ini and characters.ini must be in the same directory as the binary.
Key binding configuration
Key bindings are configurable from the GUI and saved to config.ini:
[KeyBindings]
StopOrganizer = 62,F4
PreviousChar = 275,SOURIS_4
NextChar = 276,SOURIS_5
The format is evdev_code,display_name. Available codes are defined in keycode.go.
Default bindings
| Action | Key |
|---|---|
| Enable / disable organizer | F4 |
| Previous window | SOURIS_4 (mouse back side button) |
| Next window | SOURIS_5 (mouse forward side button) |
Desktop launcher (optional)
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
Credits
- Original project: Rhyyn/go-organizer
- Framework: Wails v2
- X11: jezek/xgb