configuration of server outputs through clients

This interface enables clients to set properties of output devices for screen configuration purposes via the server. To this end output devices are referenced by global kde_output_device_v2 objects.

outputmanagement (wl_global) -------------------------- request:

  • create_configuration -> outputconfiguration (wl_resource)

outputconfiguration (wl_resource) -------------------------- requests:

  • enable(outputdevice, bool)
  • mode(outputdevice, mode)
  • transformation(outputdevice, flag)
  • position(outputdevice, x, y)
  • apply

events:

  • applied
  • failed

The server registers one outputmanagement object as a global object. In order to configure outputs a client requests create_configuration, which provides a resource referencing an outputconfiguration for one-time configuration. That way the server knows which requests belong together and can group them by that.

On the outputconfiguration object the client calls for each output whether the output should be enabled, which mode should be set (by referencing the mode from the list of announced modes) and the output's global position. Once all outputs are configured that way, the client calls apply. At that point and not earlier the server should try to apply the configuration. If this succeeds the server emits the applied signal, otherwise the failed signal, such that the configuring client is noticed about the success of its configuration request.

Through this design the interface enables atomic output configuration changes if internally supported by the server.

Warning! The protocol described in this file is a desktop environment implementation detail. Regular clients must not use this protocol. Backward incompatible changes may be added without bumping the major version of the extension.

create_configuration(id: new_id<kde_output_configuration_v2>)
Argument
Type
Description
idnew_id<kde_output_configuration_v2>
provide outputconfiguration object for configuring outputs

Request an outputconfiguration object through which the client can configure output devices.

create_mode_list(id: new_id<kde_mode_list_v2>)
Argument
Type
Description
idnew_id<kde_mode_list_v2>
create a list of custom modes

For details, see the description of kde_mode_list_v2 and kde_output_configuration_v2.set_custom_modes.


configure single output devices

outputconfiguration is a client-specific resource that can be used to ask the server to apply changes to available output devices.

The client receives a list of output devices from the registry. When it wants to apply new settings, it creates a configuration object from the outputmanagement global, writes changes through this object's enable, scale, transform and mode calls. It then asks the server to apply these settings in an atomic fashion, for example through Linux' DRM interface.

The server signals back whether the new settings have applied successfully or failed to apply. outputdevice objects are updated after the changes have been applied to the hardware and before the server side sends the applied event.

Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice to be en- or disabled
enableint
1 to enable or 0 to disable this output
enable or disable an output

Mark the output as enabled or disabled.

Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this mode change applies to
modeobject<kde_output_device_mode_v2>
the mode to apply
switch output-device to mode

Sets the mode for a given output.

transform(outputdevice: object<kde_output_device_v2>, transform: int)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this transformation change applies to
transformint
transform enum
transform output-device

Sets the transformation for a given output.

position(outputdevice: object<kde_output_device_v2>, x: int, y: int)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this position applies to
xint
position on the x-axis
yint
position on the y-axis
position output in global space

Sets the position for this output device. (x,y) describe the top-left corner of the output in global space, whereby the origin (0,0) of the global space has to be aligned with the top-left corner of the most left and in case this does not define a single one the top output.

There may be no gaps or overlaps between outputs, i.e. the outputs are stacked horizontally, vertically, or both on each other.

scale(outputdevice: object<kde_output_device_v2>, scale: fixed)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this scale change applies to
scalefixed
scaling factor
set scaling factor of this output

Sets the scaling factor for this output device.

apply()
apply configuration changes to all output devices

Asks the server to apply property changes requested through this outputconfiguration object to all outputs on the server side.

The output configuration can be applied only once. The already_applied protocol error will be posted if the apply request is called the second time.

destroy()
release the outputconfiguration object
overscan(outputdevice: object<kde_output_device_v2>, overscan: uint)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice overscan applies to
overscanuint
overscan value
set overscan value

Set the overscan value of this output device with a value in percent.

Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this VRR policy applies to
policyuint<kde_output_configuration_v2.vrr_policy>
the vrr policy to apply
set the VRR policy

Set what policy the compositor should employ regarding its use of variable refresh rate.

Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice the rgb range applies to
rgb_rangeuint<kde_output_configuration_v2.rgb_range>
RGB range

Whether full or limited color range should be used

set_primary_output(output: object<kde_output_device_v2>)
Argument
Type
Description
outputobject<kde_output_device_v2>allow null
Select which primary output to use
set_priority(outputdevice: object<kde_output_device_v2>, priority: uint)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice the index applies to
priorityuint
the priority of the output
Set the order of outputs

Set the position of the output in the output order list, with lower values being earlier in the list. There's no specific value the list has to start at, this value is only used in sorting outputs.

The order of outputs can be used to assign desktop environment components to a specific screen, see kde_output_order_v1 and kde-output-device-v2 for details. Note that for consistent behavior, the priority value needs to be unique among all enabled outputs.

set_high_dynamic_range(outputdevice: object<kde_output_device_v2>, enable_hdr: uint)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
enable_hdruint
1 to enable, 0 to disable hdr
change if HDR should be enabled

Sets whether or not the output should be set to HDR mode.

set_sdr_brightness(outputdevice: object<kde_output_device_v2>, sdr_brightness: uint)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
sdr_brightnessuint
set the brightness for sdr content

Sets the brightness of standard dynamic range content in nits. Only has an effect while the output is in HDR mode. Note that while the value is in nits, that doesn't necessarily translate to the same brightness on the screen.

set_wide_color_gamut(outputdevice: object<kde_output_device_v2>, enable_wcg: uint)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
enable_wcguint
1 to enable, 0 to disable wcg
change if a wide color gamut should be used

Whether or not the output should use a wide color gamut

Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
policyuint<kde_output_configuration_v2.auto_rotate_policy>
change when auto rotate should be used
set_icc_profile_path(outputdevice: object<kde_output_device_v2>, profile_path: string)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
profile_pathstring
change the used icc profile
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
max_peak_brightnessint
-1 for not overriding, or positive values in nits
max_frame_average_brightnessint
-1 for not overriding, or positive values in nits
min_brightnessint
-1 for not overriding, or positive values in 0.0001 nits
override metadata about the screen's brightness limits
set_sdr_gamut_wideness(outputdevice: object<kde_output_device_v2>, gamut_wideness: uint)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
gamut_widenessuint
0 means rec.709 primaries, 10000 means native primaries
describes which gamut is assumed for sRGB applications

This can be used to provide the colors users assume sRGB applications should have based on the default experience on many modern sRGB screens.

Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
color_profile_sourceuint<kde_output_configuration_v2.color_profile_source>
the color profile source
which source the compositor should use for the color profile on an output
set_brightness(outputdevice: object<kde_output_device_v2>, brightness: uint)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
brightnessuint
brightness in 0-10000
brightness multiplier

Set the brightness modifier of the output. It doesn't specify any absolute values, but is merely a multiplier on top of other brightness values, like sdr_brightness and brightness_metadata. 0 is the minimum brightness (not completely dark) and 10000 is the maximum brightness. This is supported while HDR is active in versions 8 and below, or when the device supports the "brightness" capability in versions 9 and above.

Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
preferenceuint<kde_output_configuration_v2.color_power_tradeoff>
set the preferred color/power tradeoff
set_dimming(outputdevice: object<kde_output_device_v2>, multiplier: uint)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
multiplieruint
multiplier in 0-10000
dimming multiplier

Set the dimming multiplier of the output. This is similar to the brightness setting, except it's meant to be a temporary setting only, not persistent and may be implemented differently depending on the display. 0 is the minimum dimming factor (not completely dark) and 10000 means the output is not dimmed.

This is supported only when the "brightness" capability is also supported.

set_replication_source(outputdevice: object<kde_output_device_v2>, source: string)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
sourcestring
uuid of the source output
source output for mirroring

Set the source output that the outputdevice should mirror its viewport from.

set_ddc_ci_allowed(outputdevice: object<kde_output_device_v2>, allowed: uint)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
alloweduint
1 if allowed, 0 if disabled
if DDC/CI should be used to control brightness etc.
set_max_bits_per_color(outputdevice: object<kde_output_device_v2>, max_bpc: uint)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
max_bpcuint
0 for the default / automatic
override the max bpc

This limits the amount of bits per color that are sent to the display.

Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
policyuint<kde_output_configuration_v2.edr_policy>
set when the compositor may apply EDR

When EDR is enabled, the compositor may increase the backlight beyond the user-specified setting, in order to present HDR content on displays without native HDR support. This will usually result in better visuals, but also increases battery usage.

set_sharpness(outputdevice: object<kde_output_device_v2>, sharpness: uint)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
sharpnessuint
sharpness in 0-10000
sharpness strength

This is the sharpness modifier of the output. 0 is sharpness disabled and 10000 is the maximum sharpness

set_custom_modes(outputdevice: object<kde_output_device_v2>, modes: object<kde_mode_list_v2>)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
modesobject<kde_mode_list_v2>
set the custom mode list

Set the list of custom modes for this output. The compositor will in response generate the requested modes and add them to the output (or delete ones no longer in the list). This can be useful for overclocking displays, or for working around broken EDIDs. Note that there is no guarantee for any custom mode to actually work, or even to leave the display undamaged (in the case of CRTs). It's entirely the responsibility of the user to ensure each added mode is the right one for their display.

set_auto_brightness(outputdevice: object<kde_output_device_v2>, enabled: uint)
Argument
Type
Description
outputdeviceobject<kde_output_device_v2>
outputdevice this setting applies to
enableduint
1 for enabled, 0 for disabled
whether or not automatic brightness is enabled
applied()
configuration changes have been applied

Sent after the server has successfully applied the changes. .

failed()
configuration changes failed to apply

Sent if the server rejects the changes or failed to apply them.

failure_reason(reason: string)
Argument
Type
Description
reasonstring
reason for failure
reason for failure

Describes why applying the output configuration failed. Is only sent before the failure event.

error { already_applied } 
Argument
Value
Description
already_applied0
the config is already applied
kde_output_configuration_v2 error values

These error can be emitted in response to kde_output_configuration_v2 requests.

vrr_policy { never, always, automatic } 
Argument
Value
Description
never0
always1
automatic2
describes vrr policy

Describes when the compositor may employ variable refresh rate

rgb_range { automatic, full, limited } 
Argument
Value
Description
automatic0
full1
limited2
describes RGB range policy

Whether this output should use full or limited rgb.

auto_rotate_policy { never, in_tablet_mode, always } 
Argument
Value
Description
never0
in_tablet_mode1
always2
describes when auto rotate should be used
color_profile_source { sRGB, ICC, EDID } 
Argument
Value
Description
sRGB0
ICC1
EDID2
which source the compositor should use for the color profile on an output
color_power_tradeoff { efficiency, accuracy } 
Argument
Value
Description
efficiency0
prefer efficiency and performance
accuracy1
prefer accuracy
tradeoff between power and accuracy

The compositor can do a lot of things that trade between performance, power and color accuracy. This setting describes a high level preference from the user about in which direction that tradeoff should be made.

edr_policy { never, always } 
Argument
Value
Description
never0
always1
when the compositor may make use of EDR

a list of custom modes

This list is populated by first setting each relevant property, and then calling add_mode to add a mode with these properties. One would for example call

  • set_resolution
  • set_refresh_rate
  • set_reduced_blanking
  • add_mode

add_mode does not reset the properties that were previously set, they are valid until the object is destroyed. The compositor may additionally have sensible defaults for some properties like reduced_blanking, but for consistent results, it's best to always set each known property every time.

The parameters resolution and refresh rate are required, if they are not set, the missing_parameters error will be emitted.

destroy()
destroy the mode list object
add_mode()
Add the current mode configuration to the list
set_resolution(width: uint, height: uint)
Argument
Type
Description
widthuint
heightuint
set_refresh_rate(rate: uint)
Argument
Type
Description
rateuint
in milliHz
set_reduced_blanking(reduced: uint)
Argument
Type
Description
reduceduint
1 for reduced blanking, 0 for normal vblank duration
whether or not the mode should have reduced blanking

Reduced blanking is an optimization that can reduce bandwidth / timing requirements for a display mode by reducing the time vblank takes. As not all displays support it, it may be desired to still turn it off though (like with CRTs, where full blanking is required).

Argument
Value
Description
missing_parameters0
a required parameter wasn't set
kde_mode_list_v2 error values

These errors can be emitted in response to add_mode requests.


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_output_management_v2
x
x
x
x
x
16
x
x
x
x
x
x
x
x
x
x
x

SPDX-FileCopyrightText: 2008-2011 Kristian Høgsberg SPDX-FileCopyrightText: 2010-2011 Intel Corporation SPDX-FileCopyrightText: 2012-2013 Collabora, Ltd. SPDX-FileCopyrightText: 2015 Sebastian Kügler <sebas@kde.org> SPDX-FileCopyrightText: 2021 Méven Car <meven.car@enioka.com> SPDX-FileCopyrightText: 2023 Xaver Hugl <xaver.hugl@kde.org>

SPDX-License-Identifier: MIT-CMU