Multiboxing Guide
Launch
make launch-multi # Launches 3 instances (configurable in norrath-native.yaml)
Each instance gets:
- Staggered startup (5s default) to avoid GPU initialization races
- Background priority for box characters (nice -n 10 + ionice)
- Separate log file (
~/.local/share/norrath-native/eq-instance-N.log)
Window Tiling
make fix # Syncs display + tiles windows
make tile # Re-tile only (main gets large window)
make tile-grid # Equal grid (all same size)
make pip # Picture-in-picture layout
Ultrawide Support
On ultrawide monitors (21:9), the main window is clamped to 16:9 (2560x1440 on a 3440x1440 display). Box windows get the remaining space.
Setting Your Main Character
The first time you tile, you need to tell norrath-native which window is your main character:
make tile-set-main
This flashes each window and asks you to pick a number. The mapping
is saved to ~/.local/share/norrath-native/hwnd-character-map and
persists across sessions.
Or set it in norrath-native.yaml:
main_character: Grenlan
Focus Cycling
make focus-next # Cycle focus to the next EQ window
Uses Wine’s SetForegroundWindow API for reliable focus switching.
Architecture
Each EQ instance runs as a native XWayland top-level window (no Wine virtual desktop). This provides:
- Native GNOME/Mutter click-to-focus
- Proper window decorations
- Normal alt-tab behavior
- No X11 stacking bugs
Window tiling uses wine_helper.exe (MinGW-compiled C program) which
calls Win32 APIs (EnumWindows, SetWindowPos, SetForegroundWindow)
through Wine. This is more reliable than X11 tools (xdotool was removed
after causing Wine focus routing corruption).
Configuration
# norrath-native.yaml
instances: 1 # Single launch count
multibox_instances: 3 # make launch-multi count
stagger_delay: 5 # Seconds between instance launches
main_character: Grenlan # Gets the large window
profile: raid # Performance profile for boxes
Troubleshooting
Windows not tiling
make status # Check window detection
make windows # List detected EQ windows
eqclient.ini overwritten on exit
Settings are protected: make configure sets eqclient.ini to read-only
(444) after applying settings, preventing the multibox exit race condition.
Performance
make doctor # Check NTSYNC status (kernel-level Wine perf)
NTSYNC (kernel 6.14+) significantly reduces CPU overhead when running
multiple Wine instances. Enabled by make prereqs.