How to Set Up Emulators on Linux in 2026 — Ubuntu, Fedora, Arch (Complete Guide)

Low4 solutions

I have a Linux desktop (Ubuntu, Fedora, Arch, or similar distro) and want to run emulators natively — not Batocera, just normal emulators on my existing desktop. Which emulators work on Linux, what's the best install method (Flatpak vs AppImage vs package manager), and how do I get controllers working since they don't seem to be recognized?

Last updated 1 week ago0 users reported this issue6
Sign in to interact

Solutions

solution #1629

flatpak-install-and-udev-controller-rules (sortOrder=1, isMostHelpful)

Why Linux Is Great for Emulation in 2026:

Linux is arguably the best OS for emulation: Flatpak gives you always-current emulator versions independent of your distro's package lag; Vulkan on Linux is consistently faster than on Windows for AMD GPUs (no DirectX translation overhead); and no Windows Defender quarantining your BIOS files mid-session. The main Linux-specific challenge is controller udev rules — Linux doesn't auto-trust game controller input the way Windows does. This guide covers that first because it blocks every emulator equally.

Step 1: Install Flatpak (if not already present):

Ubuntu / Debian / Mint:

  1. Run: sudo apt install flatpak
  2. Add Flathub: flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
  3. Restart your session after adding Flathub.

Fedora: Flatpak is pre-installed. Add Flathub if needed: flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

Arch: sudo pacman -S flatpak then add Flathub as above.

Step 2: Fix Controller Detection (Do This Before Installing Any Emulator):

Without the correct udev rules, your controller either won't be detected or won't have permission for rumble/force-feedback in any emulator.

  1. Install the joystick package: sudo apt install joystick (Ubuntu/Debian) or sudo dnf install joystick (Fedora) or sudo pacman -S joystick (Arch).
  2. Install the SDL gamepad database rules: sudo cp /usr/share/games/joystick/gamecontrollerdb.txt /etc/udev/rules.d/
  3. Reload: sudo udevadm control --reload-rules && sudo udevadm trigger

Xbox Bluetooth controllers specifically: install xpadneo for the best Linux Xbox Bluetooth driver:

  1. sudo apt install dkms
  2. git clone https://github.com/atar-axis/xpadneo.git && cd xpadneo && sudo ./install.sh

PlayStation DualSense / DS4: These work natively on kernel 5.12+. If yours shows as "unknown gamepad," add a udev rule: echo 'KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ce6", MODE="0664", GROUP="input"' | sudo tee /etc/udev/rules.d/70-dualsense.rules then reload rules. Substitute 0ce6 with 05c4 for DS4.

Verify: Run jstest /dev/input/js0 and move your sticks — axis values should change. If nothing responds, reboot to apply udev rules.

Recommended Install Methods:

  • Flatpak (Flathub): best for RetroArch, PCSX2, Dolphin, PPSSPP, mGBA, melonDS — always current, sandboxed, distro-agnostic
  • AppImage: best for DuckStation and Eden — self-contained, no install, portable
  • Distro package (apt/dnf/pacman): easy but often 6–12 months behind; avoid for emulators

solution #1630

retroarch-pcsx2-dolphin-ppsspp-flatpak-installs (sortOrder=2)

RetroArch (Multi-system: SNES, GBA, NDS, PS1, N64, Sega):

  1. Install: flatpak install flathub org.libretro.RetroArch
  2. Run: flatpak run org.libretro.RetroArch
  3. First run: Online Updater → Core System Files Downloader — download core system files (also fixes the "Sys folder missing" error in Dolphin-within-RetroArch).
  4. Online Updater → Core Downloader — install needed cores: bsnes-hd beta (SNES), mGBA (GBA), melonDS (NDS), Mednafen PSX (PS1), Mupen64Plus-Next (N64).
  5. BIOS placement for the Flatpak build: ~/.var/app/org.libretro.RetroArch/config/retroarch/system/ — NOT ~/.config/retroarch/system/. Put PS1 BIOS files (scph5501.bin etc.), DC BIOS (dc_boot.bin + dc_flash.bin), NDS BIOS files here.

PCSX2 (PlayStation 2):

  1. Install: flatpak install flathub net.pcsx2.PCSX2
  2. BIOS: place PS2 BIOS file (SCPH-77004.BIN or similar) at ~/.var/app/net.pcsx2.PCSX2/config/PCSX2/bios/
  3. Settings → Graphics → Renderer → Vulkan. On AMD GPUs, Vulkan on Linux often outperforms the Windows equivalent.
  4. Enable Multithreaded VU (MTVU) for most games.

Dolphin (GameCube and Wii):

  1. Install: flatpak install flathub org.DolphinEmu.dolphin-emu
  2. GameCube adapter udev rule (official Nintendo GCN adapter): echo 'SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="0337", TAG+="uaccess"' | sudo tee /etc/udev/rules.d/51-gcadapter.rules then reload and replug the adapter.
  3. Real Wiimote passthrough works on Linux via native Bluetooth. Controllers → Wii Remotes → Real Wiimote → Enable passthrough. You may need: sudo usermod -aG bluetooth $USER and relogin.
  4. Shader caching: first launch of any game compiles shaders (normal). Subsequent launches are smooth — Mesa's shader cache persists across sessions on AMD/Intel.

PPSSPP (PSP):

  1. Install: flatpak install flathub org.ppsspp.PPSSPP
  2. Settings → Graphics → Backend → Vulkan — outperforms OpenGL on Linux for most PSP titles.
  3. No BIOS required — PPSSPP uses HLE. Point it at your PSP ISO/CSO files.

solution #1631

duckstation-eden-switch-directory-structure (sortOrder=3)

DuckStation (PlayStation 1) — AppImage:

  1. Download from duckstation.org → Linux → AppImage.
  2. chmod +x duckstation-qt-x64.AppImage && ./duckstation-qt-x64.AppImage
  3. Wayland note: DuckStation runs better on Wayland than XWayland. If you see visual tearing on GNOME/KDE with Wayland, add SDL_VIDEODRIVER=wayland to your environment.
  4. BIOS: Settings → BIOS → add your BIOS directory. DuckStation auto-detects region from filename.

Eden (Nintendo Switch) — AppImage:

  1. Download the official Linux AppImage from eden-emu.dev. (No official Flatpak as of mid-2026 — check the site for updates.)
  2. chmod +x Eden-*.AppImage && ./Eden-*.AppImage
  3. Keys + firmware location: ~/.local/share/eden/keys/prod.keys and firmware via Eden's Tools → Install Firmware.
  4. Vulkan 1.1+ required. Check: vulkaninfo | grep "Vulkan Instance Version". AMD Mesa on Ubuntu 22.04+ has Vulkan 1.3 — no extra steps. NVIDIA: ensure driver 470+.

Flatpak Sandbox Permissions (common fix):

Flatpak emulators are sandboxed and can't access your ROM folder until you grant it:

  • Grant access: flatpak override --user --filesystem=~/Emulation <flatpak-id>
  • Example: flatpak override --user --filesystem=~/Emulation org.DolphinEmu.dolphin-emu

Recommended Directory Structure:

Linux paths are case-sensitive and absolute — keeping ROMs organized matters more than on Windows.

  • ~/Emulation/roms/ps1/ — .bin/.cue, .chd
  • ~/Emulation/roms/ps2/ — .iso, .chd
  • ~/Emulation/roms/gamecube/ — .iso, .rvz, .gcz
  • ~/Emulation/roms/switch/ — .nsp, .xci
  • ~/Emulation/bios/ — all BIOS files, flat structure
  • ~/Emulation/saves/ — manual backups

Point each emulator at the relevant subfolder in its settings. Grant Flatpak sandbox access per emulator as above.

solution #1632

gamescope-quick-reference-and-common-issues (sortOrder=4)

Optional: Gamescope for Better Fullscreen:

Gamescope (Valve's micro-compositor) gives better fullscreen behavior and optional FSR upscaling — useful for multi-monitor setups or if you want upscaling without configuring each emulator individually.

  1. Install: sudo apt install gamescope (Ubuntu) or sudo pacman -S gamescope (Arch).
  2. Example — run Dolphin at 1440p upscaled from 1080p: gamescope -W 2560 -H 1440 -w 1920 -h 1080 --fsr -- flatpak run org.DolphinEmu.dolphin-emu

Quick Reference — Emulator Install Methods:

  • RetroArch: Flatpak — org.libretro.RetroArch
  • DuckStation: AppImage — duckstation.org
  • PCSX2: Flatpak — net.pcsx2.PCSX2
  • Dolphin: Flatpak — org.DolphinEmu.dolphin-emu
  • PPSSPP: Flatpak — org.ppsspp.PPSSPP
  • Eden (Switch): AppImage — eden-emu.dev
  • mGBA: Flatpak — io.mgba.mGBA
  • melonDS: Flatpak — net.kuribo64.melonDS
  • xemu (Xbox): Flatpak — app.xemu.xemu
  • Flycast (Dreamcast): Flatpak — com.flycast.Flycast

Common Issues:

  • Controller not detected in any emulator: udev rules not applied — run udevadm control --reload-rules && udevadm trigger, reboot if needed.
  • Flatpak emulator can't read ROM folder: sandbox blocks access — run flatpak override --user --filesystem=~/Emulation <flatpak-id>.
  • BIOS not found in Flatpak RetroArch: sandboxed path is different — BIOS go to ~/.var/app/org.libretro.RetroArch/config/retroarch/system/ not ~/.config/retroarch/system/.
  • Eden shows black screen: Vulkan version too old — update Mesa (Ubuntu: sudo add-apt-repository ppa:kisak/kisak-mesa && sudo apt upgrade).
  • DualSense shows as "unknown gamepad": kernel HID driver version — update kernel (5.12+ has native DualSense HID) or add manual udev rule above.
  • PCSX2 audio crackling on PipeWire: buffer underrun — PCSX2 Settings → Audio → Module → Cubeb → raise Latency to 80ms.
  • Screen tearing in fullscreen: KMS/VSync not enabled — enable Adaptive Sync/FreeSync in compositor settings (KDE: Screen Configuration → Adaptive Sync).
  • Dolphin can't find GCN adapter: USB udev rule missing — add the 057e/0337 rule above, replug adapter after reload.
  • AppImage won't launch: missing FUSE or exec bit — chmod +x *.AppImage and install libfuse2 (not FUSE3 on older distros).
  • Saves don't persist across Flatpak updates: save path inside app sandbox — back up ~/.var/app/<flatpak-id>/ before major updates.

See also: which emulators need a BIOS and where they goRetroArch complete setup guide

Experiencing a different problem?Report a new issue to help the community find solutions.

Comments (0)

No other comments yet. Be the first to share your thoughts.

Sign in to_leave_comment

On This Page