DuskPort

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.

Published 2026-05-10

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 build
  • aarch64 / arm64 → Raspberry Pi 5, ARM laptops → use the arm64 build

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:

ArchFileSizeSHA-256
x86_64Dusk-v1.0.0-linux-x86_64.zip30 MBda9edeef6e0c4233e7f461a854aa1f41119f68848b4e00e037149be8298e13ca
ARM64Dusk-v1.0.0-linux-arm64.zip29 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 MethodMouse


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


Last updated: 2026-05-10. We update this guide as Linux-specific patches release.

← All install guides · Pillar guide →