Hallo zusammen,
ich hab ein Raspberri Pi 2 mit OSMC am Laufen. Darauf ist Retropie installiert welches mittels Shell-Script gestartet wird, welches ich im Eminence Skin verlinkt habe.
Ziel ist es mit dem Xbox 360 Controller sowohl Kodi als auch Retropie zu bedienen.
retropie.sh
#!/bin/bash
# This scripts starts the emulationstation watchdog deamon and
# emulationstation itself while stopping KODI afterwards.
# Script by mcobit
sudo openvt -c 7 -s -f clear
sudo openvt -c 7 -s -f echo "Running emulationstation from KODI"
sudo su osmc -c "sh /home/osmc/retropie_watchdog.sh &" &
sudo su osmc -c "nohup openvt -c 7 -f -s emulationstation >/dev/null 2>&1 &" &
sudo openvt -c 7 -s -f clear
sleep 2
sudo su -c "systemctl stop mediacenter &" &
# xbox controller mapping:
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 &
sleep 1
exit
Alles anzeigen
Zeile 15 hab ich eingefügt, um das mapping der tasten für Retropie/Emulationstation zurückzusetzen, funktioniert aber nicht.
Zeile 8 startet ein zweites Script (retropie_watchdog.sh) welches nach Beenden von Retropie wieder Kodi startet:
#!/bin/bash
sleep 2
while [ true ]; do
VAR1="$(pgrep emulatio)"
if [ ! "$VAR1" ]; then
sudo openvt -c 7 -s -f clear
sudo openvt -c 7 -s -f echo "Emulationstation quit... Starting KODI."
sleep 1
sudo openvt -c 7 -f clear
# xbox controller mapping:
/usr/bin/xboxdrv --config /home/osmc/xbmc.ini --silent --autofire RT=25 --autofire LT=25 --autofire du=200 --autofire dd=200 --autofire dl=500 --autofire dr=500 &
sleep 1
sudo su -c "sudo systemctl restart mediacenter &" &
sleep 1
exit
else
sleep 2
fi
done
Alles anzeigen
Ich hatte Anfangs noch nicht den xboxdrv drauf. Da wurde der Controller in Kodi nicht richtig untersützt, aber in Retropie vollständig verfügbar. Sprich er wurde als Controller erkannt, alle Tasten ließen sich verwenden und in retroarch zuweisen.
Nachdem ich den xboxdrv installiert hatte und eine Mapping config erstellt hatte, funktionierte er zunächst in Kodi perfekt:
Startscript:
#!/bin/bash
rmmod xpad
modprobe uinput
modprobe joydev
/usr/bin/xboxdrv --config /home/osmc/xbmc.ini --silent --autofire RT=25 --autofire LT=25 --autofire du=200 --autofire dd=200 --autofire dl=500 --autofire dr=500 &
xmbc.ini
# XBMC Configuration
# ==================
#X1: 0 Y1: 0 X2: 0 Y2: 0 du:0 dd:0 dl:0 dr:0 start:0 back:0 TL:0 TR:0 A: 0 B: 0 X: 0 Y: 0 black: 0 white: 0 LT: 0 RT: 0
[xboxdrv]
#ui-clear = true
extra-devices = false
extra-events = false
deadzone = 6000
device-name = "Microsoft Xbox 360 Wireless Controller (PC)"
[ui-buttonmap]
# Face buttons
A = KEY_ENTER
B = KEY_BACKSPACE
X = KEY_X
Y = KEY_ESC
# D-Pad
du = KEY_UP
dd = KEY_DOWN
dl = KEY_LEFT
dr = KEY_RIGHT
# Start / Back buttons
start = KEY_SPACE
back = KEY_L
# Bumper Left / Right
white = KEY_C
black = KEY_I
# Stick buttons
TL = BTN_RIGHT # Left stick buttons
TR = BTN_LEFT # Right stick buttons
# Triggers Right / Left
RT = KEY_EQUAL # Right trigger
LT = KEY_MINUS # Left trigger
[ui-axismap]
#x2=REL_RX:10
#y2=REL_RY:-10
x1=REL_X:10
y1=REL_Y:10
# The resp filter moves the neutral position to zero to work around a
# bug in XBMC, that causes bogus events when neutral position is
# elsewhere. It loses a bit of precision in the trigger as result, but
# that isn't noticeable.
LT^resp:127:255=ABS_Z
RT^resp:127:255=ABS_RZ
# EOF #
Alles anzeigen
Wenn ich aber nun Retropie starte bleibt das Tastur-Mapping des Controllers erhalten und Retropie erkennt eine Tastatur wenn ich den Controller nutze. Das möchte ich natürlich nicht, weil mir dann nicht alle Tasten zur Verfügung stehen. Die Analog-Sticks und andere Tasten funktionieren auch nicht, und die bräuchte ich doch schon für den ein oder anderen Emulator wie PSX.
Ich hab schon versucht vor dem Aufruf des Treibers bzw. der Mapping-Konfiguration den Treiber zu killen (kill $(pgrep xboxdrv) ), aber dann spinnt der Controller und geht gar nicht mehr. Irgendwie komm ich grad nicht weiter...
Gibt es eine Möglichkeit das Mapping zu wechseln ohne den Treiber zu beenden? Quasi so, dass der Controller in Retropie "naturell" erkannt wird...
EDIT:
Nach einigen Versuchen bin ich noch nicht am Ziel, aber etwas schlauer.
Starte ich den Rpi mittels
sudo rmmod xpad
sudo modprobe uinput
sudo modprobe joydev
sudo 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 &
wird der Controller in Kodi nicht erkannt (weil keine Tasten der Tastatur zugeordnet).
Aber dafür funzt er in Retropie/Emulationstation und wird nativ erkannt.
Starte ich den Rpi nun aber mittels
#sudo rmmod xpad
#sudo modprobe uinput
#sudo modprobe joydev
#/usr/bin/xboxdrv --config /home/osmc/xbmc.ini --silent --autofire RT=25 --autofire LT=25 --autofire du=100 --autofire dd=100 --autofire dl=500 --autofire dr=500 &
also einer Keymapping Konfiguration verhält es sich genau andersrum. In Kodi gehts, in Retropie nicht (wird nur als Tastatur erkannt)
Ich hab die Befehle auch schon im Startscript für Retropie eingebaut, funzt aber nicht. Der Controller wird dann weiterhin so verwendet wie beim Booten konfiguriert.
Ich versuchte noch mit sudo kill $(pgrep xboxdrv) den Treiber vorher zu beenden, aber da schaltet sich dann der controller ab und es ging trotzdem nicht.
Komischerweise konnte ich den jeweil anderen mapping Befehl über SSH per console starten und dann gings, aber das ist nicht des Rätsels Lösung...