Steam Controller Support
As of version 2.6.0, the library supports the steam controller natively, meaning you can access all its controls. While this controller does require a specific USB dongle, unlike most dongle-based controllers it is able to report disconnections - the device nodes only appear if the controller is turned on.
- class approxeng.input.steamcontroller.SteamController(dead_zone=0.1, hot_zone=0.05, **kwargs)[source]
Wireless steam controller. As of Jan 2021 this works with modern linux installations without any messing around, and supports a lot of extra controls as a result!
The unusual controls are as follows, firstly buttons. Note that both the trackpads have touch buttons as well as the click (on the right trackpad) and the d-pad ‘buttons’ on the left one. The controller doesn’t have a true d-pad, but you can use the left trackpad in place of one (although it’s heavy to activate)
Standard name
Steam Controller
square
X
triangle
Y
circle
B
cross
A
ls
Left stick click
rs
Right trackpad click
rtouch
Right trackpad touch
select
Left arrow
start
Right arrow
home
Steam button
dleft
DPad left click
dup
DPad up click
dright
DPad right click
ddown
DPad down click
dtouch
DPad (left trackpad) touch
l1
Top left trigger
l2
Middle left trigger
l3
Base left trigger
r1
Top right trigger
r2
Middle right trigger
r3
Base right trigger
The controller has three xy axes with corresponding circular axes as well as analogue triggers on the middle trigger buttons:
Standard name
Steam Controller
lx
Stick horizontal
ly
Stick vertical
rx
Right trackpad horizontal
ry
Right trackpad vertical
dx
Left trackpad horizontal
dy
Left trackpad vertical
lt
Middle left trigger
rt
Middle right trigger
- __init__(dead_zone=0.1, hot_zone=0.05, **kwargs)[source]
Populate the controller name, button set and axis set.
- Parameters:
controls – A list of
Button
,CentredAxis
,TriggerAxis
andBinaryAxis
instancesnode_mappings – A dict from device name to a prefix which will be applied to all events from nodes with a matching name before dispatching the corresponding events. This is used to handle controller types which create multiple nodes in /dev/input by keying on the device names reported to evdev for each node. Nodes are grouped by physical or unique ID first so should, in an ideal world at least, all correspond to the same physical controller. This is necessary to support some controllers on modern kernels, particularly 4.15. If not specified, or none, then no per-node renaming is applied. Device names which do not appear in this map are not assigned a prefix, so it’s legitimate to only assign prefixes for ‘new’ functionality which has magically appeared in a later kernel. Similarly, this is ignored if there is only one device node bound to the controller instance, so the best practice is to leave the older mappings named simply by their code, and only use this to handle secondary device nodes such as motion sensors.
dead_zone – If specified, this is applied to all axes
hot_zone – If specified, this is applied to all axes
ff_device – If specified, this is a force feedback compatible device node, defaults to None