protonscr

Steam Controller 2026 - Battery & Charging Status

steamopen Feature RequestSteam controller
ValveSoftware/steam-for-linux#13308 · opened 2026-06-11 by DanielR-I · updated 2026-08-11 · 3 comments · github
DDanielR-I 2026-06-11 github

Your system information

  • Steam client version (build number or date): 1780705203
  • Distribution (e.g. Ubuntu): MANJARO
  • Opted into Steam client beta?: Yes
  • Have you checked for system updates?: Yes
  • Steam Logs: [generate by running this command in a terminal tar -zcvf ~/Desktop/steam-logs.tar.gz ~/.steam/steam/logs]
  • GPU: AMD

Please describe your issue in as much detail as possible:

Just received my Steam Controller today and wanted to update my conky with it's battery/charge status.

With my PS5 controller I can monitor...

  1. /sys/class/power_supply/ps-controller-battery-##:##:##:##:##:##/capacity
  2. /sys/class/power_supply/ps-controller-battery-##:##:##:##:##:##/status

I was unable to find any entries for the Steam Controller battery under /sys/class/power_supply; nor under the locations that I did find references to the controller:

  1. /sys/class/hidraw/hidraw6/
  2. /sys/devices/pci0000:00/0000:00:08.1/0000:c5:00.3/usb1/1-2/1-2.3/1-2.3:1.0/0003:28DE:1302.0223/

Is the Steam controller not reporting it's battery status/charge to linux /sys?

Steps for reproducing this issue:

  1. plug steam controller in directly via USB cable
  2. note the journalctl entries regarding it's successful connection
    kernel: usb 1-2.3: new full-speed USB device number 27 using xhci_hcd
    kernel: usb 1-2.3: New USB device found, idVendor=28de, idProduct=1302, bcdDevice= 3.07
    kernel: usb 1-2.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    kernel: usb 1-2.3: Product: Steam Controller
    kernel: usb 1-2.3: Manufacturer: Valve Software
    kernel: usb 1-2.3: SerialNumber: ############
    kernel: input: Valve Software Steam Controller Mouse as /devices/pci0000:00/0000:00:08.1/0000:c5:00.3/usb1/1-2/1-2.3/1-2.3:1.0/0003:28DE:1302.0221/input/input1004
    kernel: input: Valve Software Steam Controller Keyboard as /devices/pci0000:00/0000:00:08.1/0000:c5:00.3/usb1/1-2/1-2.3/1-2.3:1.0/0003:28DE:1302.0221/input/input1005
    kernel: hid-generic 0003:28DE:1302.0221: input,hiddev102,hidraw6: USB HID v1.11 Mouse [Valve Software Steam Controller] on usb-0000:c5:00.3-2.3/input0
    Jun 10 15:13:10 AMD-Ryzen9-7940HS systemd-logind[751]: Watching system buttons on /dev/input/event12 (Valve Software Steam Controller Keyboard)
    Jun 10 15:13:11 AMD-Ryzen9-7940HS kernel: input: Microsoft X-Box 360 pad 0 as /devices/virtual/input/input1007
  3. Note the absence of the steam controller reporting it's battery status/charge under /sys/class/power_supply
DDanielR-I 2026-06-11 github

Clarification... On May 4th the Steam Beta Client was updated with the following note...

General

  • Added setting to enable or disable controller battery notification

How would the Steam Linux Client be able to provide notifications without it being reported somewhere? I'm assuming that it's written somewhere in the 'everything is a file' linux filesystem.... I guess I'm also assuming the notification option also supports the Steam Controller.

If the controller battery/charging status is currently held somewhere other than /sys/class/power_supply, I'd appreciate learning about where that is so I can read/use it.

MManagor 2026-06-12 github

How would the Steam Linux Client be able to provide notifications without it being reported somewhere? I'm assuming that it's written somewhere in the 'everything is a file' linux filesystem.... I guess I'm also assuming the notification option also supports the Steam Controller.

The controller likely sends the battery data directly to the Steam client.

I usually use upower -d to display battery percentages so that I don't need to know the filesystem location.

Jjohn-okeefe 2026-08-11 · hidden on GitHub github

I would also like this feature. According to AI research, here is what I've uncovered.

The real blocker (kernel/OS side): The battery currently does not reach UPower at all:

  • /sys/class/power_supply/ has no steam* node.
  • The hid-steam kernel driver — which is what creates that power_supply node — is not loaded, and more importantly its alias table only covers 28de:1102, 28de:1142, 28de:1205. Your puck is 28de:1304, so hid-generic claimed all 5 interfaces (DRIVER=hid-generic).
  • The puck is just the wireless dongle; the battery lives in the gamepad and is only reported when a controller is paired and awake. The Steam client (running, PID 12591) talks to the puck in user space but does not expose battery over D-Bus.

Steam talks to the hardware entirely in user space, not via a kernel driver.

  • The kernel only needs to expose a /dev/hidraw* node. hid-generic (the universal fallback) does that for every HID device, including your 28de:1304 puck — that's the 5 interfaces we saw bound to hid-generic → /dev/hidraw0..4.
  • Steam opens those hidraw nodes with O_RDWR via hidapi/libusb and speaks Valve's proprietary wireless protocol over HID feature/input/output reports. The puck then relays wirelessly to the paired controller. No kernel driver involved.
    Recognition is by Valve's vendor ID, maintained by Valve themselves.
  • The Steam client ships with an internal list of its own product IDs (Valve makes both the hardware and Steam), so it's always current with new PIDs like 1304. It enumerates USB/HID devices, matches VID 0x28de, identifies the puck, and runs its protocol.
  • Permissions are granted generically by VID, confirmed in your /usr/lib/udev/rules.d/60-steam-input.rules:2,8:
  • SUBSYSTEMS=="usb", ATTRS{idVendor}=="28de", ... TAG+="uaccess"
  • KERNEL=="hidraw*", ATTRS{idVendor}=="28de", ... TAG+="uaccess"
  • These match only the VID, so 1304 is covered without being explicitly listed anywhere.

Nothing extracted yet.