How to Install Dusk on Linux (Twilight Princess PC Port Guide)
Install Dusk on Linux — x86_64 and ARM64 builds. Avoid the AppImage permission bug, real save paths, real settings menus, and how to pick the right graphics backend.
This guide covers installing Dusk — the native Twilight Princess PC port — on Linux desktop. For Steam Deck, see the dedicated Steam Deck guide (the Deck uses the same Linux x86_64 binary but the setup flow is different).
Time required: ~10 minutes Difficulty: Easy
⚠️ Read This First — AppImage Bug
There is an open issue at v1.0.0:
Affected users (CachyOS reported, possibly other distros) see this fatal error on launch:
[fatal] [dusk] Unable to get PrefPath: Couldn't create directory '/TwilitRealm': 'Permission denied'
This appears specifically with an AppImage variant of Dusk. Use the regular .zip build (which this guide does) and you will avoid the issue.
The official v1.0.0 release page lists Dusk-v1.0.0-linux-x86_64.zip and Dusk-v1.0.0-linux-arm64.zip — these are the official builds. Any AppImage you find may be from a release candidate or an unofficial repackage.
Before You Start
1. Identify your architecture
Run in terminal:
uname -m
x86_64→ most desktops, laptops, and Steam Deck → use the x86_64 buildaarch64/arm64→ Raspberry Pi 5, ARM laptops → use the arm64 build
2. Vulkan support (recommended)
Dusk supports 7 graphics backends, but Vulkan and OpenGL are the typical Linux defaults. Verify Vulkan is available:
Ubuntu / Debian:
sudo apt install vulkan-tools mesa-vulkan-drivers
vulkaninfo --summary
Arch:
sudo pacman -S vulkan-tools vulkan-icd-loader
Fedora:
sudo dnf install vulkan-tools mesa-vulkan-drivers
If Vulkan doesn’t work for some reason, you can switch to OpenGL or OpenGL ES in Settings → Prelaunch → Graphics Backend.
3. Your own GameCube Twilight Princess disc dump
Required. See How to legally dump your TP disc.
Supported in v1.0.0:
- GameCube USA (GZ2E01) — SHA-1
75edd3ddff41f125d1b4ce1a40378f1b565519e7 - GameCube PAL (GZ2P01) — SHA-1
2601822a488eeb86fb89db16ca8f29c2c953e1ca
Step 1 — Download Dusk
Pick the matching arch from github.com/TwilitRealm/dusk/releases:
| Arch | File | Size | SHA-256 |
|---|---|---|---|
| x86_64 | Dusk-v1.0.0-linux-x86_64.zip | 30 MB | da9edeef6e0c4233e7f461a854aa1f41119f68848b4e00e037149be8298e13ca |
| ARM64 | Dusk-v1.0.0-linux-arm64.zip | 29 MB | (verify on releases page) |
Verify the download:
sha256sum ~/Downloads/Dusk-v1.0.0-linux-x86_64.zip
Step 2 — Extract
cd ~/Downloads
unzip Dusk-v1.0.0-linux-x86_64.zip
mv Dusk ~/Applications/
cd ~/Applications/Dusk
(~/Applications doesn’t exist by default on most distros — mkdir -p ~/Applications first if needed, or use any folder you prefer.)
Step 3 — Make Executable and Verify ROM
chmod +x Dusk
sha1sum ~/path/to/your-dump.iso
The SHA-1 should match 75edd3ddff41f125d1b4ce1a40378f1b565519e7 (NTSC-U) or 2601822a488eeb86fb89db16ca8f29c2c953e1ca (PAL).
Step 4 — First Launch
./Dusk
The Dusk prelaunch window opens. Click Select Disc Image, browse to your disc dump, and wait for “Verifying disc image” to complete. When the status reads “Disc ready.”, click Play.
Step 5 — Configure Controller / Gyro
Verified path:
Settings → Input → Controller → Configure Controller
Per-port window opens with tabs Port 1, Port 2, … and pages Controller / Buttons / Triggers / Sticks / Rumble.
To enable gyro aim:
Settings → Input → Gyro → Gyro Aim (toggle on)
Linux supports DualShock 4/5, Switch Pro Controller (with hid-nintendo kernel module on most distros), 8BitDo Pro 2, Xbox Wireless via xpadneo, and more.
To use mouse aim instead:
Settings → Input → Gyro → Gyro Input Method →
Mouse
Save File Location
~/.local/share/TwilitRealm/Dusk/USA/Card A/01-GZ2E01-gczelda2.gci
For the PAL disc, replace USA with EUR.
If ~/.local/share/TwilitRealm/Dusk/ doesn’t exist after first launch, see the #818 troubleshooting section below.
Migrate from Dolphin
Dolphin Linux saves: ~/.local/share/dolphin-emu/GC/USA/Card A/01-GZ2E01-gczelda2.gci. Copy to Dusk’s folder. Restart Dusk.
Distro-Specific Notes
Ubuntu / Debian
Works out of the box on 22.04+. For older releases you may need to install libsdl3-0 from a backports repository or build SDL3 from source.
Arch / Manjaro
Works. Ensure vulkan-tools and your matching driver package (vulkan-radeon or nvidia-utils) are installed.
Fedora
Works. Same Vulkan story as Arch.
NixOS
The repo includes a flake.nix and flake.lock. Building from source is the supported path.
Other distros
Try the binary; if Vulkan fails, switch the graphics backend in Settings → Prelaunch.
Common Issues
”Couldn’t create directory ‘/TwilitRealm’: ‘Permission denied’”
This is the AppImage variant bug (#818). The fix is to use the regular .zip build (which this guide does).
If you’ve already tried an AppImage, check whether it created an unwanted /TwilitRealm folder at root and clean it up:
sudo rm -rf /TwilitRealm
Then download the .zip build instead.
Vulkan not found
Install mesa-vulkan-drivers (Ubuntu/Debian) or vulkan-radeon/nvidia-utils (Arch) and reboot. Or switch to OpenGL in Settings → Prelaunch → Graphics Backend.
Audio doesn’t work
Most distros use PipeWire as default; Dusk should pick it up automatically. If not, install pipewire-pulse for the PulseAudio compatibility shim.
Game runs but can’t bind keyboard
Linux keyboard binding is reportedly working (the macOS issue #830 is macOS-specific). If you hit binding issues on Linux, check the GitHub issues page for newer reports.
Stutters at unlocked framerate
Known issue: pulsating bloom artifact at unlocked framerate (#825). Either lock framerate or accept the visual quirk.
Need to compile from source
Per docs/building.md:
- Ubuntu 24.04, Arch, Fedora supported
- CMake 3.25+
- Python 3+
- Build presets:
linux-default-relwithdebinfo,linux-default-debug,linux-clang-relwithdebinfo,linux-clang-debug
What to Try Next
- 🎨 Install the Henriko Magnifico 4K texture pack (path:
~/.local/share/TwilitRealm/Dusk/texture_replacements/) - 🎮 Steam Deck-specific guide (uses this same Linux x86_64 build)
- 📋 All verified known issues
Last updated: 2026-05-10. We update this guide as Linux-specific patches release.