RetroArch is a modular, command-line driven, multi-system emulator that is designed to be fast, lightweight, and portable. Some of its features can be found on few other emulators, such as real-time rewinding and game-aware shading based on the libretro API.
Install thepackage or alternatively AUR for the development version.
Each libretro core package will install a library to
/usr/lib/libretro. The syntax to choose one when executing retroarch is:
$ retroarch -L /usr/lib/libretro/libretro-core.so path/to/rom
A default emulation core can be defined in the configuration, obviating the need to specify it on every run.
/etc/retroarch.cfg or ~/.config/retroarch/retroarch.cfg
libretro_path = "/usr/lib/libretro/libretro-core.so"
RetroArch provides a very well commented skeleton configuration file located at
Copy the skeleton configuration file to your home directory
$ cp /etc/retroarch.cfg ~/.config/retroarch/retroarch.cfg
It supports split configuration files using the
#include "foo.cfg" directive within the main configuration file,
retroarch.cfg. This can be overridden using the
--appendconfig /path/to/config parameter and is beneficial if different keybinds, video configurations or audio settings are required for the various implementations.
Some modifications are required to use the correct paths for Arch packages:
assets_directory = "/usr/share/libretro/assets" libretro_info_path = "/usr/share/libretro/info" libretro_directory = "/usr/lib/libretro" joypad_autoconfig_dir = "/usr/share/libretro/autoconfig"
Recent versions of RetroArch have introduced a built-in menu for updating core files and various assets from the RetroArch Buildbot. It can be accessed from the main menu at "Online Updater"
Core Updater Update Core Info Files Update Assets Update Autoconfig Profiles Update Cheats Update Databases Update Overlays Update GLSL Shaders
These cores and assets are kept up to date and can be pulled from the updater at any time.
Input devices do not operate
It is likely to encounter problems if running on a CLI or a display server other than Xorg, because /dev/input nodes are limited to root-only access. This is solved by manually adding a rule in
KERNEL=="event*", NAME="input/%k", MODE="666" as its contents. Reload udev rules by running:
# udevadm control --reload-rules
If rebooting the system or replugging the devices are not options, permissions may be forced using:
# chmod 666 /dev/input/event*
Alternatively, add your user to the "input" group, e.g.
# usermod -a -G input user
Poor video performance
If poor video performance is met, RetroArch may be run on a separate thread by setting
video_threaded = true in
This is, however, a solution that should be not be used if tweaking RetroArch's video resolution/refresh rate fixes the problem, as it makes perfect V-Sync impossible, and slightly increases latency.
No cores found
By default RetroArch will attempt to find cores in
~/.config/retroarch/cores. The packages in the official repositories install the cores in
/usr/lib/libretro/ and the core info files in
/usr/share/libretro/info. The settings can be changed to look in these directories.