Running RetroArch on Linux turns childhood game files into a single, unified retro-gaming setup instead of ten separate emulators. RetroArch is a frontend for emulators, game engines and media players, and it bundles support for the NES, SNES, PlayStation, PSP and dozens more consoles under one interface. With ROM files already saved somewhere, running RetroArch on a modern PC takes a few terminal commands and about ten minutes.
If you still have your game ROMs you can enjoy retro-gaming on your own modern-day PC. If you have a Raspberry Pi lying around, then you can even make your own arcade-style gaming counter with very little effort, that project is called Retropie. So let’s hop in and immerse in some retro-gaming adventure.
How retroarch works
Now, let us look into how you will actually have to set up your Retroarch to be able to play games. The way retroarch works is you have to install “cores” (emulators for a particular machine) for the games you want to play.
Say, for example, we have the SuperMario game, which runs on a Nintendo Entertainment System (NES). Then we have to first install a core for NES, place the game file (ROM) in the correct directory and will be able to play it!
Installing and running RetroArch on Linux
There are several options of installation available for all kinds of Linux OS. Pick whichever matches your distro and how much control you want over updates. RetroArch itself is built on the libretro API, an open-source project under the GPLv3 license, and the frontend/core split is why one install can run 100+ emulators without managing each one separately.
Debian and Ubuntu (PPA)
Just run this one-liner on your terminal and you’ll be good to go:
sudo add-apt-repository ppa:libretro/stable && sudo apt update && sudo apt install retroarch
This pulls from the official Libretro PPA on Launchpad, not a random third-party mirror. Our PPA in Ubuntu guide covers what a PPA actually is if the command above is unfamiliar, and our add-apt-repository fix sorts out the “command not found” error some fresh installs hit.
Snap
You can even install it via snap if you are into that:
sudo snap install retroarch
Snap and Flatpak builds are maintained by the Libretro team, but their sandboxing drops Vulkan support and breaks a handful of cores, so a native package or PPA build is worth trying first on hardware that needs the extra performance.
Flatpak
Flatpak is the closest thing to a distro-agnostic install and it is the option official RetroArch documentation now leads with:
flatpak install flathub org.libretro.RetroArch
If Flatpak is not already set up, our Flatpak setup guide walks through adding the Flathub remote on Ubuntu, Fedora and Arch first.
Arch Linux
Arch and its derivatives carry a stable build straight from the official repositories:
sudo pacman -Sy retroarch
For more instructions see the official page, which lists Steam and itch.io builds too if you would rather manage updates through a launcher you already use.
Install the SNES core
Let us first install the core to play the game. Head over to the first option “Load Core”, then “Download a Core”, then choose your preferred core for the game and you’re done installing a core! We went with the “Nestopia” core for our NES Super Mario game.
Please make sure to download a compatible core for your game otherwise in the next step retroarch might not even recognize the game file. A single core often covers more ground than its name suggests, for example the Genesis Plus GX core handles the Genesis, Sega CD, Master System and Game Gear inside one download.

One caveat worth knowing: installing RetroArch through the Ubuntu PPA disables the in-app Core Downloader on some builds. If “Download a Core” is missing or grayed out, install cores through apt instead, since Libretro still publishes core packages alongside the main PPA.
Placing the ROM file and recognizing it
For convenience, you want to properly organize your game files. My recommendation is to just create a ROM folder on your home folder and place your game files in there.
You might even categorize on further subfolders if you have more than one game (based on the hardware they ran on). For the sake of simplicity, we only have one game file and have simply placed it directly in the ROM folder itself.

A quick note on legality: RetroArch and its cores are open-source software and fully legal on their own. The ROM files are the part that matters, and dumping a cartridge or disc you personally own is the commonly cited safe path.
Get, Set, and Play!
Now you can finally play the game! Simply go to the “Load Content” option and navigate to the ROM folder you created and you will see the game file (if you have downloaded the proper core for it). Select it and you’ll be dropped into nostalgia!


Some Keybinds and Additional Information
You might have noticed that Retroarch comes with some preconfigured keybinds. You will face difficulties if you do not have a clear understanding of these details. To get all the default keybinds, go to “Settings”, “Input”, and then “Port 1 Controls”. Here you will find all the default controls and even be able to change them according to your preference.
Next, you can see some hotkeys for controlling several aspects of the retroarch system (the previous one was in-game controls). For that head over to “Settings”, “Input”, and then “Hotkeys”.
At this point I recommend mapping the Backslash-key to the close content action, this will make it easier for us to exit out of a game and into retroarch, without closing retroarch.

Also, you don’t have to always launch the game by going to “Load Content” and then locating the ROM folder and finally the game. You can set up a collection area that will make it easier for anyone to launch all games.
To do this, head over to “Import Content > “Scan Directory” > locate your ROM directory > select “Scan this directory“.
After everything is said and done, you will be able to see a new menu item with the name of the Game Console of your installed games and directly run your game from there.

Setting up a controller or gamepad
Most Xbox and PlayStation-style pads work the moment RetroArch detects them, since RetroPad bindings are designed to mimic the controller each console originally shipped with. If yours does not, go to Settings, Input, Port 1 Controls, Set All Controls, and press each prompted button in turn.
Bindings apply across every core once set, so a Sega pad layout you configure for Genesis Plus GX carries over to the NES and SNES cores automatically. Save the profile from the Input menu afterward so it survives a restart.
BIOS files: when you actually need them
Cartridge-based systems like the NES, SNES and Genesis generally run without any extra files. CD-based systems, including the PlayStation, Sega CD, Saturn and TurboGrafx CD, need BIOS dumps from the real hardware placed in the System directory set under Settings, Directory, System/BIOS.
Check a loaded core’s exact requirements under Main Menu, Information, Core Information, which lists every BIOS file it expects along with whether each one is required or optional. Copyright rules keep RetroArch’s own documentation from linking to BIOS downloads, so pulling a dump from console hardware you own remains the reliable route.
Save states vs in-game saves
RetroArch tracks two separate save systems, and mixing them up is the single most common mistake beginners make. In-game saves are the real, cartridge-equivalent save file written when you save inside the game itself, and they survive core updates.
Save states are instant snapshots of the entire emulator, bound to a certain core version, so a core update can occasionally make an old save state unloadable. Use save states for quick checkpoints mid-session, but always fall back on an in-game save before closing RetroArch for good.
Adding shaders for a retro CRT look
Old sprite art was designed around the soft glow of a CRT screen, not a sharp modern LCD, so a shader can make classic games look closer to how they originally shipped. Download shader packs from Online Updater, then CG Shaders or GLSL Shaders. GLSL tends to have wider hardware support.
With a game running, open the Quick Menu (F1 by default), go to Shaders, then Load Shader Preset, and pick a preset like crt-easymode for a mild scanline look or crt-royale for a heavier one. Save it as a Core Preset so it applies automatically next time.
Cutting input lag with Run-Ahead
Even lightweight cores buffer a frame or two of input before displaying anything, which shows up as a faint delay between pressing a button and seeing it happen. Run-Ahead, under Settings, Latency, runs the core a couple of frames ahead of what is on screen and rolls back if your input changes the outcome.
Start with run_ahead_frames set to 1 or 2 in retroarch.cfg and raise it only if the lag is still noticeable, since higher values can introduce audio crackle on less stable cores. Enabling the secondary-instance option avoids that crackle at the cost of extra CPU use.
Troubleshooting common RetroArch problems
Most first-run issues trace back to one of three things: a directory pointing at the wrong folder, a missing BIOS file, or a core option still on its default value.
- Black screen after loading content. Almost always a missing or wrong-region BIOS file. Check Settings, Directory, System/BIOS against the core’s exact requirements.
- Core Downloader is missing from the menu. Common on PPA installs. Install cores through apt instead, as covered above.
- Controller works in menus but not in-game. Rebind manually under Settings, Input, Port 1 Controls rather than relying on autoconfiguration, especially for Bluetooth pads.
- Audio crackles with Run-Ahead on. Lower
run_ahead_framesto 1, or enable the secondary-instance option. - Scan Directory misses ROM files. Confirm the files use standard extensions and are not zipped, since not every core reads compressed archives.
Key takeaways
- RetroArch is a frontend, cores are the actual emulators you install inside it.
- Flatpak and the official PPA install cleanly on most distros, Snap and Flatpak trade some performance for sandboxing.
- Cartridge systems rarely need BIOS files, CD-based systems almost always do.
- In-game saves survive core updates, save states do not always.
- Scan Directory builds a browsable library instead of hunting for ROMs manually.
- Run-Ahead cuts input lag but can crackle audio if set too high.
Frequently asked questions
Why won’t RetroArch detect my ROM files after scanning?
The files likely use non-standard extensions or sit inside a zip archive a core can’t read. Rename to the standard extension and unzip before rescanning.
Do I need a BIOS file to play SNES or NES games?
No. Cartridge-based systems like the NES, SNES and Genesis run without BIOS files. CD-based systems such as the PlayStation and Sega CD require them.
Why did my save state stop working after a RetroArch update?
Save states are tied to the exact core version used to create them. A core update can break compatibility, which is why in-game saves stay the safer long-term record.
Which RetroArch install method is best on Linux?
The official PPA or Flatpak build both work well. Flatpak is more portable across distros, while the PPA integrates better with apt-based system updates.
Why is my controller working in the RetroArch menu but not in a game?
RetroArch separates menu navigation bindings from in-game RetroPad bindings. Set the game controls manually under Settings, Input, Port 1 Controls.
Conclusion
RetroArch rewards a bit of upfront setup with one interface for an entire game collection, and once the cores and ROMs are in place, adding a new console is just another Core Downloader entry away.
