Retrolink: Seamless integration of frontend and emulators through gamepad hotkeys

Retrolink fill the gap between the frontend (ie. EmulationStation) and the emulators. It allows binding a key combination on any Bluetooth gamepad, which then toggle either the frontend or the emulators. Therefore, both can then be opened and closed without a keyboard, solely by using a wireless controller. The wrapper also provides a black background to avoid the flickering during the transitions.

Have a look at the GitLab page for more details and nice GIFs.
Click here for the AUR page.


To the repo I added a standalone python wrapper that assist the launch of PC games from EmulationStation. For DRM-Free games, it allows to bypass the steam client entierely, and therefore avoid the arbitrary auto-update and login process to the steam account. Its also great for wine games, as well as games lacking proper gamepad support.

Below is a summary of the implemented features as of today;

Configuration GUI (PyQt)

  • Allows binding hotkeys to multiple Bluetooth gamepads
  • Provides a script to manage permanent symlinks for these devices
  • Run custom scripts before or after the execution of the frontend

Evdev Daemon (PyQt)

  • Run in the background and listen for matching evdev events
  • Toggle the frontend or the emulators, as needed
  • Auto disconnects the gamepads on exit

extra/ (Python)

  • Take ownership of the game subprocess and it's wrappers; killing closes its children
  • Set the SDL_GAMECONTROLLERCONFIG variable for most common (235) Linux gamepads
  • Set the current working directory
  • Set custom environment variables
  • Launch processes before, after, or along with the main program launcher example:

# ~/.emulationstation/collections/pc/
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
$DIR/.games/ --run "$DIR/.games/Elastomania/eol2" --env "LD_LIBRARY_PATH=./lib" --wrap "antimicro --profile $DIR/.antimicro/Elastomania.amgp"