Skip to content

Steam Controller

The steam controller works on Linux perfectly. However some distributions do not have certain configurations done that are necessary for the controller to work as its intended. The following guide will show you how to set this all up.

CREATE THE USER GROUP

First we are going to be fixing some permissions. To do this correctly we need to choose a group name that will have all the permissions set correctly for any members. If you are the only user on the system that will be using the steam controller, you can skip to the third section and just use your user's group.

    sudo groupadd GROUPNAME

ADD USER(S) TO NEW GROUP

Now for each user that needs to be added to the group we issue the following command:

    sudo usermod -a -G GROUPNAME USERNAME

CREATE UDEV RULE

The following block of text will need to be put into a file. This file can be called anything, but I would suggest calling it something akin to "steam controller" so you can keep track of whats what. On Fedora 28, this file needs to be plopped into /etc/udev/rules.d/. Most distributions will require this task to be done as root. Take note of the fourth line, where there is the part that states GROUP. Change what is in quotes to what your group you chose is. I chose to use the filename:

/etc/udev/rules.d/steamcontroller.rules
# This rule is needed for basic functionality of the controller in Steam and keyboard/mouse emulation
SUBSYSTEM=="usb", ATTRS{idVendor}=="28de", MODE="0666"

# This rule is necessary for gamepad emulation; make sure you replace 'pgriffais' with a group that the user that runs Steam belongs to
KERNEL=="uinput", MODE="0660", GROUP="steamcontroller", OPTIONS+="static_node=uinput"

# DualShock 4 wired
SUBSYSTEM=="usb", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05c4", MODE="0666"
# DualShock 4 wireless adapter
SUBSYSTEM=="usb", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ba0", MODE="0666"
# DualShock 4 slim wired
SUBSYSTEM=="usb", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="09cc", MODE="0666"

# Valve HID devices over USB hidraw
KERNEL=="hidraw*", ATTRS{idVendor}=="28de", MODE="0666"

# Valve HID devices over bluetooth hidraw
KERNEL=="hidraw*", KERNELS=="*28DE:*", MODE="0666"

# DualShock 4 over bluetooth hidraw
KERNEL=="hidraw*", KERNELS=="*054C:05C4*", MODE="0666"

# DualShock 4 Slim over bluetooth hidraw
KERNEL=="hidraw*", KERNELS=="*054C:09CC*", MODE="0666"

REBOOT AND TEST

A reboot will be necessary, as we did modify udev rules here. After rebooting check:

  1. Big picture still sees the controller.
  2. A game that supports controllers can use it
  3. Your desktop can use the controller as a mouse input.

If everything checks out, you are done. If not, verify spelling of the group name and that the user(s) are a member of said group.

Check spelling of group:

    [andrew ~]$ grep -e GROUP /etc/udev/rules.d/steamcontroller.rules 
    KERNEL=="uinput", MODE="0660", GROUP="steamcontroller", OPTIONS+="static_node=uinput"
    [andrew ~]$

And then to see what user your current user has:

    [andrew ~]$ groups
    andrew wheel mock roccat libvirt steamcontroller

Or on a specified user:

    [andrew ~]$ groups andrew
    andrew : andrew wheel libvirt mock roccat steamcontroller
    [andrew ~]$