Erstellt: 1. März 2015 (zuletzt geändert: 14. August 2015)

RetroPie (V2.6): Controller einrichten

Raspberri Pi
RetroPie: Controller über Setupscript & retroarch.cfg einrichten

Dieser Text wurde archiviert! Eine Liste aller archivierten Texte findet ihr unter ‚RetroPie: Einrichtung für ältere Images‚.

Eine Übersicht der aktuellen Beiträge gibt es unter ‚RetroPie: Raspberry Pi als Emulator‚.


Wie im vorherigen Beitrag ‚RetroPie: EmulationStation 2 einrichten‚ erwähnt, laufen eine ganze Reihe von Joysticks / Gamepads mit dem neuen Image 2.6.0 direkt, ohne dass ihr noch etwas einstellen müsst. Aber spätestens wenn ihr für Multiplayerspiele mehr als einen Controller benötigt, müsst ihr doch noch selbst tätig werden. Außerdem wird euch evtl. noch interessieren, wie ihr über den Controller den Emulator beendet, eine Pause einlegt, das Menü öffnet oder Snapshots speichern und laden könnt.

 

Basis ist wieder RetroPie 2.6

 

Bevor wir zu den Controllern kommen, werfen wir aber erstmal einen Blick auf das Setupscript von RetroPie.

 

Setupscript
Das Setupscript bietet euch die Möglichkeit Updates zu holen, Komponenten zu installieren und Einstellungen vorzunehmen. Um das Script zu starten, verlasst die EmulationStation (geht am schnellsten über <F4>) und wechselt mit cd ~/RetroPie-Setup in das Setup-Verzeichnis von RetroPie.

Achtung: Denkt daran, dass unter Linux die Groß- / Kleinschreibung sehr wichtig ist!

Startet danach über sudo ./retropie_setup.sh das erwähnte Script. Mit den ersten beiden Punkten könntet ihr RetroPie übrigens auch ohne das Image installieren.

Das Setupscript sieht etwas anders, als bishe aus
Das Setupscript sieht ab Image 2.6 etwas anders, als bisher aus

Hinter Punkt 2 seht ihr auch die Warnung, dass eine Sourcecode basierte Installation seeehhhhr lange dauern kann! Da wir aber das Image verwenden, sind die ersten beiden Punkte für uns nicht so interessant.

Bevor wir weitermachen, aktualisieren wir zunächst mal das Setupscript. Wählt dazu einfach den Punkt U UPDATE RetroPie Setup script an.

U UPDATE RetroPie Setup script
U UPDATE RetroPie Setup script

Sobald das Update durchgelaufen ist, es dauert nur wenige Sekunden, bestätigen wir die Meldung…

Das Script wurde aktualisiert
Das Script wurde aktualisiert

…und verlassen danach das Script über <Cancel>.
Wir landen wieder auf der Eingabeaufforderung, von wo wir das Script mit sudo ./retropie_setup.sh direkt wieder starten. Dies ist notwendig, damit eventuelle Änderungen übernommen werden.
Ihr könnt übrigens mit Pfeil auf / ab die letzten Befehle durchblättern und mit der <TAB>-Taste eure Eingaben automatisch vervollständigen. Drückt nach sudo ./r einfach mal auf <TAB>, es erscheint sudo ./retropie_, da es mehrere Dateien gibt, deren Name so beginnen. Gebt ein zusätzliches s ein und drückt erneut <TAB>, schon steht der volltständige Name sudo ./retropie_setup.sh auf dem Bildschirm.

 

Bisher konntet ihr in diesem Menü mit dem Punkt 6 UPDATE RetroPie Binaries auch die Emulatoren aktualisieren. Da dieser Punkt aber zu Problemen führte, wurde er erstmal gestrichen. Eventuell wird das Update in Zukunft wieder eingebaut. Bis dahin könnt ihr bei Bedarf über die Emulatoren nur mit den Punkten 1 Binaries-based INSTALLATION bzw. 5 INSTALL individual emulators from binary or source aktualisieren. Vergesst nicht vorher eure Einstellungen zu sichern.

 

Als nächstes wollen wir aber endlich den Controller konfigurieren…

 

Joystick / Gamepad einrichten
Wie oben und im letzten Beitrag bereits erwähnt, funktionieren eine ganze Reihe von Controllern direkt, ohne dass ihr diese extra einrichten müsst. Hier nochmal zur Erinnerung die Liste mit den ‚bekannten‚ Joysticks / Gamepads:

2Axes11KeysGamePad.cfg
ControlBlockArcadeGamepad.cfg
ControlBlockSNESGamepad.cfg
DragonRise_Inc.___Generic___USB__Joystick__.cfg
Generic_X-Box_pad.cfg
GreenAsia_Inc.____USB_Joystick_____.cfg
HuiJiaSNEStoUSBConverter.cfg
JessTechColourRumblePad.cfg
LogitechGamepadF710.cfg
LogitechLogitechCordlessRumblePad2.cfg
Logitech_Logitech_Dual_Action.cfg
Logitech_Logitech_RumblePad_2_USB.cfg
Microsoft_Sidewinder_Dual_Strike_USB_version_1.cfg
Microsoft_X-Box_360_pad.cfg
MY-POWER_CO__LTD__2In1_USB_Joystick.cfg
PS3ControllerBT.cfg
PS3Controller.cfg
PS3ControllerUSB.cfg
Saitek_P880.cfg
SNES-to-GamepadDevice.cfg
Sony_PLAYSTATION(R)3_Controller.cfg
Thrustmaster_Dual_Trigger_3-in-1.cfg
THRUSTMASTER_FireStorm_Dual_Analog_2.cfg
Thrustmaster_T_Mini_Wireless.cfg
USB_2-axis_8-button_gamepad.cfg
USB_Gamepad.cfg
Xbox_360_Wireless_Receiver.cfg
XboxGamepad(userspacedriver).cfg

Sollte euer Controller, so wie mein Speedlink Competition Pro USB, hier nicht auftauchen, dann müsst ihr ihn allerdings doch selbst einrichten.

 

Ich zeige hier mal zwei Wege, wie man einen Controller einrichten kann. Wichtig ist, dass jetzt zunächst nur ein einzelner Controller am Pi hängt!!

Die einfachste Möglichkeit bietet zwar das eben gesehene Setupscript, ich empfehle euch aber die zweite Möglichkeit. Schaut euch aber trotzdem die folgenden Schritte einmal an, es werden dort einige Punkte erklärt, die ihr wissen solltet.

Wählt im Script den Punkt 3 Setup / Configuration (to be used post install)

3 Setup / Configuration (to be used post install)
3 Setup / Configuration (to be used post install)

gefolgt von 317 Register RetroArch controller an.

317 Register RetroArch controller
317 Register RetroArch controller

 

Exkurs: Was ist denn jetzt ‚RetroArch‚ schon wieder?
Meistens ‚rede‘ ich hier nur von RetroPie und EmulationStation, aber die eigentliche Arbeit verrichtet zum größten Teil RetroArch oder um noch genauer zu sein Libretro. Unser Emulatorsystem ist hirachisch (von unten nach oben) wie folgt aufgebaut:

  1. Libretro: Dies stellt die unterste Ebene dar. Es ist eine in C/C++ geschriebene API, die die Schnittstelle zur vorliegenden Hardware herstellt. Dabei gibt es nicht nur die hier von uns verwendete Raspberry Pi Version, sondern auch Fassung für Android, IOS, Windows, XBox360, Wii, …
  2. Emulatoren / Apps: Angepasste Programme greifen auf Libretro zu und versorgen uns so mit Emulatoren und anderen Tools (z. B. Mediaplayern).
  3. RetroArch: Dies setzt auf Libretro auf und ist dessen gängige grafische Bedienoberfläche. Hierüber können bequem Einstellungen für Libretro und die Apps vorgenommen werden. Ihr könnt diese Oberfläche auch am Pi aus den zu RetroArch gehörenden Emulatoren aufrufen.
RetroArch
RetroArch
  • EmulationStation: Die EmulationStation stellt eine einheitliche Oberfläche für die verschiedenen Systeme zur Verfügung. Sie fasst RetroArch / Libretro und andere, dort nicht enthaltene, Emulatoren zusammen (z. B. VICE oder ScummVM). Aus der Sicht der EmulationStation ist RetroArch also ‚nur‚ ein weiterer Emulator.
  • RetroPie: Alle oben erwähnten Einzelteile bringt RetroPie nun unter einen Hut und bietet so ein rundum sorglos Paket. Hervorzuheben ist hier natürlich das SD-Karten-Image, womit jeder sehr einfach seinen Raspberry Pi zur Emulatorzentrale machen kann.

 

Folgt anschließend einfach den Anweisungen auf dem Bildschirm. Es darf jetzt wirklich nur der Controller am Pi hängen, für den wir die Einstellungen vornehmen möchten!

Gebt mir einen Controller und bitte nur einen einzigen 😉

Dann noch kurz dafür sorgen, dass alles in Nullstellung ist…

RetroPieV26_024…und schon startet nach <ENTER> die Abfrage der Tasten.

RetroPieV26_025 

Falls euer Controller nicht über alle abgefragten Tasten verfügt, wartet einfach einige Sekunden, dann wird automatisch zur Abfrage der nächsten Taste gesprungen. Es gibt keinen Zwang, was die Belegung der Tasten angeht, ich würde aber empfehlen, dass ihr euch, so weit es möglich ist, am XBox 360-Pad oder dem der Playstation orientiert.

Belegung des XBox 360 Controllers
Belegung des XBox 360 Controllers

 

Zum Schluß setzt der Menüpunkt noch den Hotkey für alle bisher gespeicherten Controller. Dadurch werden bisherige Hotkeys leider gelöscht. Danach erscheint abschließend ein Infofenster, dass uns mitteilt, dass die Einstellungen gespeichert wurden.

Die Einstellungen wurden gespeichert.
Die Einstellungen wurden gespeichert.

Ab jetzt könnt ihr den Joystick / das Pad in den RetroArch-Emulatoren verwenden. Wollt ihr aber zu zweit spielen oder möglichst viele Sonderfunktionen mit dem Controller bedienen, dann müssen wir noch etwas mit den Configdateien ‚herumspielen‚.

Hinweis: Verwendet ihr nur einen nicht RetroArch-Emulator (z. B. VICE), dann könnt ihr auf die eben gezeigte Konfiguration komplett verzichten. Die ‚Einzel‘-Emulatoren bringen jeweils ihre eigenen Treiber mit und werden ggf. über das jeweilige Menü oder eigene Konfiguratiohnsdateien aktiviert und eingestellt.

Werfen wir doch mal einen Blick auf den VICE-Emulator, der nicht zu RetroArch gehört. Zum C64 passt natürlich der Competition Pro am besten, daher verwende ich dafür einfach mal einen Speedlink Competition Pro USB.
Startet ihr z. B. das Spiel Nebulus mit VICE, dann werdet ihr merken, dass eurer Controller / Joystick nicht funktioniert. Öffnet mit <F12> das Menü und folgt den Schritten auf den Bildern…

Bei VICE den Joystick aktivieren.
Bei VICE den Joystick aktivieren.

Verlasst zum Schluß das Menü und schon könnt ihr euren Joystick / Controller verwenden. Benutzt ihr einen Controller mit mehr als einem Feuerknopf, wie z. B. das XBox 360 Pad, dann kommt ihr mit dem B-Knopf auch ins Menü.

Dies war jetzt ein kleines Beispiel, wie ein standalone Emulator mit den Controllern umgeht. Für die anderen Emulatoren müsst ihr ggf. mal in die mitgelieferte Dokumentation schauen. Ich plane nicht im Detail auf alle standalone Systeme einzugehen.

 

Joysticks / Pads für bis zu 8 Spieler
Wollt ihr nur alleine spielen, dann sollten die eben gemachten Einstellungen bzw. die mitgelieferten Configdateien schon reichen. Möchtet ihr aber mit mehreren Spielern gleichzeitig daddeln oder über den Controller Sonderfunktionen auslösen, dann müssen wir eine Configdatei bearbeiten. Von RetroArch werden übrigens bis zu 8 Spieler unterstützt. Ob tatsächlich alle möglich sind, hängt dann natürlich vom jeweiligen Emulator und dem Spiel ab! Ich zeige hier mal, wie man zwei verschiedene Eingabegeräte (XBox360-Pad & Speedlink Competition Pro USB) für Spieler 1 & 2 einrichten kann.

Verlasst ggf. die EmulationStation und wechselt mit cd /opt/retropie/emulators/retroarch das Verzeichnis (denkt an die <TAB>Taste, die erleichtert diese langen Eingaben erheblich!). Hier findet ihr das Programm retroarch-joyconfig,

RetroPieV26_027es ist das selbe Programm, dass auch eben vom Script ausgeführt wurde!

Mit diesem Hilfsmittel können wir nun ganz einfach unsere benötigten Einstellungen ermitteln. Schließt jetzt alle Controller an, die ihr einrichten möchtet und gebt dann die folgende Anweisung ein: sudo ./retroarch-joyconfig -o player1.cfg -p 1 -j 0 -t 5. Die Parameter haben folgende Bedeutung:

-o <Output | Ausgabedatei hier player1.cfg>
-p <Player | Nr. des Spielers beginnend mit 1; mögliche Werte 1-8>
-j <Joystick | Nr. des Controllers beginnend mit 0>
-t <Timeout | nach wieviel Sekunden soll die Taste als unbelegt gelten>

Sobald ihr die Anweisung bestätigt habt, kommt wieder die von oben bekannte Abfrage der Tasten. Achtet auf den angezeigten Namen des Controllers, dadurch seht ihr welcher gerade abgefragt wird.

Der XBox-Controller wird abgefragt.
Der XBox-Controller wird abgefragt.

Nun könnt ihr für alle benötigten Spieler eine Datei anlegen. Für den zweiten sieht die Anweisung dann z. B. so aus sudo ./retroarch-joyconfig -o player2.cfg -p 2 -j 1 -t 5. Achtet darauf, dass ihr für -p und -j die korrekten Werte für den nächsten Spieler und Joystick / Controller verwendet. Da ich den Microsoft-Wireless-Receiver verwende, der 4 Pads unterstützt, hat mein Competition Pro die Joystick-Nr. 4 (die Zählung beginnt mit 0!).

Joystick-Nr. 5 für Spieler 2
Joystick-Nr. 5 für Spieler 2

Nun sind unsere Controllereinstellungen in den player[X].cfg Dateien gespeichert.

RetroPieV26_030Sobald ihr alle Dateien erstellt habt, wechseln wir mit cd /opt/retropie/configs/all das Verzeichnis.

Wir befinden uns hier in einem sehr wichtigen Verzeichnis! Unter /opt/retropie/configs/all werden in der Datei retroarch.cfg die standard Einstellungen für die RetroArch-Emulatoren gespeichert!

Auf die Werte in dieser Datei fällt RetroArch immer dann zurück, wenn für den einzelnen Emulator keine eigenen Einstellungen vorliegen. Evtl. fehlt euch die Berechtigung, um die Datei retroarch.cfg zu bearbeiten. Hebt daher zur Sicherheit die Zugriffsbeschänkungen mit sudo chmod 777 retroarch.cfg auf. Für den Fall der Fälle, sollten wir uns jetzt noch mit sudo cp retroarch.cfg ./retroarch.bak ein Backup der Datei erstellen.

retroarch.cfg

Mini-Exkus: nano
Ich benutze nano als Texteditor, um mal schnell etwas in den Configdateien zu ändern. Öffnet eine Datei einfach über [sudo] nano <Dateiname>. Falls ihr Root-Rechte braucht, stellt einfach ein sudo voran. Dann könnt ihr den Text bearbeiten. Zum Beenden drückt <STRG> + <X>. Falls ihr etwas geändert habt, kommt die Abfrage, ob ihr speichern möchtet. Sollte das zutreffen, drückt <Y>es und bestätigt den vorgeschlagenen Dateinamen mit <ENTER>. Weitere Funktionen findet ihr am unteren Bildschirmrand oder mit <STRG> + <G> in der Hilfe.

Werft mal mit nano retroarch.cfg einen Blick in die Datei und blättert ganz nach unten.

Die orignal retroarch.cfg
Die orignal retroarch.cfg

(Nicht vergessen mit <STRG><X> könnt ihr den Editor wieder verlassen!)

Nur zur Info (ist nicht wirklich wichtig):
In der Datei findet ihr auch die Zeile joypad_autoconfig_dir = /opt/retropie/emulators/retroarch/configs/. Diese hat bisher dafür gesorgt, dass unser Controller nach der ‚schnellen‘ Einrichtung über 317 Register RetroArch controller funktioniert hat. In diesem Verzeichnis findet ihr auch die mitgelieferten Configdateien. Wenn in der retroarch.cfg keine Controller-Einstellungen zu finden sind, wird im Verzeichnis, das hinter joypad_autoconfig_dir angegebenen ist, geschaut, ob es eine passende Configdatei gibt. Der Name der Datei entspricht dabei dem USB-Namen, den das System für den Controller vergeben hat. Er stand auch am Schluß der Einrichtung in der Hinweisbox. Der Schalter joypad_autoconfig_dir wird aber nur beachtet, wenn auch input_autodetect_enable auf true gesetzt ist!

Der Competition PRO wurde unter obigem Namen gespeichert
Der Competition PRO wurde unter obigem Namen gespeichert

Im oben erwähnten Verzeichnis liegt nun genau diese Datei und natürlich auch die mitgelieferten Configdateien.

Die gespeicherten Controller-Einstellungen.
Die gespeicherten Controller-Einstellungen.


Kontrolliert noch mal, ob ihr wirklich im richtigen Verzeichnis /opt/retropie/configs/all steht.. Jetzt fügen wir nämlich unsere ermittelten Werte einfach zur retroarch.cfg hinzu.

Dies geht mit dem Befehl:

sudo cat /opt/retropie/emulators/retroarch/player*.cfg >> retroarch.cfg

(Alles in einer Zeile und die <TAB>-Taste ist wieder sehr nützlich!)

Vergleicht jetzt mal den Inhalt der retroarch.cfg mit dem von eben.

Am Ende findet ihr unsere Controller-Einstellungen (hier nur ein Auszug)
Am Ende stehen unsere Controller-Einstellungen (hier nur ein Auszug)

Am Ende der Datei findet ihr jetzt die oben ermittelten Einstellungen.

 

Wer eher an der Maus hängt (Nein! Nicht die Kleine auf dem Sofa neben euch 😉 ), wird jetzt wohl etwas enttäuscht. Man kann nicht mehr mit startx den graphischen Desktop öffnen und dann ‚Windows-Like‘ die Dateien editieren. Um das RetroPie-Image zu verkleinern, wurden alle unnötigen Komponenten entfernt.

 

Nachdem ihr nano bzw. den Desktop wieder verlassen habt, startet die EmulationStation (z. B. durch die Eingabe von emulationstation) wieder. Spielt ihr nun eine Partie Mario Bros. auf dem NES, dann könnt ihr ab jetzt auch den 2-Spieler-Modus mit zwei Controllern zocken.

Mario Bros. (hier mit Bild & Text)
Mario Bros. im Menü der EmulationStation (hier mit Bild & Text)
Der 2-Spielermodus mit zwei Controllern.
Der 2-Spielermodus mit zwei Controllern.

 

Sonderfunktionen festlegen
Wollt ihr möglichst auf die Tastatur verzichten, dann wäre es doch hilfreich, wenn ihr den Emulator auch über den Controller beenden könntet. Dies geht tatsächlich! Verlasst dazu mal wieder die EmulationStation und wechselt ggf. das Verzeichnis cd /opt/retropie/configs/all. Öffnet die Configdatei mit nano retroarch.cfg und fügt am Schluß die folgenden Zeilen ein.

Achtet dabei ganz genau auf die Schreibweise! Schon ein Verzicht auf die Leerzeichen vor und hinter dem =, kann (wie ich leidvoll feststellen mußte) zu Problemen führen!!

Da man bestimmt nicht direkt aus dem Emulator fliegen möchte, nur weil man im Eifer des Gefechts ausversehen auf den falschen Knopf gekommen ist, sollten wir auch noch einen sog. Hotkey festlegen. Dadurch lassen sich diese Sonderfunktionen nur noch auslösen, wenn man den Hotkey plus der entsprechenden Taste drückt. Ich verwende hier die Tastennummern des kabellosen XBox360-Controllers, ihr könnt die von euch gewünschten / benötigten Nummern der Tasten aus der oben erstellen player<X>.cfg, der retroarch.cfg oder mit retroarch-joyconfig heraussuchen.

 

Mein Hotkey ist die GUIDE-Taste:

input_enable_hotkey_btn = "8"

Drücke ich dazu zusätzlich BACK, dann soll der Emulator verlassen werden.

input_exit_emulator_btn = "6"

Bei GUIDE + A möchte ich den Emulator pausieren.

input_pause_toggle_btn = "0"

Mit GUIDE + START möchte ich das RetroArch-Menü öffnen.

input_menu_toggle_btn = "7"

Verlasst nano mit <STRG> + <X>, antwortet auf die Frage, ob ihr speichern möchtet mit <Y>es und bestätigt abschließend den vorgeschlagenen Dateinamen mit <ENTER>.

## Skeleton config file for RetroArch

# Save all save files (*.srm) to this directory. This includes related files like .bsv, .rtc, .psrm, etc ...
# This will be overridden by explicit command line options.
# savefile_directory =

# Save all save states (*.state) to this directory.
# This will be overridden by explicit command line options.
# savestate_directory =

# If set to a directory, Content which is temporarily extracted
# will be extracted to this directory.
# extraction_directory =

# Save all input remapping files to this directory.
# input_remapping_directory =

# Save all playlist files to this directory.
# playlist_directory =

# If set to a directory, the content history playlist will be saved
# to this directory.
# content_history_dir =

# Automatically saves a savestate at the end of RetroArch's lifetime.
# The path is $SRAM_PATH.auto.
# RetroArch will automatically load any savestate with this path on startup if savestate_auto_load is set.
# savestate_auto_save = false
# savestate_auto_load = true

# Load libretro from a dynamic location for dynamically built RetroArch.
# This option is mandatory.

# Path to a libretro implementation.
# libretro_path = "/path/to/libretro.so"

# A directory for where to search for libretro core implementations.
# libretro_directory =

# A directory for where to search for libretro core information.
# libretro_info_path =

# Sets mode for archived files in file browser.
# 0 = Ask, 1 = Load Archive, 2 = Open Archive
# archive_mode = 0

# Sets log level for libretro cores (GET_LOG_INTERFACE).
# If a log level issued by a libretro core is below libretro_log_level, it is ignored.
# DEBUG logs are always ignored unless verbose mode is activated (--verbose).
# DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3.
# libretro_log_level = 0

# Enable or disable verbosity level of frontend.
# log_verbosity = false

# If this option is enabled, every content file loaded in RetroArch will be
# automatically added to a history list.
# history_list_enable = true

# Enable or disable RetroArch performance counters
# perfcnt_enable = false

# Path to core options config file.
# This config file is used to expose core-specific options.
# It will be written to by RetroArch.
# A default path will be assigned if not set.
core_options_path = /opt/retropie/configs/all/retroarch-core-options.cfg

# Path to content load history file.
# RetroArch keeps track of all content loaded in the menu and from CLI directly for convenient quick loading.
# A default path will be assigned if not set.
# game_history_path =

# Number of entries that will be kept in content history file.
# game_history_size = 100

# Sets the "system" directory.
# Implementations can query for this directory to load BIOSes, system-specific configs, etc.
system_directory = /home/pi/RetroPie/BIOS

# Sets start directory for menu content browser.
# rgui_browser_directory =

# Content directory. Interacts with RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY.
# Usually set by developers who bundle libretro/RetroArch apps to point to assets.
# content_directory =

# Assets directory. This location is queried by default when menu interfaces try to look for
# loadable assets, etc.
# assets_directory =

# Sets start directory for menu config browser.
# rgui_config_directory =

# Show startup screen in menu.
# Is automatically set to false when seen for the first time.
# This is only updated in config if config_save_on_exit is set to true, however.
# rgui_show_start_screen = true

# Flushes config to disk on exit. Useful for menu as settings can be modified.
# Overwrites the config. #include's and comments are not preserved.
config_save_on_exit = false

# Load up a specific config file based on the core being used.
# core_specific_config = false

#### Video

# Video driver to use. "gl", "xvideo", "sdl"
# video_driver = "gl"

# Which OpenGL context implementation to use.
# Possible ones for desktop are: glx, x-egl, kms-egl, sdl-gl, wgl.
# By default, tries to use first suitable driver.
# video_context_driver =

# Windowed x resolution scale and y resolution scale
# (Real x res: base_size * xscale * aspect_ratio, real y res: base_size * yscale)
# video_scale = 3.0

# Fullscreen resolution. Resolution of 0 uses the resolution of the desktop.
# video_fullscreen_x = 0
# video_fullscreen_y = 0

# Start in fullscreen. Can be changed at runtime.
# video_fullscreen = false

# If fullscreen, prefer using a windowed fullscreen mode.
# video_windowed_fullscreen = true

# Which monitor to prefer. 0 (default) means no particular monitor is preferred, 1 and up (1 being first monitor),
# suggests RetroArch to use that particular monitor.
# video_monitor_index = 0

# Forcibly disable composition. Only works in Windows Vista/7 for now.
# video_disable_composition = false

# Video vsync.
# video_vsync = true

# Forcibly disable sRGB FBO support. Some Intel OpenGL drivers on Windows
# have video problems with sRGB FBO support enabled.
# video_force_srgb_disable = false

# Attempts to hard-synchronize CPU and GPU. Can reduce latency at cost of performance.
# video_hard_sync = false

# Sets how many frames CPU can run ahead of GPU when using video_hard_sync.
# Maximum is 3.
# video_hard_sync_frames = 0

# Sets how many milliseconds to delay after VSync before running the core.
# Can reduce latency at cost of higher risk of stuttering.
# Maximum is 15.
# video_frame_delay = 0

# Inserts a black frame inbetween frames.
# Useful for 120 Hz monitors who want to play 60 Hz material with eliminated ghosting.
# video_refresh_rate should still be configured as if it is a 60 Hz monitor (divide refresh rate by 2).
# video_black_frame_insertion = false

# Use threaded video driver. Using this might improve performance at possible cost of latency and more video stuttering.
video_threaded = true

# Use a shared context for HW rendered libretro cores.
# Avoids having to assume HW state changes inbetween frames.
# video_shared_context = false

# Smoothens picture with bilinear filtering. Should be disabled if using pixel shaders.
video_smooth = false

# Forces rendering area to stay equal to content aspect ratio or as defined in video_aspect_ratio.
# video_force_aspect = true

# Only scales video in integer steps.
# The base size depends on system-reported geometry and aspect ratio.
# If video_force_aspect is not set, X/Y will be integer scaled independently.
# video_scale_integer = false

# A floating point value for video aspect ratio (width / height).
# If this is not set, aspect ratio is assumed to be automatic.
# Behavior then is defined by video_aspect_ratio_auto.
# video_aspect_ratio =

# If this is true and video_aspect_ratio is not set,
# aspect ratio is decided by libretro implementation.
# If this is false, 1:1 PAR will always be assumed if video_aspect_ratio is not set.
video_aspect_ratio_auto = true

# Forces cropping of overscanned frames.
# Exact behavior of this option is implementation specific.
# video_crop_overscan = true 

# Path to shader. Shader can be either Cg, CGP (Cg preset) or GLSL, GLSLP (GLSL preset)
# video_shader = "/path/to/shader.{cg,cgp,glsl,glslp}"

# Load video_shader on startup.
# Other shaders can still be loaded later in runtime.
# video_shader_enable = false

# Defines a directory where shaders (Cg, CGP, GLSL) are kept for easy access.
video_shader_dir = /opt/retropie/emulators/retroarch/shader/

# CPU-based video filter. Path to a dynamic library.
# video_filter =

# Defines a directory where CPU-based video filters are kept.
# video_filter_dir =

# Path to a font used for rendering messages. This path must be defined to enable fonts.
# Do note that the _full_ path of the font is necessary!
# video_font_path = 

# Size of the font rendered.
# video_font_size = 32

# Enable usage of OSD messages.
# video_font_enable = true

# Offset for where messages will be placed on screen. Values are in range 0.0 to 1.0 for both x and y values. 
# [0.0, 0.0] maps to the lower left corner of the screen.
# video_message_pos_x = 0.05
# video_message_pos_y = 0.05

# Color for message. The value is treated as a hexadecimal value.
# It is a regular RGB hex number, i.e. red is "ff0000".
# video_message_color = ffffff

# Video refresh rate of your monitor.
# Used to calculate a suitable audio input rate.
# video_refresh_rate = 59.95

# Allows libretro cores to set rotation modes.
# Setting this to false will honor, but ignore this request.
# This is useful for vertically oriented content where one manually rotates the monitor.
# video_allow_rotate = true

# Forces a certain rotation of the screen.
# The rotation is added to rotations which the libretro core sets (see video_allow_rotate).
# The angle is <value> * 90 degrees counter-clockwise.
# video_rotation = 0

#### Audio

# Enable audio.
# audio_enable = true

# Mutes audio.
# audio_mute_enable = false

# Audio output samplerate.
# audio_out_rate = 48000

# Audio resampler backend. Which audio resampler to use.
# Default will use "sinc".
# audio_resampler =

# Audio driver backend. Depending on configuration possible candidates are: alsa, pulse, oss, jack, rsound, roar, openal, sdl, xaudio.
# audio_driver =

# Override the default audio device the audio_driver uses. This is driver dependant. E.g. ALSA wants a PCM device, OSS wants a path (e.g. /dev/dsp), Jack wants portnames (e.g. system:playback1,system:playback_2), and so on ...
# audio_device =

# Audio DSP plugin that processes audio before it's sent to the driver. Path to a dynamic library.
# audio_dsp_plugin =

# Directory where DSP plugins are kept.
# audio_filter_dir =

# Will sync (block) on audio. Recommended.
# audio_sync = true

# Desired audio latency in milliseconds. Might not be honored if driver can't provide given latency.
# audio_latency = 64

# Enable audio rate control.
# audio_rate_control = true

# Controls audio rate control delta. Defines how much input rate can be adjusted dynamically.
# Input rate = in_rate * (1.0 +/- audio_rate_control_delta)
# audio_rate_control_delta = 0.005

# Controls maximum audio timing skew. Defines the maximum change in input rate.
# Input rate = in_rate * (1.0 +/- max_timing_skew)
# audio_max_timing_skew = 0.05

# Audio volume. Volume is expressed in dB.
# 0 dB is normal volume. No gain will be applied.
# Gain can be controlled in runtime with input_volume_up/input_volume_down.
# audio_volume = 0.0

#### Overlay

# Defines a directory where overlays are kept for easy access.
# overlay_directory =

# Enable or disable the current overlay.
# input_overlay_enable = true


# Path to input overlay
# input_overlay =

# Overlay opacity
# input_overlay_opacity = 1.0

# Overlay scale
# input_overlay_scale = 1.0

#### OSK (Onscreen Keyboard) Overlay

# Defines a directory where overlays are kept for easy access.
# osk_overlay_directory =

# Enable OSK overlay.
# input_osk_overlay_enable = true

# Path to OSK overlay
# input_osk_overlay =

# OSK Overlay opacity
# input_osk_overlay_opacity = 1.0

# OSK Overlay scale
# input_osk_overlay_scale = 1.0

#### Input

# Input driver. Depending on video driver, it might force a different input driver.
# input_driver = sdl

# Joypad driver. (Valid: linuxraw, sdl, dinput)
# input_joypad_driver =

# Path to input remapping file.
# input_remapping_path =

# If enabled, overrides the input binds with the remapped binds set for the current core.
# input_remap_binds_enable = true

# Maximum amount of users supported by RetroArch.
# input_max_users = 16

# Keyboard layout for input driver if applicable (udev/evdev for now).
# Syntax is either just layout (e.g. "no"), or a layout and variant separated with colon ("no:nodeadkeys").
# input_keyboard_layout =

# Defines axis threshold. Possible values are [0.0, 1.0]
# input_axis_threshold = 0.5

# Enable input auto-detection. Will attempt to autoconfigure
# joypads, Plug-and-Play style.
input_autodetect_enable = true

# Show the input descriptors set by the core instead of the
# default ones.
# input_descriptor_label_show = true

# Hide input descriptors that were not set by the core.
# input_descriptor_hide_unbound = false

# Directory for joypad autoconfigs.
# If a joypad is plugged in, that joypad will be autoconfigured if a config file
# corresponding to that joypad is present in joypad_autoconfig_dir.
# Input binds which are made explicit (input_playerN_*_btn/axis) will take priority over autoconfigs.
# Autoconfigs can be created with retroarch-joyconfig, manually, or with a frontend.
# Requires input_autodetect_enable to be enabled.
joypad_autoconfig_dir = /opt/retropie/emulators/retroarch/configs/

# Sets which libretro device is used for a user.
# Devices are indentified with a number.
# This is normally saved by the menu.
# Device IDs are found in libretro.h.
# These settings are overridden by explicit command-line arguments which refer to input devices.
# None: 0
# Joypad (RetroPad): 1
# Mouse: 2
# Keyboard: 3
# Generic Lightgun: 4
# Joypad w/ Analog (RetroPad + Analog sticks): 5
# Multitap (SNES specific): 257
# Super Scope (SNES specific): 260
# Justifier (SNES specific): 516
# Justifiers (SNES specific): 772

# input_libretro_device_p1 =
# input_libretro_device_p2 =
# input_libretro_device_p3 =
# input_libretro_device_p4 =
# input_libretro_device_p5 =
# input_libretro_device_p6 =
# input_libretro_device_p7 =
# input_libretro_device_p8 =

# Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_"
# is for keypad keys):
#
#   left, right, up, down, enter, kp_enter, tab, insert, del, end, home,
#   rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus,
#   f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12,
#   num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown,
#   keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9,
#   period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock,
#   tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket,
#   backslash, rightbracket, kp_period, kp_equals, rctrl, ralt
#
# Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely, 
# rather than relying on a default.
input_player1_a = x
input_player1_b = z
input_player1_y = a
input_player1_x = s
input_player1_start = enter
input_player1_select = rshift
input_player1_l = q
input_player1_r = w
input_player1_left = left
input_player1_right = right
input_player1_up = up
input_player1_down = down
# input_player1_l2 =
# input_player1_r2 =
# input_player1_l3 =
# input_player1_r3 =

# Two analog sticks (DualShock-esque).
# Bound as usual, however, if a real analog axis is bound,
# it can be read as a true analog.
# Positive X axis is right, Positive Y axis is down.
# input_player1_l_x_plus =
# input_player1_l_x_minus =
# input_player1_l_y_plus =
# input_player1_l_y_minus =
# input_player1_r_x_plus =
# input_player1_r_x_minus =
# input_player1_r_y_plus =
# input_player1_r_y_minus =

# If desired, it is possible to override which joypads are being used for user 1 through 8.
# First joypad available is 0.
# input_player1_joypad_index = 0
# input_player2_joypad_index = 1
# input_player3_joypad_index = 2
# input_player4_joypad_index = 3
# input_player5_joypad_index = 4
# input_player6_joypad_index = 5
# input_player7_joypad_index = 6
# input_player8_joypad_index = 7

# Joypad buttons.
# Figure these out by using RetroArch-Phoenix or retroarch-joyconfig.
# You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction. 
# E.g. "h0up"
# input_player1_a_btn =
# input_player1_b_btn =
# input_player1_y_btn =
# input_player1_x_btn =
# input_player1_start_btn =
# input_player1_select_btn =
# input_player1_l_btn =
# input_player1_r_btn =
# input_player1_left_btn =
# input_player1_right_btn =
# input_player1_up_btn =
# input_player1_down_btn =
# input_player1_l2_btn =
# input_player1_r2_btn =
# input_player1_l3_btn =
# input_player1_r3_btn =

# Axis for RetroArch D-Pad. 
# Needs to be either '+' or '-' in the first character signaling either positive or negative direction of the axis, then the axis number. 
# Do note that every other input option has the corresponding _btn and _axis binds as well; they are omitted here for clarity.
# input_player1_left_axis =
# input_player1_right_axis =
# input_player1_up_axis =
# input_player1_down_axis =

# Holding the turbo while pressing another button will let the button enter a turbo mode
# where the button state is modulated with a periodic signal.
# The modulation stops when the button itself (not turbo button) is released.
# input_player1_turbo =

# Describes the period and how long of that period a turbo-enabled button should behave.
# Numbers are described in frames.
# input_turbo_period = 6
# input_turbo_duty_cycle = 3

# This goes all the way to user 8 (*_player2_*, *_player3_*, etc), but omitted for clarity.
# All input binds have corresponding binds for keyboard (none), joykeys (_btn) and joyaxes (_axis) as well.

# Toggles fullscreen.
# input_toggle_fullscreen = f

# Saves state.
# input_save_state = f2
# Loads state.
# input_load_state = f4

# State slots. With slot set to 0, save state name is *.state (or whatever defined on commandline).
# When slot is != 0, path will be $path%d, where %d is slot number.
# input_state_slot_increase = f7
# input_state_slot_decrease = f6

# Toggles between fast-forwarding and normal speed.
# input_toggle_fast_forward = space

# Hold for fast-forward. Releasing button disables fast-forward.
# input_hold_fast_forward = l

# Key to exit RetroArch cleanly. 
# Killing it in any hard way (SIGKILL, etc) will terminate RetroArch without saving RAM, etc.
# On Unix-likes, SIGINT/SIGTERM allows a clean deinitialization.
input_exit_emulator = escape

# Applies next and previous shader in directory.
input_shader_next = m
input_shader_prev = n

# Hold button down to rewind. Rewinding must be enabled.
input_rewind = r

# Toggle between recording and not.
# input_movie_record_toggle = o

# Toggle between paused and non-paused state
# input_pause_toggle = p

# Frame advance when content is paused
# input_frame_advance = k

# Reset the content.
# input_reset = h

# Cheats.
# input_cheat_index_plus = y
# input_cheat_index_minus = t
# input_cheat_toggle = u

# Mute/unmute audio
# input_audio_mute = f9

# Take screenshot
# input_screenshot = f8

# Netplay flip users.
# input_netplay_flip_players = i

# Hold for slowmotion.
# input_slowmotion = e

# Enable other hotkeys.
# If this hotkey is bound to either keyboard, joybutton or joyaxis,
# all other hotkeys will be disabled unless this hotkey is also held at the same time.
# This is useful for RETRO_KEYBOARD centric implementations
# which query a large area of the keyboard, where it is not desirable
# that hotkeys get in the way.

# Alternatively, all hotkeys for keyboard could be disabled by the user.
# input_enable_hotkey_btn =

# Increases audio volume.
# input_volume_up = kp_plus
# Decreases audio volume.
# input_volume_down = kp_minus

# Toggles to next overlay. Wraps around.
# input_overlay_next =

# Toggles eject for disks. Used for multiple-disk content.
# input_disk_eject_toggle =

# Cycles through disk images. Use after ejecting.
# Complete by toggling eject again.
# input_disk_next =

# Toggles menu.
# input_menu_toggle = f1

# Toggles mouse grab. When mouse is grabbed, RetroArch hides the mouse,
# and keeps the mouse pointer inside the window to allow relative mouse input
# to work better.
# input_grab_mouse_toggle = f11

#### Menu

# Menu driver to use. "rgui", "lakka", etc. 
# menu_driver = "rgui"

# If enabled, the libretro core will keep running in the background when we
# are in the menu.
# menu_pause_libretro = false

# Enable mouse input inside the menu.
# menu_mouse_enable = false

# Shows current date and/or time inside menu.
# menu_timedate_enable = true

# Shows current core inside menu.
# menu_core_enable = true

# Throttle the menu to ~60 FPS instead of using v-sync. Useful for 120+Hz monitors.
# menu_throttle = false

# Path to a .png image to set as menu wallpaper.
# menu_wallpaper =

# Wrap-around toe beginning and/or end if boundary of list reached horizontally
# menu_navigation_wraparound_horizontal_enable = false

# Wrap-around to beginning and/or end if boundary of list reached vertically
# menu_navigation_wraparound_vertical_enable = false

# Filter files being show in 'Load Content' by supported extensions
# menu_navigation_browser_filter_supported_extensions_enable = true

# Collapse subgroup settings into main group to create one big listing of settings
# per category.
# menu_collapse_subgroups_enable = false

#### UI

# Suspends the screensaver if set to true. Is a hint that does not necessarily have to be honored
# by video driver.
# suspend_screensaver_enable  = true

#### Camera

# Override the default camera device the camera driver uses. This is driver dependant.
# camera_device =

# Override the default privacy permission for cores that want to access camera services. Is "false" by default.
# camera_allow = false

#### Location

# Override the default privacy permission for cores that want to access location services. Is "false" by default.
# location_allow = false

#### Core Updater

# URL to core update directory on buildbot.
# core_updater_buildbot_url = "http://buildbot.libretro.com"

# URL to assets update directory on buildbot.
# core_updater_buildbot_assets_url = "http://buildbot.libretro.com/assets/"

# Automatically extract archives that the cores are contained in to the libretro cores directory.
# core_updater_auto_extract_archive = true

#### Network

# When being client over netplay, use keybinds for user 1.
# netplay_client_swap_input = false

# The username of the person running RetroArch. This will be used for playing online, for instance.
# netplay_nickname = 

# The amount of delay frames to use for netplay. Increasing this value will increase
# performance, but introduce more latency.
# netplay_delay_frames = 0

# Netplay mode for the current user.
# false is Server, true is Client.
# netplay_mode = false

# Enable or disable spectator mode for the user during netplay.
# netplay_spectator_mode_enable = false

# The IP Address of the host to connect to.
# netplay_ip_address = 

# The port of the host IP Address. Can be either a TCP or an UDP port.
# netplay_ip_port = 55435

#### Misc

# Enable rewinding. This will take a performance hit when playing, so it is disabled by default.
rewind_enable = false

# Rewinding buffer size in megabytes. Bigger rewinding buffer means you can rewind longer.
# The buffer should be approx. 20MB per minute of buffer time.
rewind_buffer_size = 10

# Rewind granularity. When rewinding defined number of frames, you can rewind several frames at a time, increasing the rewinding speed.
rewind_granularity = 2

# Pause gameplay when window focus is lost.
# pause_nonactive = true

# Autosaves the non-volatile SRAM at a regular interval. This is disabled by default unless set otherwise.
# The interval is measured in seconds. A value of 0 disables autosave.
# autosave_interval =

# Path to content database directory.
# content_database_path =

# Path to cheat database directory.
# cheat_database_path =

# Path to XML cheat config, a file which keeps track of which
# cheat settings are used for individual games.
# If the file does not exist, it will be created.
# cheat_settings_path =

# Directory to dump screenshots to.
# screenshot_directory =

# Records video after CPU video filter.
# video_post_filter_record = false

# Records output of GPU shaded material if available.
# video_gpu_record = false

# Screenshots output of GPU shaded material if available.
video_gpu_screenshot = true

# Block SRAM from being overwritten when loading save states.
# Might potentially lead to buggy games.
# block_sram_overwrite = false

# When saving a savestate, save state index is automatically increased before
# it is saved.
# Also, when loading content, the index will be set to the highest existing index.
# There is no upper bound on the index.
# savestate_auto_index = false

# Slowmotion ratio. When slowmotion, content will slow down by factor.
# slowmotion_ratio = 3.0

# The maximum rate at which content will be run when using fast forward. (E.g. 5.0 for 60 fps content => 300 fps cap).
# RetroArch will go to sleep to ensure that the maximum rate will not be exceeded.
# Do not rely on this cap to be perfectly accurate.
# fastforward_ratio = 1.0

# Setting this to false equals no FPS cap and will override the fastforward_ratio value.
# fastforward_ratio_throttle_enable = false

# Enable stdin/network command interface.
# network_cmd_enable = false
# network_cmd_port = 55355
# stdin_cmd_enable = false

input_enable_hotkey = nul
input_player1_joypad_index = "0"
input_player1_b_btn = "1"
input_player1_y_btn = "3"
input_player1_select_btn = "6"
input_player1_start_btn = "7"
input_player1_up_btn = "13"
input_player1_down_btn = "14"
input_player1_left_btn = "11"
input_player1_right_btn = "12"
input_player1_a_btn = "0"
input_player1_x_btn = "2"
input_player1_l_btn = "4"
input_player1_r_btn = "5"
input_player1_l2_axis = "+2"
input_player1_r2_axis = "+5"
input_player1_l3_btn = "9"
input_player1_r3_btn = "10"
input_player1_l_x_plus_axis = "+0"
input_player1_l_x_minus_axis = "-0"
input_player1_l_y_plus_axis = "+1"
input_player1_l_y_minus_axis = "-1"
input_player1_r_x_plus_axis = "+3"
input_player1_r_x_minus_axis = "-3"
input_player1_r_y_plus_axis = "+4"
input_player1_r_y_minus_axis = "-4"
input_player2_joypad_index = "4"
input_player2_b_btn = "1"
input_player2_select_btn = "3"
input_player2_start_btn = "2"
input_player2_up_axis = "-1"
input_player2_down_axis = "+1"
input_player2_left_axis = "-0"
input_player2_right_axis = "+0"
input_player2_a_btn = "0"

#Hotkey
input_enable_hotkey_btn = "8"

#Sondertasten
input_exit_emulator_btn = "6"
input_pause_toggle_btn = "0"
input_menu_toggle_btn = "7"

Mit der Raute # könnt ihr Kommentare ins Script schreiben oder einen Schalter deaktivieren, indem ihr an die erste Stelle der Zeile eine Raute schreibt. Startet nun wieder ein Spielchen (es muss natürlich ein RetroArch-Emulator sein) und ihr könnt die eben zugewiesenen Tasten verwenden. Mit GUIDE + START erscheint z. B. das RetroArch-Menü.

Das RetroArch-Menü
Das RetroArch-Menü

Das waren jetzt nur vier Sonderfunktionen, es gibt aber noch einen ganzen Haufen mehr! Auch zusätzliche Einstellungen gibt es massenhaft. Ihr könnt z. B. übers Pad das Laden & Speichern von Snapshots oder die Aufnahme von Screenshots steuern.

Den aktuellen Emulatorstatus, könnt ihr nach hinzufügen der folgdenden Zeilen zur retroarch.cfg, mit L1 speichern und mit L2 laden (immer in Kombination mit dem Hotkey GUIDE).

input_save_state_btn = "4"
input_load_state_btn = "5"

Wenn ihr lieber mit einem der analogen Sticks, statt dem D-Pad, spielt, dann könnt ihr dies durch die Zeile

input_player1_analog_dpad_mode = "1"

erreichen. Hier für den ersten Spieler 0 = keiner | 1 = linker | 2 = rechter Stick. Das D-Pad geht dann parallel immer noch.

Im folgenden Block findet ihr einen ganzen Haufen 😉 (oder so gar alle?) Schalter.

input_axis_threshold = "0.500000"
load_dummy_on_core_shutdown = "true"
fps_show = "false"
libretro_path = "/opt/retropie/emulatorcores/pocketsnes-libretro/libretro.so"
libretro_directory = ""
libretro_info_path = ""
cheat_database_path = ""
rewind_enable = "false"
audio_latency = "64"
audio_sync = "true"
audio_block_frames = "0"
rewind_granularity = "2"
video_shader = "/opt/retropie/emulators/RetroArch/shader/snes_phosphor.glslp"
video_shader_enable = "false"
video_aspect_ratio = "1.330000"
video_windowed_fullscreen = "true"
video_xscale = "3.000000"
autosave_interval = "0"
video_yscale = "3.000000"
video_crop_overscan = "true"
video_scale_integer = "false"
video_smooth = "false"
video_threaded = "true"
video_shared_context = "false"
video_fullscreen = "false"
video_refresh_rate = "59.950001"
video_monitor_index = "0"
video_fullscreen_x = "0"
video_fullscreen_y = "0"
video_driver = "gl"
menu_driver = "rgui"
video_vsync = "true"
video_hard_sync = "false"
video_hard_sync_frames = "0"
video_black_frame_insertion = "false"
video_disable_composition = "false"
pause_nonactive = "false"
video_swap_interval = "1"
video_gpu_screenshot = "true"
video_rotation = "0"
screenshot_directory = "default"
aspect_ratio_index = "4"
audio_device = ""
audio_dsp_plugin = ""
audio_rate_control = "true"
audio_rate_control_delta = "0.005000"
audio_driver = "alsathread"
audio_out_rate = "48000"
video_font_size = "32.000000"
video_font_enable = "true"
system_directory = "~/RetroPie/roms/../BIOS"
extraction_directory = ""
audio_resampler = "sinc"
savefile_directory = "default"
savestate_directory = "default"
video_shader_dir = "/opt/retropie/emulators/RetroArch/shader/"
video_filter = ""
video_filter_dir = "default"
audio_filter_dir = "default"
content_directory = "default"
assets_directory = "default"
rgui_browser_directory = "default"
rgui_config_directory = "default"
rgui_show_start_screen = "false"
game_history_path = ""
game_history_size = "100"
joypad_autoconfig_dir = "/opt/retropie/emulators/RetroArch/configs/"
input_autodetect_enable = "true"
overlay_directory = "default"
input_overlay = ""
input_overlay_enable = "false"
input_overlay_opacity = "0.700000"
input_overlay_scale = "1.000000"
gamma_correction = "false"
triple_buffering_enable = "false"
soft_filter_enable = "false"
flicker_filter_enable = "false"
flicker_filter_index = "0"
soft_filter_index = "0"
current_resolution_id = "0"
custom_viewport_width = "958"
custom_viewport_height = "720"
custom_viewport_x = "161"
custom_viewport_y = "0"
block_sram_overwrite = "false"
savestate_auto_index = "false"
savestate_auto_save = "false"
savestate_auto_load = "true"
fastforward_ratio = "-1.000000"
slowmotion_ratio = "3.000000"
config_save_on_exit = "false"
sound_mode = "0"
state_slot = "0"
netplay_spectator_mode_enable = "false"
netplay_mode = "false"
netplay_nickname = ""
netplay_ip_address = ""
netplay_ip_port = "0"
netplay_delay_frames = "0"
custom_bgm_enable = "false"
input_driver = "udev"
input_joypad_driver = ""
input_keyboard_layout = ""
input_device_p1 = "0"
input_player1_joypad_index = "0"
input_libretro_device_p1 = "1"
input_player1_analog_dpad_mode = "1"
input_device_p2 = "0"
input_player2_joypad_index = "1"
input_libretro_device_p2 = "1"
input_player2_analog_dpad_mode = "0"
input_device_p3 = "0"
input_player3_joypad_index = "2"
input_libretro_device_p3 = "1"
input_player3_analog_dpad_mode = "0"
input_device_p4 = "0"
input_player4_joypad_index = "3"
input_libretro_device_p4 = "1"
input_player4_analog_dpad_mode = "0"
input_device_p5 = "0"
input_player5_joypad_index = "4"
input_libretro_device_p5 = "1"
input_player5_analog_dpad_mode = "0"
input_device_p6 = "0"
input_player6_joypad_index = "5"
input_libretro_device_p6 = "1"
input_player6_analog_dpad_mode = "0"
input_device_p7 = "0"
input_player7_joypad_index = "6"
input_libretro_device_p7 = "1"
input_player7_analog_dpad_mode = "0"
input_device_p8 = "0"
input_player8_joypad_index = "7"
input_libretro_device_p8 = "1"
input_player8_analog_dpad_mode = "0"
input_player1_b = "z"
input_player1_b_btn = "1"
input_player1_b_axis = "nul"
input_player1_y = "a"
input_player1_y_btn = "3"
input_player1_y_axis = "nul"
input_player1_select = "rshift"
input_player1_select_btn = "6"
input_player1_select_axis = "nul"
input_player1_start = "enter"
input_player1_start_btn = "7"
input_player1_start_axis = "nul"
input_player1_up = "up"
input_player1_up_btn = "13"
input_player1_up_axis = "nul"
input_player1_down = "down"
input_player1_down_btn = "14"
input_player1_down_axis = "nul"
input_player1_left = "left"
input_player1_left_btn = "11"
input_player1_left_axis = "nul"
input_player1_right = "right"
input_player1_right_btn = "12"
input_player1_right_axis = "nul"
input_player1_a = "x"
input_player1_a_btn = "0"
input_player1_a_axis = "nul"
input_player1_x = "s"
input_player1_x_btn = "2"
input_player1_x_axis = "nul"
input_player1_l = "q"
input_player1_l_btn = "4"
input_player1_l_axis = "nul"
input_player1_r = "w"
input_player1_r_btn = "5"
input_player1_r_axis = "nul"
input_player1_l2 = "nul"
input_player1_l2_btn = "nul"
input_player1_l2_axis = "+2"
input_player1_r2 = "nul"
input_player1_r2_btn = "nul"
input_player1_r2_axis = "+5"
input_player1_l3 = "nul"
input_player1_l3_btn = "9"
input_player1_l3_axis = "nul"
input_player1_r3 = "nul"
input_player1_r3_btn = "10"
input_player1_r3_axis = "nul"
input_player1_l_x_plus = "nul"
input_player1_l_x_plus_btn = "nul"
input_player1_l_x_plus_axis = "+0"
input_player1_l_x_minus = "nul"
input_player1_l_x_minus_btn = "nul"
input_player1_l_x_minus_axis = "-0"
input_player1_l_y_plus = "nul"
input_player1_l_y_plus_btn = "nul"
input_player1_l_y_plus_axis = "+1"
input_player1_l_y_minus = "nul"
input_player1_l_y_minus_btn = "nul"
input_player1_l_y_minus_axis = "-1"
input_player1_r_x_plus = "nul"
input_player1_r_x_plus_btn = "nul"
input_player1_r_x_plus_axis = "+3"
input_player1_r_x_minus = "nul"
input_player1_r_x_minus_btn = "nul"
input_player1_r_x_minus_axis = "-3"
input_player1_r_y_plus = "nul"
input_player1_r_y_plus_btn = "nul"
input_player1_r_y_plus_axis = "+4"
input_player1_r_y_minus = "nul"
input_player1_r_y_minus_btn = "nul"
input_player1_r_y_minus_axis = "-4"
input_player1_turbo = "nul"
input_player1_turbo_btn = "nul"
input_player1_turbo_axis = "nul"
input_toggle_fast_forward = "space"
input_toggle_fast_forward_btn = "nul"
input_toggle_fast_forward_axis = "nul"
input_hold_fast_forward = "l"
input_hold_fast_forward_btn = "nul"
input_hold_fast_forward_axis = "nul"
input_load_state = "f4"
input_load_state_btn = "nul"
input_load_state_axis = "nul"
input_save_state = "f2"
input_save_state_btn = "nul"
input_save_state_axis = "nul"
input_toggle_fullscreen = "f"
input_toggle_fullscreen_btn = "nul"
input_toggle_fullscreen_axis = "nul"
input_exit_emulator = "escape"
input_exit_emulator_btn = "7"
input_exit_emulator_axis = "nul"
input_state_slot_increase = "f7"
input_state_slot_increase_btn = "nul"
input_state_slot_increase_axis = "nul"
input_state_slot_decrease = "f6"
input_state_slot_decrease_btn = "nul"
input_state_slot_decrease_axis = "nul"
input_rewind = "r"
input_rewind_btn = "nul"
input_rewind_axis = "nul"
input_movie_record_toggle = "o"
input_movie_record_toggle_btn = "nul"
input_movie_record_toggle_axis = "nul"
input_pause_toggle = "p"
input_pause_toggle_btn = "nul"
input_pause_toggle_axis = "nul"
input_frame_advance = "k"
input_frame_advance_btn = "nul"
input_frame_advance_axis = "nul"
input_reset = "h"
input_reset_btn = "nul"
input_reset_axis = "nul"
input_shader_next = "m"
input_shader_next_btn = "nul"
input_shader_next_axis = "nul"
input_shader_prev = "n"
input_shader_prev_btn = "nul"
input_shader_prev_axis = "nul"
input_cheat_index_plus = "y"
input_cheat_index_plus_btn = "nul"
input_cheat_index_plus_axis = "nul"
input_cheat_index_minus = "t"
input_cheat_index_minus_btn = "nul"
input_cheat_index_minus_axis = "nul"
input_cheat_toggle = "u"
input_cheat_toggle_btn = "nul"
input_cheat_toggle_axis = "nul"
input_screenshot = "f8"
input_screenshot_btn = "nul"
input_screenshot_axis = "nul"
input_audio_mute = "f9"
input_audio_mute_btn = "nul"
input_audio_mute_axis = "nul"
input_netplay_flip_players = "i"
input_netplay_flip_players_btn = "nul"
input_netplay_flip_players_axis = "nul"
input_slowmotion = "e"
input_slowmotion_btn = "nul"
input_slowmotion_axis = "nul"
input_enable_hotkey = "nul"
input_enable_hotkey_btn = "8"
input_enable_hotkey_axis = "nul"
input_volume_up = "add"
input_volume_up_btn = "nul"
input_volume_up_axis = "nul"
input_volume_down = "subtract"
input_volume_down_btn = "nul"
input_volume_down_axis = "nul"
input_overlay_next = "nul"
input_overlay_next_btn = "nul"
input_overlay_next_axis = "nul"
input_disk_eject_toggle = "nul"
input_disk_eject_toggle_btn = "nul"
input_disk_eject_toggle_axis = "nul"
input_disk_next = "nul"
input_disk_next_btn = "nul"
input_disk_next_axis = "nul"
input_grab_mouse_toggle = "f11"
input_grab_mouse_toggle_btn = "nul"
input_grab_mouse_toggle_axis = "nul"
input_menu_toggle = "f1"
input_menu_toggle_btn = "nul"
input_menu_toggle_axis = "nul"
input_player2_b = "nul"
input_player2_b_btn = "nul"
input_player2_b_axis = "nul"
input_player2_y = "nul"
input_player2_y_btn = "nul"
input_player2_y_axis = "nul"
input_player2_select = "nul"
input_player2_select_btn = "nul"
input_player2_select_axis = "nul"
input_player2_start = "nul"
input_player2_start_btn = "nul"
input_player2_start_axis = "nul"
input_player2_up = "nul"
input_player2_up_btn = "nul"
input_player2_up_axis = "nul"
input_player2_down = "nul"
input_player2_down_btn = "nul"
input_player2_down_axis = "nul"
input_player2_left = "nul"
input_player2_left_btn = "nul"
input_player2_left_axis = "nul"
input_player2_right = "nul"
input_player2_right_btn = "nul"
input_player2_right_axis = "nul"
input_player2_a = "nul"
input_player2_a_btn = "nul"
input_player2_a_axis = "nul"
input_player2_x = "nul"
input_player2_x_btn = "nul"
input_player2_x_axis = "nul"
input_player2_l = "nul"
input_player2_l_btn = "nul"
input_player2_l_axis = "nul"
input_player2_r = "nul"
input_player2_r_btn = "nul"
input_player2_r_axis = "nul"
input_player2_l2 = "nul"
input_player2_l2_btn = "nul"
input_player2_l2_axis = "nul"
input_player2_r2 = "nul"
input_player2_r2_btn = "nul"
input_player2_r2_axis = "nul"
input_player2_l3 = "nul"
input_player2_l3_btn = "nul"
input_player2_l3_axis = "nul"
input_player2_r3 = "nul"
input_player2_r3_btn = "nul"
input_player2_r3_axis = "nul"
input_player2_l_x_plus = "nul"
input_player2_l_x_plus_btn = "nul"
input_player2_l_x_plus_axis = "nul"
input_player2_l_x_minus = "nul"
input_player2_l_x_minus_btn = "nul"
input_player2_l_x_minus_axis = "nul"
input_player2_l_y_plus = "nul"
input_player2_l_y_plus_btn = "nul"
input_player2_l_y_plus_axis = "nul"
input_player2_l_y_minus = "nul"
input_player2_l_y_minus_btn = "nul"
input_player2_l_y_minus_axis = "nul"
input_player2_r_x_plus = "nul"
input_player2_r_x_plus_btn = "nul"
input_player2_r_x_plus_axis = "nul"
input_player2_r_x_minus = "nul"
input_player2_r_x_minus_btn = "nul"
input_player2_r_x_minus_axis = "nul"
input_player2_r_y_plus = "nul"
input_player2_r_y_plus_btn = "nul"
input_player2_r_y_plus_axis = "nul"
input_player2_r_y_minus = "nul"
input_player2_r_y_minus_btn = "nul"
input_player2_r_y_minus_axis = "nul"
input_player2_turbo = "nul"
input_player2_turbo_btn = "nul"
input_player2_turbo_axis = "nul"
input_player3_b = "nul"
input_player3_b_btn = "nul"
input_player3_b_axis = "nul"
input_player3_y = "nul"
input_player3_y_btn = "nul"
input_player3_y_axis = "nul"
input_player3_select = "nul"
input_player3_select_btn = "nul"
input_player3_select_axis = "nul"
input_player3_start = "nul"
input_player3_start_btn = "nul"
input_player3_start_axis = "nul"
input_player3_up = "nul"
input_player3_up_btn = "nul"
input_player3_up_axis = "nul"
input_player3_down = "nul"
input_player3_down_btn = "nul"
input_player3_down_axis = "nul"
input_player3_left = "nul"
input_player3_left_btn = "nul"
input_player3_left_axis = "nul"
input_player3_right = "nul"
input_player3_right_btn = "nul"
input_player3_right_axis = "nul"
input_player3_a = "nul"
input_player3_a_btn = "nul"
input_player3_a_axis = "nul"
input_player3_x = "nul"
input_player3_x_btn = "nul"
input_player3_x_axis = "nul"
input_player3_l = "nul"
input_player3_l_btn = "nul"
input_player3_l_axis = "nul"
input_player3_r = "nul"
input_player3_r_btn = "nul"
input_player3_r_axis = "nul"
input_player3_l2 = "nul"
input_player3_l2_btn = "nul"
input_player3_l2_axis = "nul"
input_player3_r2 = "nul"
input_player3_r2_btn = "nul"
input_player3_r2_axis = "nul"
input_player3_l3 = "nul"
input_player3_l3_btn = "nul"
input_player3_l3_axis = "nul"
input_player3_r3 = "nul"
input_player3_r3_btn = "nul"
input_player3_r3_axis = "nul"
input_player3_l_x_plus = "nul"
input_player3_l_x_plus_btn = "nul"
input_player3_l_x_plus_axis = "nul"
input_player3_l_x_minus = "nul"
input_player3_l_x_minus_btn = "nul"
input_player3_l_x_minus_axis = "nul"
input_player3_l_y_plus = "nul"
input_player3_l_y_plus_btn = "nul"
input_player3_l_y_plus_axis = "nul"
input_player3_l_y_minus = "nul"
input_player3_l_y_minus_btn = "nul"
input_player3_l_y_minus_axis = "nul"
input_player3_r_x_plus = "nul"
input_player3_r_x_plus_btn = "nul"
input_player3_r_x_plus_axis = "nul"
input_player3_r_x_minus = "nul"
input_player3_r_x_minus_btn = "nul"
input_player3_r_x_minus_axis = "nul"
input_player3_r_y_plus = "nul"
input_player3_r_y_plus_btn = "nul"
input_player3_r_y_plus_axis = "nul"
input_player3_r_y_minus = "nul"
input_player3_r_y_minus_btn = "nul"
input_player3_r_y_minus_axis = "nul"
input_player3_turbo = "nul"
input_player3_turbo_btn = "nul"
input_player3_turbo_axis = "nul"
input_player4_b = "nul"
input_player4_b_btn = "nul"
input_player4_b_axis = "nul"
input_player4_y = "nul"
input_player4_y_btn = "nul"
input_player4_y_axis = "nul"
input_player4_select = "nul"
input_player4_select_btn = "nul"
input_player4_select_axis = "nul"
input_player4_start = "nul"
input_player4_start_btn = "nul"
input_player4_start_axis = "nul"
input_player4_up = "nul"
input_player4_up_btn = "nul"
input_player4_up_axis = "nul"
input_player4_down = "nul"
input_player4_down_btn = "nul"
input_player4_down_axis = "nul"
input_player4_left = "nul"
input_player4_left_btn = "nul"
input_player4_left_axis = "nul"
input_player4_right = "nul"
input_player4_right_btn = "nul"
input_player4_right_axis = "nul"
input_player4_a = "nul"
input_player4_a_btn = "nul"
input_player4_a_axis = "nul"
input_player4_x = "nul"
input_player4_x_btn = "nul"
input_player4_x_axis = "nul"
input_player4_l = "nul"
input_player4_l_btn = "nul"
input_player4_l_axis = "nul"
input_player4_r = "nul"
input_player4_r_btn = "nul"
input_player4_r_axis = "nul"
input_player4_l2 = "nul"
input_player4_l2_btn = "nul"
input_player4_l2_axis = "nul"
input_player4_r2 = "nul"
input_player4_r2_btn = "nul"
input_player4_r2_axis = "nul"
input_player4_l3 = "nul"
input_player4_l3_btn = "nul"
input_player4_l3_axis = "nul"
input_player4_r3 = "nul"
input_player4_r3_btn = "nul"
input_player4_r3_axis = "nul"
input_player4_l_x_plus = "nul"
input_player4_l_x_plus_btn = "nul"
input_player4_l_x_plus_axis = "nul"
input_player4_l_x_minus = "nul"
input_player4_l_x_minus_btn = "nul"
input_player4_l_x_minus_axis = "nul"
input_player4_l_y_plus = "nul"
input_player4_l_y_plus_btn = "nul"
input_player4_l_y_plus_axis = "nul"
input_player4_l_y_minus = "nul"
input_player4_l_y_minus_btn = "nul"
input_player4_l_y_minus_axis = "nul"
input_player4_r_x_plus = "nul"
input_player4_r_x_plus_btn = "nul"
input_player4_r_x_plus_axis = "nul"
input_player4_r_x_minus = "nul"
input_player4_r_x_minus_btn = "nul"
input_player4_r_x_minus_axis = "nul"
input_player4_r_y_plus = "nul"
input_player4_r_y_plus_btn = "nul"
input_player4_r_y_plus_axis = "nul"
input_player4_r_y_minus = "nul"
input_player4_r_y_minus_btn = "nul"
input_player4_r_y_minus_axis = "nul"
input_player4_turbo = "nul"
input_player4_turbo_btn = "nul"
input_player4_turbo_axis = "nul"
input_player5_b = "nul"
input_player5_b_btn = "nul"
input_player5_b_axis = "nul"
input_player5_y = "nul"
input_player5_y_btn = "nul"
input_player5_y_axis = "nul"
input_player5_select = "nul"
input_player5_select_btn = "nul"
input_player5_select_axis = "nul"
input_player5_start = "nul"
input_player5_start_btn = "nul"
input_player5_start_axis = "nul"
input_player5_up = "nul"
input_player5_up_btn = "nul"
input_player5_up_axis = "nul"
input_player5_down = "nul"
input_player5_down_btn = "nul"
input_player5_down_axis = "nul"
input_player5_left = "nul"
input_player5_left_btn = "nul"
input_player5_left_axis = "nul"
input_player5_right = "nul"
input_player5_right_btn = "nul"
input_player5_right_axis = "nul"
input_player5_a = "nul"
input_player5_a_btn = "nul"
input_player5_a_axis = "nul"
input_player5_x = "nul"
input_player5_x_btn = "nul"
input_player5_x_axis = "nul"
input_player5_l = "nul"
input_player5_l_btn = "nul"
input_player5_l_axis = "nul"
input_player5_r = "nul"
input_player5_r_btn = "nul"
input_player5_r_axis = "nul"
input_player5_l2 = "nul"
input_player5_l2_btn = "nul"
input_player5_l2_axis = "nul"
input_player5_r2 = "nul"
input_player5_r2_btn = "nul"
input_player5_r2_axis = "nul"
input_player5_l3 = "nul"
input_player5_l3_btn = "nul"
input_player5_l3_axis = "nul"
input_player5_r3 = "nul"
input_player5_r3_btn = "nul"
input_player5_r3_axis = "nul"
input_player5_l_x_plus = "nul"
input_player5_l_x_plus_btn = "nul"
input_player5_l_x_plus_axis = "nul"
input_player5_l_x_minus = "nul"
input_player5_l_x_minus_btn = "nul"
input_player5_l_x_minus_axis = "nul"
input_player5_l_y_plus = "nul"
input_player5_l_y_plus_btn = "nul"
input_player5_l_y_plus_axis = "nul"
input_player5_l_y_minus = "nul"
input_player5_l_y_minus_btn = "nul"
input_player5_l_y_minus_axis = "nul"
input_player5_r_x_plus = "nul"
input_player5_r_x_plus_btn = "nul"
input_player5_r_x_plus_axis = "nul"
input_player5_r_x_minus = "nul"
input_player5_r_x_minus_btn = "nul"
input_player5_r_x_minus_axis = "nul"
input_player5_r_y_plus = "nul"
input_player5_r_y_plus_btn = "nul"
input_player5_r_y_plus_axis = "nul"
input_player5_r_y_minus = "nul"
input_player5_r_y_minus_btn = "nul"
input_player5_r_y_minus_axis = "nul"
input_player5_turbo = "nul"
input_player5_turbo_btn = "nul"
input_player5_turbo_axis = "nul"
input_player6_b = "nul"
input_player6_b_btn = "nul"
input_player6_b_axis = "nul"
input_player6_y = "nul"
input_player6_y_btn = "nul"
input_player6_y_axis = "nul"
input_player6_select = "nul"
input_player6_select_btn = "nul"
input_player6_select_axis = "nul"
input_player6_start = "nul"
input_player6_start_btn = "nul"
input_player6_start_axis = "nul"
input_player6_up = "nul"
input_player6_up_btn = "nul"
input_player6_up_axis = "nul"
input_player6_down = "nul"
input_player6_down_btn = "nul"
input_player6_down_axis = "nul"
input_player6_left = "nul"
input_player6_left_btn = "nul"
input_player6_left_axis = "nul"
input_player6_right = "nul"
input_player6_right_btn = "nul"
input_player6_right_axis = "nul"
input_player6_a = "nul"
input_player6_a_btn = "nul"
input_player6_a_axis = "nul"
input_player6_x = "nul"
input_player6_x_btn = "nul"
input_player6_x_axis = "nul"
input_player6_l = "nul"
input_player6_l_btn = "nul"
input_player6_l_axis = "nul"
input_player6_r = "nul"
input_player6_r_btn = "nul"
input_player6_r_axis = "nul"
input_player6_l2 = "nul"
input_player6_l2_btn = "nul"
input_player6_l2_axis = "nul"
input_player6_r2 = "nul"
input_player6_r2_btn = "nul"
input_player6_r2_axis = "nul"
input_player6_l3 = "nul"
input_player6_l3_btn = "nul"
input_player6_l3_axis = "nul"
input_player6_r3 = "nul"
input_player6_r3_btn = "nul"
input_player6_r3_axis = "nul"
input_player6_l_x_plus = "nul"
input_player6_l_x_plus_btn = "nul"
input_player6_l_x_plus_axis = "nul"
input_player6_l_x_minus = "nul"
input_player6_l_x_minus_btn = "nul"
input_player6_l_x_minus_axis = "nul"
input_player6_l_y_plus = "nul"
input_player6_l_y_plus_btn = "nul"
input_player6_l_y_plus_axis = "nul"
input_player6_l_y_minus = "nul"
input_player6_l_y_minus_btn = "nul"
input_player6_l_y_minus_axis = "nul"
input_player6_r_x_plus = "nul"
input_player6_r_x_plus_btn = "nul"
input_player6_r_x_plus_axis = "nul"
input_player6_r_x_minus = "nul"
input_player6_r_x_minus_btn = "nul"
input_player6_r_x_minus_axis = "nul"
input_player6_r_y_plus = "nul"
input_player6_r_y_plus_btn = "nul"
input_player6_r_y_plus_axis = "nul"
input_player6_r_y_minus = "nul"
input_player6_r_y_minus_btn = "nul"
input_player6_r_y_minus_axis = "nul"
input_player6_turbo = "nul"
input_player6_turbo_btn = "nul"
input_player6_turbo_axis = "nul"
input_player7_b = "nul"
input_player7_b_btn = "nul"
input_player7_b_axis = "nul"
input_player7_y = "nul"
input_player7_y_btn = "nul"
input_player7_y_axis = "nul"
input_player7_select = "nul"
input_player7_select_btn = "nul"
input_player7_select_axis = "nul"
input_player7_start = "nul"
input_player7_start_btn = "nul"
input_player7_start_axis = "nul"
input_player7_up = "nul"
input_player7_up_btn = "nul"
input_player7_up_axis = "nul"
input_player7_down = "nul"
input_player7_down_btn = "nul"
input_player7_down_axis = "nul"
input_player7_left = "nul"
input_player7_left_btn = "nul"
input_player7_left_axis = "nul"
input_player7_right = "nul"
input_player7_right_btn = "nul"
input_player7_right_axis = "nul"
input_player7_a = "nul"
input_player7_a_btn = "nul"
input_player7_a_axis = "nul"
input_player7_x = "nul"
input_player7_x_btn = "nul"
input_player7_x_axis = "nul"
input_player7_l = "nul"
input_player7_l_btn = "nul"
input_player7_l_axis = "nul"
input_player7_r = "nul"
input_player7_r_btn = "nul"
input_player7_r_axis = "nul"
input_player7_l2 = "nul"
input_player7_l2_btn = "nul"
input_player7_l2_axis = "nul"
input_player7_r2 = "nul"
input_player7_r2_btn = "nul"
input_player7_r2_axis = "nul"
input_player7_l3 = "nul"
input_player7_l3_btn = "nul"
input_player7_l3_axis = "nul"
input_player7_r3 = "nul"
input_player7_r3_btn = "nul"
input_player7_r3_axis = "nul"
input_player7_l_x_plus = "nul"
input_player7_l_x_plus_btn = "nul"
input_player7_l_x_plus_axis = "nul"
input_player7_l_x_minus = "nul"
input_player7_l_x_minus_btn = "nul"
input_player7_l_x_minus_axis = "nul"
input_player7_l_y_plus = "nul"
input_player7_l_y_plus_btn = "nul"
input_player7_l_y_plus_axis = "nul"
input_player7_l_y_minus = "nul"
input_player7_l_y_minus_btn = "nul"
input_player7_l_y_minus_axis = "nul"
input_player7_r_x_plus = "nul"
input_player7_r_x_plus_btn = "nul"
input_player7_r_x_plus_axis = "nul"
input_player7_r_x_minus = "nul"
input_player7_r_x_minus_btn = "nul"
input_player7_r_x_minus_axis = "nul"
input_player7_r_y_plus = "nul"
input_player7_r_y_plus_btn = "nul"
input_player7_r_y_plus_axis = "nul"
input_player7_r_y_minus = "nul"
input_player7_r_y_minus_btn = "nul"
input_player7_r_y_minus_axis = "nul"
input_player7_turbo = "nul"
input_player7_turbo_btn = "nul"
input_player7_turbo_axis = "nul"
input_player8_b = "nul"
input_player8_b_btn = "nul"
input_player8_b_axis = "nul"
input_player8_y = "nul"
input_player8_y_btn = "nul"
input_player8_y_axis = "nul"
input_player8_select = "nul"
input_player8_select_btn = "nul"
input_player8_select_axis = "nul"
input_player8_start = "nul"
input_player8_start_btn = "nul"
input_player8_start_axis = "nul"
input_player8_up = "nul"
input_player8_up_btn = "nul"
input_player8_up_axis = "nul"
input_player8_down = "nul"
input_player8_down_btn = "nul"
input_player8_down_axis = "nul"
input_player8_left = "nul"
input_player8_left_btn = "nul"
input_player8_left_axis = "nul"
input_player8_right = "nul"
input_player8_right_btn = "nul"
input_player8_right_axis = "nul"
input_player8_a = "nul"
input_player8_a_btn = "nul"
input_player8_a_axis = "nul"
input_player8_x = "nul"
input_player8_x_btn = "nul"
input_player8_x_axis = "nul"
input_player8_l = "nul"
input_player8_l_btn = "nul"
input_player8_l_axis = "nul"
input_player8_r = "nul"
input_player8_r_btn = "nul"
input_player8_r_axis = "nul"
input_player8_l2 = "nul"
input_player8_l2_btn = "nul"
input_player8_l2_axis = "nul"
input_player8_r2 = "nul"
input_player8_r2_btn = "nul"
input_player8_r2_axis = "nul"
input_player8_l3 = "nul"
input_player8_l3_btn = "nul"
input_player8_l3_axis = "nul"
input_player8_r3 = "nul"
input_player8_r3_btn = "nul"
input_player8_r3_axis = "nul"
input_player8_l_x_plus = "nul"
input_player8_l_x_plus_btn = "nul"
input_player8_l_x_plus_axis = "nul"
input_player8_l_x_minus = "nul"
input_player8_l_x_minus_btn = "nul"
input_player8_l_x_minus_axis = "nul"
input_player8_l_y_plus = "nul"
input_player8_l_y_plus_btn = "nul"
input_player8_l_y_plus_axis = "nul"
input_player8_l_y_minus = "nul"
input_player8_l_y_minus_btn = "nul"
input_player8_l_y_minus_axis = "nul"
input_player8_r_x_plus = "nul"
input_player8_r_x_plus_btn = "nul"
input_player8_r_x_plus_axis = "nul"
input_player8_r_x_minus = "nul"
input_player8_r_x_minus_btn = "nul"
input_player8_r_x_minus_axis = "nul"
input_player8_r_y_plus = "nul"
input_player8_r_y_plus_btn = "nul"
input_player8_r_y_plus_axis = "nul"
input_player8_r_y_minus = "nul"
input_player8_r_y_minus_btn = "nul"
input_player8_r_y_minus_axis = "nul"
input_player8_turbo = "nul"
input_player8_turbo_btn = "nul"
input_player8_turbo_axis = "nul"
core_specific_config = "false"
libretro_log_level = "0"
log_verbosity = "false"
perfcnt_enable = "false"

Wie ihr seht, gibt es nicht nur Controller-Einstellung in der retroarch.cfg. Alle Möglichkeiten zu erklären würde den Rahmen sprengen, ich überlasse es daher eurem Forscherdrang, den Schaltern auf den Grund zugehen.

Ihr könnt übrigens auch einige der Sondertasten direkt mit retroarch-joyconfig zuweisen! Dazu müsst ihr nur den Parameter -M für viele oder -m für wenige Sondertasten mit angeben, also z. B. sudo ./retroarch-joyconfig -o player1.cfg -p 1 -j 0 -t 5 -M.

Ich habe vorhin erwähnt, dass die Werte aus der retroarch.cfg im Verzeichnis /opt/retropie/configs/all immer dann genommen werden, wenn für den jeweiligen Emulator keine eigenen Werte vorliegen. Ihr braucht nur mit cd .. aus dem all-Verzeichnis eine Ebene zurückgehen. Dort findet ihr dann unter /opt/retropie/configs eigene Unterordner für die unterschiedlichen RetroArch-Systeme.

RetroPieV26_037Möchtet ihr z. B. den NES-Emulator lieber mit GUIDE + Y verlassen, dann reicht es im nes-Verzeichnis in die dort befindliche retroarch.cfg die Zeile

input_exit_emulator_btn = "3"

aufzunehmen. Sollte es keine retroarch.cfg geben, legt einfach eine an. Alle anderen Einstellungen kommen aus der retroarch.cfg im all-Verzeichnis, nur die Taste zum Verlassen wurde überschrieben.

 

Beim XBox-Pad das Blinken verhindern
Es scheinen sich doch viele daran zu stören, dass beim XBox-Controller alle vier LEDs dauerhaft blinken.

Alle vier LEDs blinken
Alle vier LEDs blinken

Mich stört dies zwar nicht, aber wer möchte, dass, wie bei einer Verbindung zur XBox 360, nur die LED für den gewählten Kanal dauerhaft leuchtet, der kann die folgenden Schritte ausführen.

Ihr müsst danach aber den Controller nochmal neu einrichten (EmulationStation & RetroArch), da er unter einem anderen Namen im System angemeldet wird!

Verlasst du EmulationStation und begebt euch ins Setupscript von RetroPie.

cd ~/RetroPie-Setup
sudo ./retropie_setup.sh

Wählt dort 3 Setup / Configuration (to be used post install) aus.

RetroPieV26_022Ganz unten findet ihr den Punkt 328 Install Xbox contr. 360 driver .

Den XBox-Treiber installieren.
Den XBox-Treiber installieren.

Darüber installieren wir einen weiteren Treiber für die XBox-Gamepads. Nach der Installation könnt ihr das Script wieder verlassen. Wir müssen jetzt noch die rc.local  anpassen. Öffnet diese Datei mit sudo nano /etc/rc.local zum Bearbeiten. Fügt vor dem exit 0  die beiden folgenden Zeilen ein:

rmmod xpad
xboxdrv --daemon --wid 0 --led 2 --deadzone 4000 --silent --trigger-as-button --dbus disabled --detach-kernel-driver &

Wichtig für die Steuerung der LEDs sind hier –wid (nehmt –id für kabelgebundene Controller) und –led. Hinter –wid (bzw. –id) gebt ihr die Nummer des Controllers an, die Zählung beginnt bei 0. Hinter –led wird die zugehörige LED angegeben, keine Ahnung warum, aber hier beginnt die Zählung bei 2! Verwendet ihr mehrere XBox-Controller, dann könnt ihr diese mit --next-controller anfügen.
Für zwei Controller sähe es dann so aus…

xboxdrv --daemon --id 0 --led 2 --deadzone 4000 --silent --trigger-as-button --next-controller --id 1 --led 3 --deadzone 4000 --silent --trigger-as-button --dbus disabled --detach-kernel-driver &

 

Ungefähr so sollte eure rc.local aussehen.
Ungefähr so sollte eure rc.local aussehen.

Speichert die Einstellungen und startet den Pi mit sudo reboot  neu. Nach dem booten sollte nur noch eine LED leuchten, sobald die EmulationStation startet.

Geschafft, nur eine LED leuchtet.
Geschafft, nur eine LED leuchtet.

Jetzt müsst ihr noch, wie eingangs erwähnt, den Controller erneut einrichten.

 

Moritz hat mich darauf aufmerksam gemacht, dass es eine weitere Möglichkeit gibt, die wohl einige Ressouren sparen soll. Die Beschreibung findet ihr auf github unter Punkt 3.

 

Controller fürs N64 (mupen64plus standalone) einrichten
Hier mal die Beschreibung von Moritz, die er ursprünglich in den Kommentaren gepostet hat:

Nachdem du deinen Controller in der ./retropie_setup.sh registriert
hast, und dein Buttonlayout kennst, welches du hier einsehen kannst
(Der Dateiname kann je nachdem, was für einen Controller du hast, 
natürlich variieren:

nano /opt/retropie/emulators/retroarch/configs/XboxGamepad(userspacedriver).cfg

Danach gehst du in:

sudo nano /opt/retropie/configs/n64/InputAutoCfg.ini

Hier musst du die richtige Stelle (deinen Controller betreffend) 
suchen und kann die Steuerung im Emulator konfigurieren. Bei mir 
wäre das so:

[Microsoft X-Box 360 pad]
[Microsoft X-Box One pad]
[Win32: Controller (XBOX 360 For Windows)]
[Win32: XBOX 360 For Windows (Controller)]
[Win32: XBOX 360 For Windows]
[Xbox 360 Wireless Receiver]
[Linux: Xbox Gamepad (userspace driver)]
plugged = True
plugin = 2
mouse = False
AnalogDeadzone = 4096,4096
AnalogPeak = 32768,32768
DPad R = button(3)
DPad L = button(2)
DPad D = button(1)
DPad U = button(0)
Start = button(13)
Z Trig = button(10)
B Button = button(5)
A Button = button(4)
C Button R = axis(2+)
C Button L = axis(2-) 
C Button D = axis(3-) 
C Button U = axis(3+)
R Trig = button(9) 
L Trig = button(8)
Mempak switch = 
Rumblepak switch = 
X Axis = axis(0-,0+)
Y Axis = axis(1-,1+)


Danach wollen wir noch Sondertasten belegen, damit wir den Emulator
auch mit einem Knopfdruck verlassen können. Dies geschieht in einer
gesonderten Datei. 
Beachte bitte, dass hier Hotkeys wie bei Retroarch leider nicht 
möglich sind. Du musst den Befehl dann auf eine einzelne Taste legen. 
Ich habe das z.B. den Befehl zum Verlassen des Emulators auf R3
(Druck auf den rechten Stick) gelegt.

Beispiel gefällig? ;) Gehe zuerst in folgende Datei:

sudo nano /opt/retropie/configs/n64/mupen64plus.cfg

Richtige Stelle suchen:

# Joystick event string for stopping the emulator
Joy Mapping Stop = "J0B16"
# Joystick event string for switching between fullscreen/windowed modes
Joy Mapping Fullscreen = ""
# Joystick event string for saving the emulator state
Joy Mapping Save State = "J0B14"
# Joystick event string for loading the emulator state
Joy Mapping Load State = "J0B12"
# Joystick event string for advancing the save state slot
Joy Mapping Increment Slot = ""
# Joystick event string for taking a screenshot
Joy Mapping Screenshot = ""
# Joystick event string for pausing the emulator
Joy Mapping Pause = ""
# Joystick event string for muting/unmuting the sound
Joy Mapping Mute = ""
# Joystick event string for increasing the volume
Joy Mapping Increase Volume = ""
# Joystick event string for decreasing the volume
Joy Mapping Decrease Volume = ""
# Joystick event string for fast-forward
Joy Mapping Fast Forward = "J0B15"
# Joystick event string for pressing the game shark button
Joy Mapping Gameshark = ""


Danach einmal neustarten:

sudo reboot

Geschafft! Viel Spaß! ;)

Sobald ich dazu komme, werde ich dies mal mit Bildern versehen und um einige Annmerkungen ergänzen.


Ich hoffe ihr konntet nun eure Controller einrichten und habt ein paar neue Anregungen, was sich alles einstellen läßt, bekommen. Im folgenden Beitrag ‚RetroPie: Die Emulatoren (Amiga, GBA, PSX)‚ kümmern wir uns mal darum, wie man die einzelnen Emulatoren zum Laufen bekommt.


Schrott!!Naja...Geht so...Ganz gut...SUPER! (8 Bewertungen | Ø 4,88 von 5 | 97,50%)

Loading...


 

<<< zurück | weiter >>>

111 Gedanken zu „RetroPie (V2.6): Controller einrichten“

  1. Hallo,

    ich habe ein Kabinet gebaut mit einem Zippy Joystick und 8 Buttons + 2x Startbuttons an der Seite – alles über GPIO auf dem Raspberry angeschlossen… Das ganze läuft (natürlich) nicht per Plug&Play… Keine Ahnung was ich dafür tun muss – LEIDER WIRD WELTWEIT NICHTS DAZU BESCHRIEBEN !!!???

    Weiß hier jemand weiter?

    1. Hi,
      ich habe mit der GPIO-Anbindungen leider keine Erfahrung, aber eigentlich brauchst du doch nur einen Treiber, der die GPIO-Signale in Joystick oder Tastaturcodes umwandelt.
      Sollte das vom Prinzip nicht so wie hier beschrieben funktionieren? Dort wird auch ein Script angeboten, das genau die von mir erwähnte Umwandlung macht.
  2. Hallo,

    habe jetzt schon 3x die ganze manuelle Controller-Einrichtung für 2 Controller durch (jeweils nur einen angesteckt etc.).
    Habe folgende Konstellation:
    .~~. .~~. Dienstag, 4 August 2015, 06:58:44
    ‘. ‘ ‘ / .’ Linux 3.18.11-v7+ armv7l GNU/Linux
    .~ .~~~..~.
    : .~.’~’.~. :
    ~ ( ) ( ) ~ rootfs 7,3G 2,3G 4,7G 33% /
    ( : ‘~’.~.’~’ : ) Uptime………….: 0 days, 01h51m44s
    ~ .~ ~. ~ Memory………….: 509912kB (Free) / 624288kB (Total)
    ( | | ) Running Processes..: 88
    ‘~ ~’ IP Address………:
    *–~-~–* Temperature……..: CPU: 49°C/120°F GPU: 48°C/118°F
    The RetroPie Project, http://www.petrockblock.com
    1x Keyboard Logitech K400 Wireless an USB (funktioniert)
    1x Aktiver USB-Hub 2.0
    -> 1x USB Logitech Rumblepad
    -> 1x USB Thrustmaster Analog Gamepad

    Beim SNES-Emulator kann ich nicht mit 2 Controllern zocken,
    Player 1 wird sowohl vom Keyboard als auch vom Logitech Rumblepad gesteuert,
    der Trustmaster-Controller hat keine Wirkung. Weitere Emulationen noch nicht probiert.
    Ich habe mich mal auf dem System umgeschaut und gesehen, das es diese retroarch.cfg
    sowohl unter /opt/retropie/configs/all und /opt/retropie/configs/snes gibt als auch unter /opt/retropie/emulators/retroarch … In der Beschreibung soll man ja die Joypadconfiguration mit „cat“ nach /opt/retropie/configs/all/retroarch.cfg schreiben.
    Was steht denn in den andern retroarch.cfg? Welche ist die „Master-Datei“, und welche die spezifische bzw. „Fallback“-Datei? Ich bin etwas durcheinander was nun wo reingehört und warum unter /opt/retropie/emulators/retroarch auch eine retroarch.cfg existiert. Wann wird diese denn ausgelesen?
    Vielen Dank für Eure Hilfe!
    Wilko

    1. Hi,
      die retroarch.cfg im all-Verzeichnis ist die Hauptdatei. Die aus den Emulator-Verzeichnissen, übersteuern bei Bedarf die globalen Einstellungen.

      Wie meinst du das?

      habe jetzt schon 3x die ganze manuelle Controller-Einrichtung für 2 Controller durch (jeweils nur einen angesteckt etc.)

      Wenn du mehrere Controller manuell einrichtest, dann müssen, wie oben erwähnt, alle angeschlossen sein!

  3. Ich habe folgende Problem:
    Ich Verlasse mit F4 die Emulator Oberfläche.
    Dann gebe ich
    cd ~/RetroPie-Setup
    ein und wechsel in das Setup-Verzeichnis von RetroPie.
    Dann gebe ich
    sudo ./retropie_setup.sh
    ein und es treten folgende Fehler auf:

    /home/pi/RetroPie-Setup/scriptmodules/Packeges.sh: line 250: /home/pi/RetroPie-Setup/Scriptmodules/ports/Super: No such file or directory

    Module /home/pi/RetroPie-Setup/Scriptmodules/ports/Super is missing valid rp_module_id

    Module /home/pi/RetroPie-Setup/Scriptmodules/ports/Super is missing valid rp_module_desc

    Ich muss dazu sagen das dieser Fehler auftrat nachdem ich im Setup-Script
    U UPDATE RetroPie Setup script
    durchgeführt habe.

    Ich hoffe ihr könnt mir helfen.
    Grüße

    1. Moin,
      da haben die Jungs wohl ‘mist’ gebaut.

      Wechsel mal mit cd ~/RetroPie-Setup/scriptmodules/ports das Verzeichnis.
      Dort solltest du nach einem ls die Datei Super Mario War.sh finden.
      Genau diese ist das Problem oder besser gesagt, die Leerzeichen.
      Benenne sie mit sudo mv Super\ Mario\ War.sh ./SuperMarioWar.sh um (wichtig OHNE Leerzeichen!), danach sollte sich ./retropie_setup.sh wieder starten lassen.

      1. Danke für deine schnelle Antwort und deine ganzen sehr guten Tutorials.
        Ich habe die Installation mehrmals neu begonnen und beim 3. mal gab es keinen Fehler mehr.
        Konnte deinen Lösungsvorschlag leider nicht mehr testen.

  4. Hallo,

    erstmal ein großes Lob für die Mühe und die tolle Arbeit.

    Leider funktioniert mein Controller immer noch nicht.

    Ich habe einen Raspberry Pie 2 und die RetroPie Version 2.6. Ich habe heute RetroPie geupdated.

    Als Controller würde ich gerne meinen Playstation 3 Controller über USB benutzen. Der Controller wird in der Emulationsstation erkannt. Allerdings zeigt ein drücken einer beliebigen Taste keine Reaktion, so dass ich mich entschied den Controller manuell zu installieren. Der erste Weg über den Setup Punkt “317 Register RetroArch controller ” hat nicht funktioniert (bei mir heißt der Punkt übrigens 317 Configure input devices for RetroArch). Ich wollte die Setup starten, wurde aber danach nicht zur Tastenkonfiguration geleitet.
    Daraufhin wollte ich meinen Controller über “retroarch-joyconfig” installieren. Hier wurde ich immerhin zur Tastenabfrage geleitet. Jeglicher Tastendruck zeigte aber keine Reaktion so das alle Buttons mit time out abgebrochen wurden.

    Hat jemand eine Idee woran das liegen kann?

    1. Hi,
      das klingt sehr merkwürdig. Da du schreibst, dass der Controller erkannt wird, steht in der EmulationStation bzw. bei retroarch-joyconifg wohl etwas von PS3…, oder?

      Schließe einfach mal nur den einen Controller an, boote den Pi und kontrolliere im Terminal mit lsusb, ob der Controller auftaucht. Es sollte ungefähr so wie bei der Bluetooth-Einrichtung aussehen…

      Falls dies der Fall ist, wechsel das Verzeichnis cd /dev/input

      und starte dort das Joystick-Testtool mit jstest js0. Rührt sich dann etwas? Das Programm kannst du mit STRG + C beenden.

      Hast du das Image eigentlich frisch installiert oder bereits Änderungen daran vorgenommen bzw. Updates eingespielt? Ich würde sonst empfehlen, testweise einmal das Image neu aufzusetzen (kannst ja vorher ein Backup ziehen) und direkt beim ersten Start den Controller anzuschließen und einzurichten. Falls es dann klappt, wurde das Problem durch eine spätere Änderung bzw. ein Update verursacht.

      Gruß,
      Jörn

      PS.: Die Bezeichnung der Punkte (z. B. 317) ändert sich leider laufend. Da die Version 3.0 vor der Tür steht, passe ich die 2.6 Beschreibungen nicht mehr an.

      1. Hallo Jörn,

        ich habe das neue 3.0 Image installiert. Hier hat es geklappt. Ich musst dafür den PS Button in der Mitte gedrückt halten.

        Das war glaube auch der einzige Button den ich bei der Version 2.6 nicht gedrückt hatte ^^. Also kann sein das es auch da geklappt hätte.

        Danke dennoch für deine schnelle Antwort.

        Mach weiter so!!!

  5. Erst mal ein dickes Looooob für die tollen Anleitungen!

    Mein Retropie läuft eingentlich ganz gut, aber ich hab da einen kleinen Issue mit dem Controller bei den DOS Games, den du evt. aus dem ff beantworten kannst 😉 Der User marqus hat es oben auch schon erwähnt (aber beim Amiga).

    Und zwar zieht mein Logitech Attack 3 Joystick bei gewissen Games (Raptor, Doom, Prince of Persia2) nach dem Setup des Programmes (upper left & lower right) gleich nach rechts unten in die Ecke und bleibt da. Der Cursor kann zwar bewegt werden, aber driftet immer sofort wieder in die Ecke. Auch mit anderen Gamepads oder dem Logitech Dual Action sind die Symptome gleich…

    Beste Grüsse
    D

    1. Das Problem kenne ich bisher auch nur vom Amiga-Emulator. Die DOS-Box verwende ich persönlich nicht auf dem Pi. Die habe ich nur für meinen Beitrag mal kurz mit Descent getestet und da gab es keine Probleme mit meinem XBox-Pad. Wenn die Zeit es zulässt, kann ich das die Tage nochmal mit Doom testen. So direkt fällt mir dazu erstmal nichts weiter ein.
      1. Hi Jörn
        Danke fürs Feedback & kein Stress mit dem Testen.
        Würde das Editieren der retroarch.cfg evt. etwas bringen? Obwohl, es ja nur bei einzelnen Games und somit wäre der Fehler aus meiner Sicht nicht im cfg File.

        1. Moin,
          nur um sicher zu gehen, wir reden hier doch von der DOSBox oder?
          Die gehört nicht zu RetroArch, daher bringt eine Änderung an der retroarch.cfg auch nichts.
          1. Sorry, mein Fehler 😉 Bin noch nicht so “sattelfest”, was den Inhalt und Logik des Systems betrifft…

        2. Heute Abend will ich das mal testen. Nur zur Sicherheit, du verwendest auch das Image 2.6? Leider wurde schon häufiger im ‘falschen’ Bereich gepostet und ich habe es dann vergeblich probiert.
    2. Ich habe das eben mal mit dem Image 2.6 und der aktuellen 3.0 BETA 4 getestet. Bei mir verhält sich Raptor identisch. Es ist auch egal, ob ich einen analogen Stick (XBox-Pad) oder einen digitalen (Competition Pro USB) verwende. Dies hatte beim Amiga zumindest geholfen.
      Auch ein neues Mappen (STRG + F1) der Joystick-Eingaben direkt in der DOSbox hat nichts gebracht. Nur wenn ich Raptor von Joystick auf Tastatur umstelle, bewegt sich das Kreuz nicht mehr von alleine. Ich habe testweise mal alles abgezogen, außer einer einfachen USB-Tastatur und dem Competition, brachte aber auch nichts.

      Evtl. läßt sich über die Konfigdatei der DOSbox etwas regeln, die Einstellungen sind mir aber nicht so geläufig. Schau dafür am besten mal in die Wiki, vielleicht gibt es dort einen Tipp.

  6. Hallo Jörn,

    ich habe mir am Wochenende auf meinem Raspberry 2 die aktuelle Beta der 3.0 installiert. Ich habe wieder Probleme meinen Controller zu konfigurieren. Ich nutze diesen PS3 Nachbaucontroller der Firma CSL http://www.amazon.de/CSL-Gamepad-Vibration-Controller-anthrazit/dp/B00B8PLC3K. Ich folge dann der Konfiguration und drücke die entsprechenden Tasten, soweit sogut.

    Nach der Erstkonfiguration funktioniert der Controller problemlos in der Emulationsstation. In den Spielen läuft dann leider garnichts. Auch unter der Version 2.6 habe ich es nicht hinbekommen.

    Besteht nicht die Möglichkeit in einer Config die Tasten direkt zu belegen?

    Gruß
    Matthias

  7. Ich habe einen Aktiven USB hub angeschlossen um dort 4 Controller anzuschliesen leider wird nicht einer erkannt. Wirless dongel für Maus und Tastatur funktioniert am hub nur die Controller werden nicht erkannt. Am Pie selber funktioniert alles möchte aber ungerne alle 4 Controller am hub anschliesen um diesen nicht zu überlasten. bzw dann ist auch kein anschluss mehr übrieg um Maus und Tastaur anzuschliesen.
    Einen anderen Hub hab ich auch schon versucht geht auch nicht also kann es am hub auch nicht liegen.
    Habe auch im Netz schon nach einer Lösung gesucht aber leider nichts gefunden.

    1. sry hab mich verschrieben gemeint war hatürlich ich “möchte aber ungerne alle 4 Controller am PI anschliesen um diesen nicht zu überlasten”

    2. Ich würde dennoch auf Probleme mit den HUB tippen. Mehr als anstöpsel und einschalten bleibt einem da ja nicht. Es könnte natürlich auch an den Controllern (welche verwendest du überhaupt?) liegen, vielleich wollen die den HUB nicht. Ich habe mal einen Thread gelesen, da wollten Logitech-Pads am HUB nicht, direkt gingen die. Funktionieren die Controller denn mit dem HUB am PC?

      Aktive HUBs sind beim Pi immer solche Sache, steht deiner auf der Kompatibilitätsliste?

      1. Also die Kompatibilitätsliste hab ich mittlerweile auch gefunden meiner steht leider unter “Problem USB Hubs” Es ist der “Belkin 4-Port Powered Mobile Hub” ist auch nicht extra Linux kompatibel auf der Verpackung steht nur Win und Mac bzw Universal. Am anderen Pc hab ich es noch nicht getestet am Hub. Als Controller habe ich 4 Stück “Hama Combat Bow”

        Mir stehlt sich jetzt die Frage welchen Hub ich mir kaufe der auch funktioniert an den ich 4 Controller anschliesen kann hat da jamand nen Tipp für mich?

        PS: Nutze übriegens RetroPie 3.0 hab ausversehen auf die Seite von 2.6 gepostet

  8. Hallo,

    ich verwende den Xbox 360 Wireless Controller ohne xboxdrv am raspberry pi b+ und retropie 2.6.
    Wenn 2 Controller eingeschaltet sind laufen meine snes Spiele ziemlich langsam. Ist dieses Problem bekannt? Gibt’s hier irgendeine Abhilfe?
    Vor dem Update auf 2.6 hatte ich xboxdrv installiert und ebenfalls Performanceprobleme.
    Ich hoffe es kann mir hier jemand weiterhelfen.

    Danke und Grüße

    1. Hi,
      mir sind jetzt keine spürbaren Geschwindigkeitseinbrüche aufgefallen, allerdings Spiele ich auch fast nur alleine.

      Du könntest ja mal, wie im Beitrag bereits erwähnt, den hier im Github unter Punkt 3 beschriebenen Weg versuchen. Wenn man xboxdrv im ‘daemon mode’ verwendet, soll dies CPU-Last und Speicher sparen. Am besten machst du dir vorher ein Backup deiner SD-Karte, damit wieder zum aktuellen Zustand zurückkehren kannst.

  9. Hallo Jörn,
    sag mal wie kann ich zb für den PSX Emulator eine eigene Controller Einstellung vornehmen während alle anderen eine einheitliche Konfig. haben?

  10. Hi, super seite von Dir!! Folgendes Problem.. Habe retropie 2.6 installiert und C64 games drauf.. Kann die games auch laden und habe den PS3Controller per USB angeschlossen!! In der emulationstation funzt der ps3 controller auch und wenn ich aber zb winter games gestartet habe und dann in vice in das controller menü gehe und dort port 2 auswähle, geht der ps3 controller nicht 🙁

    Muss ich im vice menü irgendwo auf speichern gehen?

    Gruss

  11. Hallo,
    ich möchte gern mit einer Taste die Emulation beenden und mit einer anderen ins Retroarch menu. Wie stelle ich das an? Laut Anleitung kann ich mit enable_hotkey und enable_exit_emulation oder halt enable_menu_toggel immer nur 2 gleichzeitig drücken… 🙁

    1. Lass halt alle input_enable_hotkey weg. Der Hotkey sorgt allerdings dafür, dass man nicht versehentlich eine ‘gefährliche‘ Taste drückt und so evtl. im Eifer des Gefechts das Spiel beendet ohne zu speichern.
  12. Habe ein Problem. Habe den PS3 kontroller nach der Anleitung konfiguriert. Alles super geklappt. Also deswegen schon mal danke. Nun habe ich einen Usb sNES Päd angeschlossen und auch konfiguriert. Scheint auch zusammen zu laufen. Außer die Hockey. Wird bei beiden nicht ausgeführt. Sobald der ps3 alleine läuft klappt es wieder. Ne Ahnung was ich falsch gemacht habe oder vergessen habe?

    1. Der Hotkey greift eigentlich nur beim ersten Controller. Auch Probleme bei zwei verschiedenen Pads sind mir bisher nicht begegnet. Wenn du möchtest, kannst du mir deine retroarch.cfg an die Adresse aus dem Impressum schicken, dann werfe ich mal einen Blick drauf, ob mir etwas Ungewöhnliches auf.
      1. Könnte sein das ich evtl den Fehler entdeckt habe. Habe beide Controller keinem Player zugeordnet sondern nur so installiert. Werde das mit den player.cfg erstellen probieren und dann nochmal testen. Sollte es dann noch Probleme geben schicke ich sie dir zu. Kann man evtl die hotkey auch in die Player Datei setzten damit die Hotkey auch mit beiden geht?
        Ich danke für die Hilfe.

          1. Ja. Das ist mir beim erstenmal durchgehen nicht aufgefallen. Erst als ich mir nochmal die Schritte nachverfolgt habe.

  13. Mittlerweile Funktioniert alles, bis auf der Stick / Sticks.

    Erst waren die Buttons vertaushct hab ich die Nummern einfach geändert aber die Sticks wollen nicht.

    1. Wie vertauscht? Mit den zur Verfügung stehenden Tools für die Einrichtung, ist mir so etwas noch nie passiert. Nur wenn man kabellos gegen wireless tauscht oder den ‘externen’ XBox-Treiber installiert, kommt alles aus dem Tritt und muss wieder neu eingerichtet werden.

      Wenn du möchtest, kannst du mir deine retroarch.cfg an die E-Mailadresse aus dem Impressum schicken. Ich werfe dann mal einen Blick drauf. Falls du das machst, bräuchte ich zur Sicherheit noch mal die Info, was du damit verwendest: XBox mit oder ohne Kabel, original wireless Receiver von MS oder Nachbau, Kernel-Treiber oder den nachinstallierten?

  14. Guten Tag,

    ich bin es noch mal, soweit geht alles, aber mit dem Gamepad das möchte leider überhaupt nicht. Bin deiner Anleitung gefolgt und auch dieser von Github .

    Mein Problem, Controller leuchtet nur 1 LED alle schritte auch Logisch verfolgt, doch er bleibt Stumm. in RetroArch reagiert er überhaupt nicht immer Time Left und Spiele geht auch nichts mehr.

    Habe sogar den RetroPie neu aufgesetzt doch erfolglos.

  15. Vielen Dank für die tolle Anleitung. Ich habe 2 kabelgebundene XBox 360-Controller angeschlossen und entsprechend Deiner Beschreibung konfiguriert. Leider stimmt die Tastenbelegung überhaupt nicht mit dem überein, was ich im Konfigurationsscript angegeben habe. Es sind zwar alle Tasten belegt, allerdings völlig anders als erwartet, was das Spielen fast unmöglich macht.

    Ich dachte, Du hättest den gleichen Controller benutzt, gab es das Problem bei Dir nicht? Und hast Du eventuell eine Idee, was schief gelaufen sein könnte? Ansonsten werde ich wohl versuchen, die Tastenbelegung Stück für Stück anzupassen, fand es halt nur seltsam, dass bei gleichen Controllern die Tasten unterschiedlich belegt zu sein scheinen.

    1. Moin,
      ich habe die wireless Version verwendet, diese sendet andere Codes. Am besten richtest du die Controller nochmal per retroarch-joyconfig ein. Damit kannst du auch kontrollieren, welchen Code z. B. der Guide-Button hat.
      1. Danke für die schnelle Antwort. Die retroarch-joyconfig habe ich für beide Controller je einmal durchlaufen, danach dann den Inhalt in die retroarch.cfg kopiert. Das Problem ist jetzt, dass z.B. die Funktion der X-Taste nicht auf X liegt, sondern auf “Steuerkreuz links” usw.

        Das Problem tritt nicht auf, wenn ich nur einen Controller anschliesse, das Blinken ignoriere und das vorhandene Konfigurationsscript für den Controller benutze… Ich werde nachher mal die beiden Dateien vergleichen, der Unterschied sollte ja hoffentlich sichtbar sein. Ich war halt überrascht, dass die Tastenbelegung so stark von dem abweicht, was ich in der retroarch-joyconfig angegeben hatte.

  16. Hallo,
    ich wollt gern diesen Adapter hier benutzen: http://www.ebay.de/itm/Super-Nintendo-Snes-Adapter-USB-Top-/301570021090?pt=LH_DefaultDomain_77&hash=item4636f956e2 um originale SNES Pads zu benutzen. Erkannt wird der erste und lässt sich auch einstellen. Sobald ich aber einen zweiten in den Adapter stecke kann ich nur noch eine Taste am ersten Pad benutzen, der zweite allerdings lässt sich ganz normal benutzen… muss ich da noch einen speziellen Treiber installieren?
    grüße
    Thomas

  17. HI,

    Also ih bin ja begeistert vom Pi und habe nach dem B+ nun auch einen Pi2. Jetzt möchte ich gerne den Amiga Emulator zum Laufen bringen, aber es gelingt mir nicht zuverlässig. Ich habe einen Wireless xbox 360 controller, aber wenn ich ein Spiel starte, wird permanent nach rechts oder links gelaufen/geflogen… ich kann dagegensteuern aber der “Spieler” steht nie still. So ist es nicht spielbar. Was mache ich falsch. Halte mich an alle Anleitungen. Auch ist mir nicht klar, wie ich die mitgelieferten Controllersettings aus 2.6.0 auswählen kann? Und wie kommt man aus dem Amiga Spiel wieder raus? Ich möchte NUR mit Controler arbeiten. Oder MUSS ich die Maus zum ADF Image wählen auf jeden FAll nutzen.
    Und sehe ich das richtig, dass ich jetzt alle Emus mit nur einer Controlllereinstellung betreiben kann, also einmal einstellen (N64, Amiga, …) und gut ist 🙂

    das wichtigste wäre mir die gesamte Steuerung nur mit Wirelesscontroller, aber ich glaube das geht nicht. Die Hotkeys klappen auch noch nicht so wirklich. Evtl. bin ich auch zu doof oder zu alt (Amiga 1987…)

    also bis später,
    MArkus

    1. Hi,
      den Amiga-Abschnitt unter RetroPie: Die Emulatoren (Amiga, GBA, PSX) hast du bereits gelesen? Dort wird erwähnt, dass der XBox-Controller aktuell Probleme macht. Den Emulator nur mit dem Pad zu steuern ist aktuell nicht möglich.

      Die mitgelieferten Settings sind für Libretro / RetroArch und greifen dort automatisch. Es gehören aber nicht alle Emulatoren (z. B. Amiga, C64) dazu, auch darauf wird im eben erwähnten Beitrag eingegangen.
      Eine komplette Steuerung per Controller ist eigentlich nur bei Spielekonsolen möglich. Mit Libretro/RetroArch stellt dies auch kein Problem dar. Bei den standalone Emulatoren kann es aber immer wieder passieren, dass die sich auf eine Tastaur verlassen. Bei der Emulation von Rechnern / PCs nur auf ein Gamepad zusetzen, wird wohl in absehbarer Zeit nicht möglich sein.

  18. Hallo.
    Danke für die super Anleitung.

    Ich habe 2 xbox Controlller und wollte die blickenden leds ausmachen.

    Klappt bei einem auch super. Bloß den 2ten bekomme ich nicht hin.

    Bin mir nicht sicher wo genau ich den “next controller”-Befehl hin mache (vor/nach &) und wies da genau weiter geht.

    Könnten Sie mir evtl die Kommandozeile für 2 Controller zeigen??

    Das wäre super.

    Viele vielen Dank

    1. Moin,
      bitte nicht so förmlich 😉 .

      Falls du den Schritten auf der Seite gefolgt bist, müsste die Zeile etwa so aussehen:
      xboxdrv --daemon --id 0 --led 2 --deadzone 4000 --silent --trigger-as-button --next-controller --id 1 --led 3 --deadzone 4000 --silent --trigger-as-button --dbus disabled --detach-kernel-driver &

      Ich habe das Beispiel auch in den Text aufgenommen.

  19. Hi, Jetzt läuft alles soweit, habe nur noch ein kleines Problem. Habe den Hotkey Button auf L gelegt.
    Möchte den emulator mit Hotkey L + Select beenden.
    Habe wie beschrieben in de cfg die zeilen :
    input_enable_hotkey_btn = “4” (L-Taste)
    input_exit_emulator_btn = “8” (Select-Taste)
    hinzugefügt.
    Allerdings beendet sich der SNES Emulator jetzt sobald ich die L-Taste drücke.
    Darf dieHotkey Taste keine funktion haben oder was habe ich falsch gemacht?

    1. Moin,
      der Hotkey darf durchaus auch anderweitig verwendet werden.

      Mich wundert nur, dass der Emulator mit der L-Taste beendet wird. Bei Select würde ich es noch verstehen, da diese dem Exit-Befehl zugewiesen ist. Wie hast du das Pad eingerichtet? Läuft es automatisch, über ‘Register RetroArch controller’ oder manuell? In welche retroarch.cfg hast du die Zeilen eingetragen, die unter all oder snes? Werden deine Werte unter snes evtl. übersteuert? Die Werte für die Tasten stimmen auch und du hast keinen Tippfehler bei den Schaltern gemacht? Wenn alle Stricke reißen, könntest du mir deine retroarch.cfg mal an die Mail-Adresse aus dem Impressum schicken.

      1. Danke für die schnelle Antwort.
        Sehr suspekt wurde die ganze Sache als ich
        die cfg so umgeschrieben habe : Select = Hotkeybutton / Start = Exit Emulator
        Jetzt funktioniert es einwandfrei.
        Kann den Emulator beenden, und im Spiel funktionieren alle Tasten so wie ich sie manuel eingerichtet habe.
        Stört mich nicht weiter, diese Tastenkombination ist auch völlig in ordnung.
        Habe es nochmal mit L und Select probiert, funktioniert nicht, möglicherweise liegts daran das die pads so billig verarbeitet sind, das sie gerade so an der deklaration Elektroschrott vorbeischrammen 😀
        Nun funktionierts, alles super nur die Tastenbelegung für Doom usw müsste noch angepasst werden.

        Ps.: kannst du einen relativ erschwingliches Gamepad mit gutem dpad empfehlen? Mit diesen Nintendo Nachbauten werde ich nicht glücklich werden.

        1. Ich verwende, bis auf den Competiton PRO, ausschließlich die kabellosen XBox & PS3 Pads und die würde ich jetzt nicht gerade als günstig einstufen. Daher verfüge ich über keine Erfahrung mit anderen Pads.
          1. PS 3 Controller wären auch ne option, funktionieren da 2 Stück problemlos? Brauche ich dann noch einen Blutooth dongle?

          2. Da war ich etwas missverständlich. Die XBox-Pads nutze ich kabellos, die der PS3 über USB. Ich habe noch kein Bluetooth eingerichtet. Die XBox-Controller laufen problemlos, bei den Playstation-Pads scheint es aber etwas hakelig zu sein.
  20. Hi Leute,
    tolle Anleitung , fast nicht zu toppen.
    Hab nur ein Problem. Wollte ein Gampad “Speedlink Thunderbird” einrichten.
    Ist ja soweit alles klar. Nur sind mir die eingestellten Zeiten, bis zum Timeout, einfach zu kurz. Kommen garnicht richtig zum durchlesen.
    Bin halt nicht der schnellste. Kann man da was ändern

  21. Hi! Tolle Anleitung! Danke dafür. Ich habe es nach einiger Recherche geschafft, zwei PS3 Controller per BT mit dem PI zu koppeln und einzurichten. Funktioniert soweit auch – also beide Controller werden erkannt und ich kann auch Emulationstation mit beiden kontrollieren. Habe dann die Buttons für beide Controller konfiguriert und die retroarch.cfg entsprechend angepasst. Nun das Seltsame: Als einzige SNES Game funktioniert Mario Kart mit beiden Controllern problemlos. In allen anderen Spielen, die ich probiert habe, scheint der zweite Controller nicht zu existieren. Bin ehrlich gesagt etwas ratlos. Hast Du evtl. eine Idee, wo ich schauen könnte?
    THX Denim

    1. Moin,
      das klingt merkwürdig. Auf den ersten Blick habe ich keine Idee, warum es bei einem Spiel funktionieren sollte und bei einem anderen nicht. Die Controller werden ja vom Emulator eingebunden, das Spiel ist dabei erstmal zweitrangig (es muss aber natürlich mehrere Spieler unterstützen). Hast du mal ein negativ Beispiel, bei welchem Spiel es nicht klappt?

      Ich habe mir jetzt erst einen BT-Adapter zugelegt, um auch mal eine Anleitung für die Einrichtung von PS3-Controllern zu verfassen. Dann würde ich das dabei gleich mal ausprobieren.

      Gruß,
      Jörn

  22. Mir ist da noch was eingefallen, wenn ich nu von den Dateien die beim Controllereinrichten verändert werden, vor jeglicher Konfiguration eine Sicherheitskopie einrichte.
    Und dann sagen wir mal 2 x Xbox360 Pads einrichte und mir diese /opt/retropie/emulators/retroarch/XboxPlayer*.cfg auch wieder speicher und diesen Schritt wiederhole ich mit USB Competition Joysticks und SNES Pads und was ich halt so will.
    Dann könnte ich mir doch in /etc/emulationstation/es_systems.cfg ein Script verlinken welches mir die gewünschte Controller Konfiguration ins System schreibt, oder?
    Das Script müsste ja nur fragen welche Pads man benutzen will und macht ein sudo cat /opt/retropie/emulators/retroarch/PadMeinerWahlerPlayer*.cfg >> retroarch.cfg

    1. Möglich ist das, ob es nötig ist, hängt davon ab, wie das ganze funktionieren soll.
      Dein Vorgehen betrifft ja nur RetroArch. Möchtest du jedes Mal abfragen bzw. automatisch erkennen, welche Controller gerade angemeldet sind oder sollen bei bestimmten Emulatoren immer die gleichen Controller verwendet werden (z. B. bei NES und SNES immer die SNES-Pads)? Bei der zweiten Möglichkeit müsste es doch reichen, wenn du die Controller-Einstellungen für jeden RetroArch-Emulator getrennt speicherst.

      Sei vorsichtig mit cat, das hängt immer an! Du müsstest also noch eine retroarch.cfg ohne Controller-Einstellungen als Basis vorhalten.

      1. Ja genau hast recht eine retroarch als blanko .bak haben und ab gehts. Na ich dachte so nach Lust und laune wechseln können. Die Competition Pros machen natürlich bei SNES und Co. keinen Sinn, aber ansonsten fröhlich freu schnauze wechseln können, wär doch irgendwie cool.
        Das wäre aber die einzige Datei die da berarbeitet wird, ne? die retroarch.cfg unter configs/all?
        Ich glaube das probiere ich mal 🙂

  23. Wenn ich original Xbox 360 Pads bereits besitze, dann bräuchte ich doch nur ein USB Empfänger um die beim RetroPie zu benutzen oder? Welche könnte man da nehmen?

    1. Ich verwende den original Receiver von MicroSoft. Nachbauten sollten auch gehen, aber wie immer ohne Garantie. Der Treiber ist übrigens schon im Kernel. Falls dich das Blinken stört, kannst du auch einen alternativen Treiber installieren.
  24. Sagen wir mal ich hätte 2 Xbox 360 Pads konfiguriert alles läuft alles gut, wenn ich aber nun VICE oder UAE4ALL starte, dann könnte ich die doch einfach ausstöpseln und zb. 2 usb competition Pro Controller anschließen und benutzen, oder? Das sind ja keine RetroArch Emulatoren.

      1. Ja sehr cool, das macht die Sache ja sehr einfach. Mit einem größeren USB Hub die beiden Competitions “immer” eingestöpselt lassen und die bei VICE und Co. zu nutzen geht wahrscheinlich nicht, wenn man die beiden 360er Pads nicht entfernt, und die ja eigentlich für alles andere gehen soll, ne?

  25. Vielen Dank für dieses mega gute Tutorial

    Habe allerdings ein Problem, wenn ich auf meinem billig USB SNES Style Contoller Start drücke beendet sich der Emulator ich komme zurück zur Auswahl. In der CFG habe ich nichts gefunden. Weiß jemand Rat?

    1. Hi,
      ich hätte da noch einige Fragen.

      • Hast du dein Pad manuell eingerichtet oder hat es automatisch funktioniert und du nutzt es direkt?
      • Geht es in der EmulationStation?
      • Welchen Emulator bzw. welches Verzeichnis unter roms nutzt du: snes, snes-pisnes oder snes-snes9xrpi?
      1. Hi, ich habe einfach deine Anleitung von Vorne bis Hinten durchgeführt, obe das Pad vorher schon funktioniert hat kann ich nicht sagen. Es funktioniert in der Emulator Station sowie im Emulator auch. Habe Player 1 und 2 konfiguriert. Ich benutze den SNES Emulator den das Programm automatisch benutzt sobald man Roms auf die SD karte in den Ordner snes-snes9xrpi packt.
        Danke schonmal für deine Bemühungen

        1. SNES9XRPI gehört nicht zu LibRetro / RetroArch! Daher haben deine Einstellungen dort auch keine Auswirkungen.

          Der Emulator hat eine eigene Configdatei, die du unter ~/.snes96_snapshots/input.config finden solltest.
          Eigentlich gibt es das Programm configTool, mit dem du diese Datei erstellen kannst. Dieses wird aber beim aktuellen Image nicht mitgeliefert. Du könntest es dir selbst erstellen, wenn du den Quellcode des Emulators herunterlädst und übersetzt.
          Um ohne das Tool an die Button-Nr. für die input.config zu kommen, kannst du jstest /dev/js0 verwenden.
          Aber noch ein Hinweis: Die Pi-Version des Emulators ist schon etwas älter (sie basiert auf 1.39) und unterstützt z. B. keine Super-FX Spiele (Star Fox / Star Wing).

          Warum verwendest du nicht einfach den LibRetro / RetroArch-Emulator, der das snes-Verzeichnis benutzt?

  26. Hi!

    Hast du schonmal versucht mit mehr als 2 Spielern zu spielen?
    Funktioniert bei mir weder bei NES/SNES/PSX und N64.
    Wie kann man den Multitab aktivieren?

    1. Offtopic

      Ich nehme an, du warst nur ungeduldig und hast deshalb einen weiteren Post als “Test” mit gleichem Inhalt abgeschickt. Daher habe ich deinen zweiten Post gelöscht! Ich wäre trotzdem dankbar, wenn du das in Zukunft vermeidest. Eigentlich sollte in rot im Kommentarfeld stehen, dass ich jeden Post erst freigeben muss.

      1. Du hast recht, sorry 😛
        Ich hatte meinen Post nicht mehr gesehen.
        Hast du denn sonst eine Idee um mit mehr als 2 Spielern zu spielen?
        Grüße

        1. Ich denke, dass das bisher keiner der SNES-Emulatoren für den Pi beherrscht. Wenn ich mich etwas umschaue, sieht es nicht rosig aus…

          • PocketSNES (LibRetro / RetroArch) wurde ursprünglich für Smartphones entwickelt und hat keine solche Funktion.
          • Bei PiSNES ist die Funktion anscheinend im Source deaktiviert worden.
          • SNES9X kann das zwar prinzipiell, aber nicht auf dem Pi. Verwendet man den Parameter -mp oder -multiplayer5 startet der Emulator erst gar nicht.
          1. Vielen Dank für das Umsehen. Damitbestätigst du leider nur meine Rechercheergebnisse 🙁 Grüße!

  27. Danke für deine tollen Anleitungen. 🙂

    Eine coole sache wäre es wenn du eine Anleitung machen könntest für BT Controller. Z.b. wie man einen Controller mit dem BT Dongle verbindet und dann die Tasten vergibt, falls das anders funktioniert

    Grüße

    Andi

  28. Ich habe das Problem wenn ich RetroPi/Emulatorstation das erste mal starte wird der Xbox Controller zwar erkannt und ich kann die Tasten vergeben aber nach dem neustart ist alles wieder verstellt und zwar so das ich nichts mehr machen. Es scheint als würde er nach dem neustart die Tasten einfach neu belegen.

    Hier mal meine .”emulationstation/es_input.cfg” nach dem neustart wo die Buttons falsch belegt sind:

    http://pastebin.com/gEAm6F99

    Habe auch versucht diese zu löschen und neu zu erstellen aber dann wird es leider wieder nicht gespeichert nach dem restart.

    1. Update:
      Hier mal mein “/.emulationstation/es_log.txt” Log nachdem ich die /es_input.cfg gelöscht habe:

      http://pastebin.com/BSYDKvpx

      Aus irgendeinem Grund wird mir in der Emulatorstation dann auch gesagt das er 3 Gamepads erkannt hat obwohl nur 1 Xbox Controller angeschlossen ist.

      1. Moin,
        benutzt Du die Version 2.6.0? Auf dem Raspi2? Und welche Schritte hast Du befolgt den Controller einzurichten, nur die vom Startbildschirm der EmuStation, oder noch weitere? Denn diese Anzeige das 3 Controller gefunden wurden hatte ich auch kurz. In einer Datei habe ich einen Eintrag auskommentiert und die Anzeige war wieder richtig. Ich schau mal nach wo das war, aber sag trotzdem mal was genau Du gemacht hast.

          1. Hast du mal versucht unter /etc/default/xboxdrv nur einen Controller anzumelden (CONTROLLER_NUM=1)?

            Ich habe dein Einrichtung eben aus Spass mal mit meinem original MS-Receiver durchgespielt. Es gibt in den Logs einige Unterschiede, keine Ahnung ob die am anderen Receiver liegen.

            Als erster fällt mir auf, das bei mir in der es_log.txt die Treiber alle durchnummeriert (#2, #3) sind:
            lvl2: Added known joystick Xbox Gamepad (userspace driver) (instance ID: 0, d$...
            lvl2: Added known joystick Xbox Gamepad (userspace driver) #2 (instance ID: 1$...
            lvl2: Added known joystick Xbox Gamepad (userspace driver) #3 (instance ID: 2$...

            bei dir sehen die ersten beiden identisch aus (keine #), erst beim dritten steht #2. Außerdem stehen bei mir dort keine GUIDs, wie bei dir…

            lvl2: Added unconfigured joystick Xbox Gamepad (userspace driver) (GUID: 0000000058626f782047616d65706100, instance ID: 0, device index: 0).
            lvl2: Added unconfigured joystick Xbox Gamepad (userspace driver) (GUID: 0000000058626f782047616d65706100, instance ID: 1, device index: 1).
            lvl2: Added unconfigured joystick Xbox Gamepad (userspace driver) #2 (GUID: 0000000058626f782047616d65706100, instance ID: 2, device index: 2).

            Meine es_input.cfg sieht dann exakt wie deine aus.

            Musst du den Treiber wirklich installieren? Eigentlich gibt es einen Kernel-Treiber für den XBox-Controller. Klappt dieser, auch wenn die LEDs blinken?

            Was mir noch einfällt: Hast du die Scripte abgetippt oder per Copy&Paste übernommen? Sprich kann sich irgendwo ein Tippfehler eingeschlichen haben?

          2. Ja ich habe CONTROLLER_NUM auf 1.
            ICh habe Copy & Paste genutzt für die SCript aber habe diese um Fehler auszuschließen schon selbst einmal kontrolliert.

            Hatte direkt denn eigenen Treiber installiert und nicht den Kerneltreiber ausprobiert. Ich denke ich werde die Tage einfach alles komplett neu aufsetzten da ich den Fehler nicht finde aber auf meinm Pi B+ hatte ich diese Probleme garnicht.

      2. Hi,
        wie Thomas bereits vermutet, werden wohl die drei erkannten Controller das Problem sein:
        lvl2: Added unconfigured joystick Xbox Gamepad (userspace driver) (GUID: 0000000058626f782047616d65706100, instance ID: 0, device index: 0).
        lvl2: Added unconfigured joystick Xbox Gamepad (userspace driver) (GUID: 0000000058626f782047616d65706100, instance ID: 1, device index: 1).
        lvl2: Added unconfigured joystick Xbox Gamepad (userspace driver) #2 (GUID: 0000000058626f782047616d65706100, instance ID: 2, device index: 2).

        Es wäre evtl. noch hilfreich zu wissen, welchen Pi du benutzt und ob es sich um einen original kabelgebundenen MS-Controller handelt. Wie (USB-Hub?) und was ist sonst noch angeschlossen (Maus, Tastatur, USB-Stick usw.)?
  29. Hi, bei der N64 Controllerconfig muss man Fall die groß/kleinschreibung beachten, sonst klappts nicht 😉
    Weisst du schon was dein nächster Blog für ein Thema beinhaltet?

      1. Super, da freue ich mich schon drauf!
        Amiga läuft bei mir leider noch nicht mit meinem XBOX Controller.
        Es lässt sich aber genau wie bei GitHub beschrieben starten. Einfach Roms und Kick.Rom hinzufügen und gut ist. Die GUI Bedienung per Tastatur ist einfach. Interessant wäre die Einbindung eines (oder mehrere?) Controller. Funktionierte leider per GUI und auch per uae4all.conf nicht :-/

        1. @Tim: Bei mir funktioniert der Xbox360 Controller mit UAE4ALL-RPi, also dem Emulator der nicht dabei ist, sondern den man zusätzlich installieren kann. Ich wollt noch schauen, dass ich den richtig ins Emu-Menu bekomme, dann wäre der Punkt für mich (fast) abgehakt 😀

          1. Benutzt du denn auch RPi2 mit Retropie 2.6? Da ist uae4all schon vorinstalliert dabei. Dort hab ich aber halt noch Controllerprobleme. Tastatur funktioniert einwandfrei

          2. @Tim: Jau der Pi 2 mit V2.6.0, da hatte ich auch Probleme mit dem UAE4ALL. Aber das UAE4ALL-Rpi find ich viel besser. Xbox Controller geht und das Menu von dem Emulator lässt sich mit dem Pad steuern, also ADF’s wechseln und so weiter, total super 🙂

  30. Hi, deine Tutorials sind super, danke dafür! 🙂
    Eine Frage, ist eigentlich keine XBOX 1 emulator vorhanden?
    Wenn ja, wieso nicht?^^

  31. Hallo,

    danke für den Hinweiß mit der neuen Version, ist jetzt schon um einiges klarer =).

    Dennoch reagieren meine Controller leider bei mupen64 leider immer noch nicht.

    Kann mit der Tastatur alles steuern aber in N64 leider nichts. Gehört mupen64 vielleicht nicht zu retroarch?

    Mit einem anderem Gamepad geht es, aber die individuelle Tastenbelegung wird dann auch nicht berücksichtigt.

    Gruß Daniel

    1. Hi,
      mupen64 gehört und gehört nicht zu RetroArch 😉 .

      Es gibt zwei Fassungen:

      • mupen64plus-libretro verwendet das n64-Verzeichnis und gehört zu RetroArch.
      • mupen64plus verwendet das n64-mupen64plus-Verzeichnis und gehört nicht zu RetroArch.
      1. ahh , danke für den Hinweis. Wie kann ich dann denn aber beim “nicht Retroarch” N64 Emulator die Gamepads konfigurieren.? Gruß Daniel

          1. Hallo,

            zu der N64Controller Programmierung. Hab soweit alles hinbekommen, viele Dank schon mal!
            Eine Frage noch: Die Sondertastenbelegung will einfach nicht.
            Verstehe auch nicht so recht, was der Befehl “JOBxx” bewirkt? Muss man stets JOB (wenn ja, wieso?) schreiben, gefolgt von der button nummer?

  32. Ich verstehe, dass hier nicht alle Konstellationen abgedeckt werden können, aber vielleicht darf man sich etwas wünschen?

    Two player mit 2 x Speedlink Competition Pro USB für den neuen UAE4ALL (Amiga) ist doch bestimmt kein seltenes Szenario 🙂

    Leider komme ich da allein nicht hin und bin auch mit den Suchmaschinen bisher nicht weitergekommen. Wäre(n) auch über Verweise auf andere hilfreiche Quellen dankbar, falls das hier den Rahmen sprengen sollte.

    Besten Dank und Grüße!

    1. Hi,
      Quellen habe ich leider auch keine für dich.

      Ich habe mir bisher noch nicht mal die neue UAE4ALL-Version angeschaut und zwei Spieler ignoriere ich meistens.

      Da ich nur einen Competition USB habe, könnte ich mir das max. mal in Kombination mit einem XBox-Gamepad ansehen.

      1. Also die Kombination mit dem XBOX-Controller könnte eventuell schon weiterhelfen. Habe noch einen Logitech F710. Die verhalten sich glaube ich recht ähnlich und vielleicht bekomme ich das mit dem CP USB dann selbst hingebastelt.

        Wie gesagt, nur falls es passt und vielleicht noch andere interessiert.

        Viele Grüße
        Sascha

  33. Danke auch für diesen Beitrag.

    Ich habe noch eine Frage zu den Updates. Im vorigen Beitrag steht, dass man diese mittels “sudo apt-get update && sudo apt-get upgrade -y” holen & installieren kann. In diesem Beitrag schreibst du jetzt aber, dass das Update aus dem Setup-Script gestrichen wurde, da es zu Problemen kommen kann.

    Werden jetzt mit obigem Befehl trotzdem alle Emulatoren ect. aktualisiert oder werden damit nur andere Komponenten aktuell gehalten?

    1. Hallo,
      mit apt-get update wird die sog. Paketliste (Liste der installierbaren Komponenten) neu eingelesen, apt-get upgrade aktualisiert die über diese Liste installierten Programme.
      Die RetroPie-Emulatoren wurden aber nicht darüber installiert! Daher wirkt sich apt-get bei RetroPie nur auf das Betriebssystem aus. Die Emulatoren müssen hier über einen anderen Weg aktualisiert werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Protected by WP Anti Spam