RetroArch
RetroArch is the reference implementation of the libretro API. It is a modular front-end for video game system emulators, game engines, video games, media players and other applications that offers several uncommon technical features such as multi-pass shader support, real-time rewinding and video recording (using FFmpeg), it also features a gamepad-driven UI on top of a full-featured command-line interface.
Installation
Install the retroarch package or alternatively retroarch-gitAUR for the development version.
- Install retroarch-assets-xmb to get the fonts and icons for the RetroArch GUI. You may also want to install retroarch-assets-ozone for a more desktop-friendly GUI.
- Install retroarch-standalone-serviceAUR to get system user, system service and RetroArch configuration for standalone game-box. Then start and/or enable
retroarch-standalone.service
.
Usage
RetroArch relies on separate libraries, called "cores", for most of its functionality. These can be downloaded per-user within RetroArch itself (via the libretro Buildbot) or you can install them system-wide via Community or AUR.
By default RetroArch is configured to load the per-user cores that it downloads. Change your #Configuration if you install them elsewhere.
The command to run a particular core is
$ retroarch --libretro /path/to/some_core_libretro.so /path/to/rom
Configuration
When you first run RetroArch it will create the user configuration file ~/.config/retroarch/retroarch.cfg
.
If you install RetroArch components in your home-directory, you should specify local paths in the global configuration file for downloading cores. For example,
~/.config/retroarch/retroarch.cfg
libretro_directory = "~/.config/retroarch/cores" libretro_info_path = "~/.config/retroarch/cores/info"
If you install any RetroArch components system-wide with pacman, you should specify these in the global configuration file and include them in your user file. For example,
/etc/retroarch.cfg
# for retroarch-assets-xmb assets_directory = "/usr/share/retroarch/assets" # for libretro-core-info libretro_info_path = "/usr/share/libretro/info" # for libretro cores libretro_directory = "/usr/lib/libretro"
~/.config/retroarch/retroarch.cfg
#include "/etc/retroarch.cfg"
If you want to override your configuration (for example when running certain cores) you can use the --appendconfig /path/to/config
command line option.
Tips and tricks
Enabling the Online Updater
If you prefer to install all RetroArch components with the built in updater instead of pacman, you can enable it with a configuration file:
~/.config/retroarch/retroarch.cfg
menu_show_core_updater = "true"
Enabling SaveRAM Autosave Interval
By default, RetroArch only writes SRAM onto disk when it exits without error, which means that there is a risk of losing save data when using crash-prone cores. To change this behavior, open ~/.config/retroarch/retroarch.cfg
and set autosave_interval
to n.
~/.config/retroarch/retroarch.cfg
autosave_interval = "600"
With the example above, RetroArch will write SRAM changes onto disk every 600 seconds.
Filters and shaders
RetroArch can load BSNES XML filters and CG shaders. These are set in retroarch.cfg
with video_bsnes_shader
and video_cg_shader
respectively. The shaders can also be obtained and updated directly inside RetroArch using the Online Updater.
Reset settings to their default value
To reset a setting or keybind to its default value through the GUI, highlight it and press Start
. To remove a button from a keybind, highlight the keybind and press Y
.
Troubleshooting
No cores found
By default RetroArch searches for cores in ~/.config/retroarch/cores
, which is where the Online Updater installs them. Cores installed with pacman are placed in /usr/lib/libretro
and thus will not appear in RetroArch's GUI. You should choose one method of installing cores (pacman or the Online Updater) and change your #Configuration to match.
Input devices do not operate
You may encounter problems if running on a CLI or a display server other than Xorg or if you use the udev input driver, because /dev/input
nodes are limited to root-only access. Try adding your user to the input
user group then logging in again.
Alternatively, manually add 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.
Audio issues with ALSA
When using ALSA the audio_out_rate
must match the system's default output rate, usually 48000
.
Save data is lost whenever RetroArch crashes
See #Enabling SaveRAM Autosave Interval.
Start game from playlist but reports 'No Items'
If RetroArch reports "libretro core requires contents, but nothing provided", try to load game by manually chose the path of the ROM from the "Main Menu -> Load Content". It seems unreliable to start game from 'playlist'.