external brightness control

Some brightness control mechanisms are somewhat unstable, or require root privileges, so putting them inside of the compositor is not desired. This protocol is for outsourcing the actual brightness-setting to a process outside of the compositor.

destroy()
Destroy the object.
create_brightness_control(id: new_id<kde_external_brightness_device_v1>)
Argument
Type
Description
idnew_id<kde_external_brightness_device_v1>
registers a brightness device with the compositor

brightness control device

After creating this object, the client should issue all relevant setup requests (set_internal, set_edid, set_max_brightness, optionally set_observed_brightness) and finish the sequence with commit. Afterwards, for each change in values, the client must call commit again.

destroy()
destroy the object and unregister the brightness control device
set_internal(internal: uint)
Argument
Type
Description
internaluint
1 if it's an internal panel, 0 if not
sets whether or not the brightness device belongs to an internal display
set_edid(string: string)
Argument
Type
Description
stringstring
base-64 encoded string of the first 128 bytes of the EDID
set the EDID data for identification of the display
set_max_brightness(value: uint)
Argument
Type
Description
valueuint
the maximum value that can be set
notifies the compositor of the maximum brightness that can be set on this device
commit()
notifies the compositor that all relevant identifiers and values have been sent
set_observed_brightness(value: uint)
Argument
Type
Description
valueuint
the observed value that was read
notifies the compositor of the brightness that was read from this device

The client can set this to notify the compositor of the device's initial brightness. It can also set this again after the initial commit to notify the compositor that the brightness level has changed due to external factors. The compositor is free to use or ignore this value as it sees fit.

set_uses_ddc_ci(value: uint)
Argument
Type
Description
valueuint
1 if it uses DDC/CI, 0 if not (assumed by default)
notifies the compositor that DDC/CI is used to control brightness etc.

The compositor can use this information to ignore this object if its commands expose monitor issues. The compositor may also reduce the amount of brightness requests given potentially slow response times and concerns about monitor EEPROM longevity/wear-out.

requested_brightness(value: uint)
Argument
Type
Description
valueuint
the value to set the device to
requests the client to change the brightness to this value

The client must ensure that if the brightness level changes due to external factors, that it either overwrites those changes with what the compositor last requested, or commit again with set_observed_brightness specifying the changed brightness.


Compositor Support

Cage
Cage
0.2.0
COSMIC
COSMIC
1.0.0~beta.8
GameScope
GameScope
3.15.14
Hyprland
Hyprland
0.52.1
Jay
1.11.0
KWin
KWin
6.4
Labwc
Labwc
0.9.2
Louvre
Louvre
2.14.1
Mir
Mir
2.19
Muffin
Muffin
6.4.1
Mutter
Mutter
49.2
niri
niri
25.11
river
river
0.3.13
Sway
Sway
1.11
Treeland
Treeland
0.8.0
Wayfire
Wayfire
0.9.0
Weston
Weston
14.0.2
kde_external_brightness_v1
x
x
x
x
x
3
x
x
x
x
x
x
x
x
x
x
x

SPDX-FileCopyrightText: 2024 Xaver Hugl <xaver.hugl@gmail.com>

SPDX-License-Identifier: MIT-CMU