staging.inyokaproject.org

dead zone / xpad / xboxdrv / Xbox 360 Controller

Status: Gelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

ironsteve

Avatar von ironsteve

Anmeldungsdatum:
29. Mai 2009

Beiträge: Zähle...

Hallo zusammen,

ich habe den Steam-Client für Linux (http://steamcommunity.com/linux) angetestet.

Einige der Spiele wollte ich mit meinem Xbox 360 Controller bedienen. Das Kernel-Modul "xpad" erkennt die Hardware bei mir problemlos und sämtliche Funktionen des Controllers stehen zur Verfügung. Dummerweise laufen die Spielfiguren in den diversen Spielen von alleine. Anscheinend stehen die Analogen Sticks nicht ganz mittig und das wird als Bewegung interpretiert. Daher habe ich versucht eine "dead zone" einzurichten - ein Art Toleranzzone innerhalb dessen keine Bewegung stattfindet. Das Tool "jstest-gtk" stellt (unter anderem zu diesem Zweck) eine komfortable grafische Oberfläche zur Verfügung.

Leider musste ich feststellen, dass die veränderten Einstellungen keine Auswirkung haben. Die Einstellungen aus "jstest-gtk" bzw. "jscal" werden einfach ignoriert. Anscheinend erhalten die Spiele direkt aus dem Simple DirectMedia Layer (SDL) die Eingaben. Daher habe ich mich für xboxdrv (http://pingus.seul.org/~grumbel/xboxdrv/) entschieden. Hier kann die dead zone direkt auf der Ebene des Treibers eingestellt werden. Unter Ubuntu 12.04 LTS kann xboxdrv wie folgt installiert werden:

1
2
3
sudo add-apt-repository ppa:grumbel/ppa
sudo apt-get update
sudo apt-get install xboxdrv

Das Kernel-Modul "xpad" habe ich blockiert:

1
sudo nano /etc/modprobe.d/blacklist.conf

Folgende Zeile hinzufügen:

blacklist xpad

Für xboxdrv habe ich eine Konfiguration angelegt

1
nano ~/.config/xbox360.cfg

mit folgenden Inhalt:

xboxdrv]
silent=true
quiet=true
deadzone=4000
mimic-xpad=true

[ui-buttonmap]
A=BTN_A
B=BTN_B
X=BTN_X
Y=BTN_Y
LB=BTN_TL
RB=BTN_TR
BACK=BTN_SELECT
START=BTN_START
GUIDE=BTN_MODE
TL=BTN_THUMBL
TR=BTN_THUMBR

Per

1
sudo nano /etc/rc.local

habe ich durch den Eintrag (eine Zeile über "exit 0")

xboxdrv -c ~/.config/xbox360.cfg &

dafür gesorgt, dass xboxdrv beim Systemstart geladen wird. Nach einem Neustart stehen sämtliche Funktionen des Controllers zur Verüfung und die Spielfiguren laufen nicht mehr von alleine. Voraussetzung ist allerdings, dass der Controller beim Systemstart eingesteckt ist und bleibt. Im Zeitalter von Plug&Play / Hot-Plug somit eine eher suboptimale Lösung. Vielleicht könnte man das durch eine udev-Regel und/oder dem Start von xboxdrv als Daemon realisieren!? Das habe ich leider nicht hinbekommen. Bei mehr als einem Xbox 360 Controller bin ich ebenfalls überfragt... Eventuell kann der ein oder andere trotzdem was damit anfangen 😉

VG,

ironsteve

Moderiert von tomtomtom:

Verschoben, da keine Support-Frage.

Apfelfrisch

Avatar von Apfelfrisch

Anmeldungsdatum:
12. August 2006

Beiträge: 652

👍

Genau mein Problem danke. Brauch ich mich also nicht mehr mit der Frage rumprügeln ob diese Einstellung auch mit dem Kerneltreiber geht.

Ab 12.10 ist der Userspacetreiber übrigens direkt in den Quellen.

P.s. Sollte ich mal Zeit und Muße haben, guck ich mal ob ich ne UDEV-Regel gebastelt bekomm, meld mich dann nochmal.

P.s.s

-D, --daemon

Run xboxdrv as daemon. If this option is given xboxdrv will listen to udev for USB connection events and launch driver threads for newly connected controllers.

Wird getestet sobal ich zuhause bin

ironsteve

(Themenstarter)
Avatar von ironsteve

Anmeldungsdatum:
29. Mai 2009

Beiträge: 9

Hallo Apfelfrisch,

vielen Dank für deine Rückmeldung ☺

Folgendes habe ich jetzt ausprobiert:

Start-Skript xboxdrv

1
sudo nano /usr/local/bin/xbox360.sh

mit Inhalt:

#!/bin/bash
xboxdrv -c /usr/local/bin/xbox360.cfg &

Das Skript ist ausführbar:

sudo chmod +x /usr/local/bin/xbox360.sh

Info aus xboxdrv / lsusb:

1
lsusb | grep Microsoft

ergibt

Bus 005 Device 004: ID 045e:028e Microsoft Corp. Xbox360 Controller

Anlage einer udev-Regel mit

1
sudo nano /etc/udev/rules.d/75-xbox360.rules

und Inhalt:

SUBSYSTEM=="usb", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="028e", ACTION=="add", RUN+="/usr/local/bin/xbox360.sh"

Ein und -ausstecken funktioniert - zumindest für einen Controller 😉

Hast du vielleicht eine Idee, wie man das Start-Skript verändern könnte um bei mehreren Contollern den Betrieb zu ermöglichen?

Apfelfrisch

Avatar von Apfelfrisch

Anmeldungsdatum:
12. August 2006

Beiträge: 652

Für einen Controler geht auch noch etwas einfacher:

xboxdrv --daemon --dbus disabled --config /pfadZurConfig

so läuft es ohne zusätzliche Regeln.

Ohne --dbus disabled bekomme ich eine Fehlermeldung, (scheint Debian/Ubuntu spez. zu sein) des deamons, allerdings führt diese Option auch dazu das es nur für einen Controller funktioniert.

https://groups.google.com/forum/?fromgroups=#!topic/xboxdrv/L-mRi0AIVuA

Zu deine Lösung; Sehr interessant, leider hab ich nur einen Controller deshalb kann ichs nicht mehreren Test. Evt. funktioniert die obere Lösung sogar mit zweien oder bei dir läuft es ohne --dbus disabled - hab hier 13.04 laufen. Kannst ja mal Testen.

ironsteve

(Themenstarter)
Avatar von ironsteve

Anmeldungsdatum:
29. Mai 2009

Beiträge: 9

Auf die gleiche Diskussion bin ich eben auch gestoßen 😀

Ich habe zwei Controller - die Lösung ist tatsächlich einfacher als gedacht. Per

1
sudo nano /etc/rc.local

folgendes eintragen für zwei Controller:

xboxdrv --daemon --dbus disabled -c /usr/local/bin/xbox360.cfg --next-controller -c /usr/local/bin/xbox360.cfg

Drei Controller:

xboxdrv --daemon --dbus disabled -c /usr/local/bin/xbox360.cfg --next-controller -c /usr/local/bin/xbox360.cfg  --next-controller -c /usr/local/bin/xbox360.cfg

Hierbei muss man für jeden Controller zusätzlich "--next-controller -c /usr/local/bin/xbox360.cfg" hinzufügen. Der Daemon hält dann entsprechende Slots frei.

Vielen Dank für deine Hilfe! 👍

Apfelfrisch

Avatar von Apfelfrisch

Anmeldungsdatum:
12. August 2006

Beiträge: 652

Sauber, dann es die Sache nun ja Rund 👍

ironsteve

(Themenstarter)
Avatar von ironsteve

Anmeldungsdatum:
29. Mai 2009

Beiträge: 9

Mir fällt gerade auf, dass sich bei meinem ersten Post ein Fehler eingeschlichen hat. Es fehlte "[" bei der Konfiguration:

[xboxdrv]
silent=true
quiet=true
deadzone=4000
mimic-xpad=true

[ui-buttonmap]
A=BTN_A
B=BTN_B
X=BTN_X
Y=BTN_Y
LB=BTN_TL
RB=BTN_TR
BACK=BTN_SELECT
START=BTN_START
GUIDE=BTN_MODE
TL=BTN_THUMBL
TR=BTN_THUMBR

Jetzt sollte es passen 😉

Antworten |