RetroArch

Note: RetroArch is not affiliated with Arch Linux.

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.

Installation

RetroArch — Stable version.

http://www.libretro.com/ || retroarchAUR

RetroArch (git) — Development version.

http://www.libretro.com/ || retroarch-gitAUR

RetroArch-Phoenix (git) — GTK+ front-end, development version.

https://github.com/Themaister/RetroArch-Phoenix || retroarch-phoenix-gitAUR[broken link: archived in aur-mirror], or retroarch-phoenix-qt-gitAUR[broken link: archived in aur-mirror] (qt build)

Usage

RetroArch uses separate libraries, called emulator cores or emulator implementations, available from both the AUR and the libretro github repository.

Each package from the AUR will install a library to /usr/lib/libretro/. The syntax to choose one when executing retroarch is:

$ retroarch -L /usr/lib/libretro/libretro-(emulation core).so ~/path/to/foo
Tip: RetroArch can work with *.zip files using the retroarch-zip shell wrapper, although this method is not properly implemented and can be unstable.

A default emulation core can be defined in retroarch.cfg, obviating the need to specify it on every run.

Example:

/etc/retroarch.cfg or ~/.retroarch.cfg
libretro_path = "/usr/lib/libretro/libretro-foo.so"

Configuration

RetroArch provides a very well commented skeleton configuration file located at /etc/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.

Tip: RetroArch is capable of loading bsnes xml filters and cg shaders that can be defined in retroarch.cfg as video_bsnes_shader and video_cg_shader respectively.
Note: retroarch-gitAUR requires nvidia-cg-toolkit in order to use the cg shaders.
Warning: When using ALSA it is necessary for the audio_out_rate to be equal to the system's default output rate, usually 48000.

Troubleshooting

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 /etc/udev/rules.d/99-evdev.rules, with 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*

Poor video performance

If poor video performance is met, RetroArch may be run on a separate thread by setting video_threaded = true in ~/.config/retroarch/retroarch.cfg.

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.

See also