SteamOS Manager is a system daemon that aims to abstract Steam's interactions with the operating system.
Find a file
2024-05-15 16:49:30 -07:00
data data: Split user and system data files into respective directories, add user D-Bus unit 2024-05-06 13:26:40 -07:00
src steamosctl: Give human-readable results for property names 2024-05-13 18:55:38 -07:00
.gitignore Merge steamos-workerd in 2024-03-22 19:31:38 -07:00
.gitlab-ci.yml Move CI to isolated runner(s) 2024-05-07 13:42:15 +01:00
Cargo.lock Cargo.toml: zbus 4.2.1 is out, fixes needed issue 2024-05-14 18:09:54 -07:00
Cargo.toml Cargo.toml: Tag 24.5.1 2024-05-14 18:10:17 -07:00
com.steampowered.SteamOSManager1.xml process: Improve signal handling, don't wait for process in exit_code 2024-05-08 16:39:14 -07:00
HACKING.md Revamp README and HACKING to be more fleshed out and up-to-date 2024-05-15 16:49:30 -07:00
LICENSE Add support to get/set WiFi back-end 2024-04-04 18:08:21 -07:00
README.md Revamp README and HACKING to be more fleshed out and up-to-date 2024-05-15 16:49:30 -07:00

SteamOS Manager

SteamOS Manager is a small daemon whose primary purpose is to give Steam something with a DBus API that runs as root and can do things to the system without having to have hard coded paths and DBus API in the Steam client itself. It also runs some background tasks, as well as giving a centralized daemon for managing some user-context tasks that aren't particularly related to Steam itself.

Many of these root tasks are implemented as athin wrapper around other scripts. This lets the DBus APIs invoke the scripts as a privileged but non-root user and provides feedback for each DBus method it implements.

How it works

The SteamOS Manager runs as root and exposes a DBus API on the system bus. Another instance runs as deck and exposes a DBus API on the session bus with a few extra methods that handle tasks that are user-specific. These methods run directly in the user daemon as that user. All other APIs are relayed to the root daemon via its DBus API.

To add a new method

To add a new method that doesn't require root privileges, add it to the user daemon's DBus API directly. This is implemented in src/manager/usr.rs

To add a new method that does require root privileges, add it to the root daemon's DBus API in src/manager/root.rs, update the proxy implementation in src/proxy.rs, and add a relay method in src/manager/user.rs.

In both cases, make sure to add the new API to the XML schema. The methods are test automatically to match the schema, so these tests will fail if they don't.

Further, if this is the first change made to the schema since the last tag, increment the API version number in src/lib.rs.