implement SessionManagement1

SessionManagement1 provides control over which sessions are started by
the login manager. See the dbus API documentation for more information.

This commit lifts rust-ini from transitive dependency to direct
dependency since we need slightly better control over the ini content.

SessionManagement1 is implemented in both user and root scope. User
scope implements the public API and internally calls into root scope for
root-elevated actions, where necessary augmenting with user-level
actions (namely managing user systemd services).

Two SDDM configuration files are in play here

- `/etc/sddm.conf.d/yy-steamos-session.conf`: acting as "persistent"
default configuration
- `/etc/sddm.conf.d/zz-steamos-autologin.conf`: the "temporary"
configuration overrides the persistent one whenever present and is meant
to be cleared by either the login manager or the session. This follows
current behavior where we have oneshot sessions that simply reset the
temporary back to gamescope.

Internal configuration keys are stored in the persistent config inside
an `[X-SteamOS]` section.
This commit is contained in:
Harald Sitter 2025-06-18 01:40:14 +02:00
parent 6a562e2d31
commit 75af4e0a12
10 changed files with 445 additions and 3 deletions

View file

@ -26,6 +26,7 @@ mod low_power_mode1;
mod manager2;
mod performance_profile1;
mod screenreader0;
mod session_management1;
mod storage1;
mod tdp_limit1;
mod update_bios1;
@ -45,6 +46,7 @@ pub use crate::proxy::low_power_mode1::LowPowerMode1Proxy;
pub use crate::proxy::manager2::Manager2Proxy;
pub use crate::proxy::performance_profile1::PerformanceProfile1Proxy;
pub use crate::proxy::screenreader0::ScreenReader0Proxy;
pub use crate::proxy::session_management1::SessionManagement1Proxy;
pub use crate::proxy::storage1::Storage1Proxy;
pub use crate::proxy::tdp_limit1::TdpLimit1Proxy;
pub use crate::proxy::update_bios1::UpdateBios1Proxy;