Skip to content
System services

System services

Denial uses standard Linux services and protocols instead of maintaining parallel device databases. Optional integrations disappear or become read-only when their service or hardware is unavailable; the compositor continues to run.

Integration map

FeatureService or interfaceDenial support
Desktop audioPulseAudio protocolOutput selection, volume and mute, hardware keys, and per-application streams
Wi-FiNetworkManager or iwdRadio state, scanning, connectivity, connect, disconnect, forget, and saved profiles
CellularNetworkManager and ModemManagerRegistration and signal status, bearer state, mobile-data toggle, and primary SIM PIN prompt
BluetoothBlueZDiscovery, pairing agent, passkeys, trust, connect, disconnect, and removal
BatteryUPowerCharge state, health and energy details, time estimates, and supported charge-threshold toggle
BrightnessKernel backlight and DDC/CIPer-output reading and control
MediaMPRISMetadata, artwork, and transport controls
TrayStatusNotifier/AppIndicator and XEmbedIcons, application menus, and pointer actions
Session powerlogind-compatible serviceSuspend, hibernate, reboot, power off, authorization, and inhibitors
Power profilespower-profiles-daemonPower saver, balanced, and performance profiles when available
AMD tuningLACTOptional low, automatic, and high performance presets
AuthenticationPAM and optional fprintdPassword unlock, automatic fingerprint verification, and enrollment
Orientationiio-sensor-proxyAutomatic rotation for built-in panels
HapticshapticdOptional bounded tap and fingerprint-rejection feedback
AppearanceDenial Settings portalStandard colour-scheme and accent-color values for applications
Capturewlr screencopy, PipeWire, and portalsDirect screenshots/recording and monitor sharing

Audio

Denial is a native PulseAudio-protocol client. It works with PipeWire through pipewire-pulse, a PulseAudio server, or another compatible socket. The dashboard can choose the default output, while Audio settings controls master volume and individual playback streams. Hardware volume keys use the same native connection and do not depend on application focus.

On a typical PipeWire Arch system:

sudo pacman -S pipewire-pulse

Wi-Fi and cellular

Denial prefers NetworkManager when both supported Wi-Fi backends are running, because NetworkManager may itself use iwd. When NetworkManager is absent it can talk directly to iwd instead. Both backends expose the same shell UI and react to service restarts.

New profiles can be created for open, WEP, WPA/WPA2 Personal, WPA3 Personal, and OWE networks. Enterprise Wi-Fi can use an existing profile, but Denial does not create new enterprise credentials. NetworkManager and iwd keep ownership of secrets and saved connections; system D-Bus and polkit policy decide which changes are authorized.

With NetworkManager and ModemManager available, the mobile shell shows cellular registration, measured signal quality, and whether a data bearer is connected. The Mobile data tile changes NetworkManager’s global WWAN state; it does not create an APN or carrier profile. A primary SIM PIN prompt accepts 4–8 digits and reports remaining attempts. It is separate from device unlock: unlocking the SIM never authenticates the Denial session, and device authentication does not dismiss a blocking SIM prompt. PUK recovery and multi-SIM management remain outside this interface.

Bluetooth

BlueZ provides adapter power, scanning, pairing, trust, and connection state. Denial registers a pairing agent for confirmation and PIN/passkey exchanges; entered secrets are sent to BlueZ once and are not retained. Incoming requests time out or are rejected when no usable pairing surface exists.

On Arch:

sudo pacman -S bluez
sudo systemctl enable --now bluetooth

Power, battery, and brightness

Logout and machine power requests use the active logind-compatible session and honor inhibitors and authorization. Denial can schedule independent idle deadlines for lock, DPMS display-off, and suspend. It also exposes the Linux suspend modes the system supports (s2idle, shallow, or deep) and applies the selected mode to Denial-initiated suspend.

UPower supplies battery state, warning level, health, cycles, energy, power rate, voltage, temperature, and remaining-time estimates when the hardware publishes them. If UPower supports a charge-threshold or firmware-optimized charging switch, Settings can enable it; the threshold levels themselves remain system-provided and read-only. Denial issues low and critical battery notifications from this state.

Internal displays use an associated kernel backlight. External monitors use the available libddcutil ABI and DDC/CI VCP controls. Missing or ambiguous hardware is left unclaimed instead of changing the wrong display.

power-profiles-daemon exposes system profiles. LACT can additionally expose presets for the first supported AMD GPU. Both are optional.

Fingerprint authentication

If fprintd reports a reader and an enrolled finger, Denial starts verification automatically whenever the native session gate is locked, including a --start-locked session. A successful match still passes PAM account validation, wakes Denial-blanked outputs, and resets idle deadlines. Reader failure or missing enrollment leaves password authentication available.

The Fingerprint Settings page appears only when a reader is present. It asks for the user’s sudo password before listing or enrolling fingers. The helper accepts only those bounded operations for the current user, never places a password in process arguments, releases the reader when the page closes, and expires its authorization after five minutes. On Arch, install fprintd and sudo to enable this workflow.

Session activation, portals, and autostart

After the shell and initial outputs have presented, a systemd user session publishes the discovered Wayland, X11, and control endpoints and starts denial-session.target. Portals and standard XDG autostart entries therefore start against valid sockets. D-Bus activation still receives the endpoints on elogind/non-systemd systems, but XDG autostart needs that system’s own session runner.

denial-portal implements the desktop Settings portal for Denial’s committed colour scheme and accent. GTK remains the fallback for portal namespaces Denial does not implement. ScreenCast and Screenshot route to xdg-desktop-portal-wlr; PipeWire stays outside the compositor process.

Hardware status

The bar and lock screen read CPU load from the kernel, battery data from UPower or native power-supply state, AMD GPU activity from sysfs, and NVIDIA activity through NVML when available. Unsupported sensors are omitted. Tablet tools use Wayland tablet-v2 with proximity, pressure, distance, tilt, rotation, wheel, tip, and button events; an explicit libinput output mapping wins, otherwise the tool follows the output under the pointer for that proximity sequence.