# apparmor.d - Full set of apparmor profiles
# Copyright (C) 2016 Canonical Ltd
# Copyright (C) 2025 Alexandre Pujol <alexandre@pujol.io>
# SPDX-License-Identifier: GPL-2.0-only

# Can inhibit and uninhibit screen savers in desktop sessions.

  abi <abi/4.0>,

  # Allow listing bus names to check for screen saver presence and implementation
  dbus send bus=session path=/org/freedesktop/DBus
       interface=org.freedesktop.DBus
       member=ListNames
       peer=(name=org.freedesktop.DBus, label="@{p_dbus_session}"),

  # Gnome Session, not using bus/session/org.gnome.SessionManager as it allows
  # full session management
  dbus send bus=session path=/org/gnome/SessionManager
       interface=org.gnome.SessionManager
       member={Inhibit,Uninhibit}
       peer=(name="{@{busname},org.gnome.SessionManager}", label="@{p_gnome_session}"),

  dbus send bus=session path=/ScreenSaver
       interface=org.gnome.ScreenSaver
       member=SimulateUserActivity
       peer=(name="{@{busname},org.gnome.SessionManager}", label="@{p_gnome_session}"),

  # Generic freedesktop, not using bus/session/org.freedesktop.ScreenSaver as
  # it allows too much
  dbus send bus=session path=/ScreenSaver
       interface=org.freedesktop.ScreenSaver
       member={Inhibit,UnInhibit,SimulateUserActivity}
       peer=(name=org.freedesktop.ScreenSaver),

  dbus send bus=session path=/org/gnome/ScreenSaver
       interface=org.{freedesktop,gnome}.ScreenSaver
       member={Inhibit,UnInhibit,SimulateUserActivity}
       peer=(name=@{busname}, label=gjs),

  dbus send bus=system path=/org/freedesktop/login1
       interface=org.freedesktop.login1.Manager
       member=Inhibit
       peer=(name=org.freedesktop.login1, label=systemd-logind),

  # Login session manager
  dbus send bus=system path=/org/freedesktop/login1
       interface=org.freedesktop.login1.Manager
       member=Inhibit
       peer=(name=org.freedesktop.login1, label="@{p_systemd_logind}"),

  # Receive shutdown & sleep notifications

  dbus receive bus=system path=/org/freedesktop/login1
       interface=org.freedesktop.login1.Manager
       member={PrepareForShutdown,PrepareForShutdownWithMetadata}
       peer=(name="{@{busname},org.freedesktop.login1}", label="@{p_systemd_logind}"),

  include if exists <abstractions/screen-inhibit.d>

# vim:syntax=apparmor
