Commit 90718170 authored by Pekka Paalanen's avatar Pekka Paalanen
Browse files

weston: add force-on option for DRM

Add a new boolean output section key "force-on". When set to true, the
output will be enabled regardless of connector status. This is the
opposite of the mode=off setting.

Forcing connectors on is useful in special circumstances: avoid output
configuration changes due to hotplug e.g. with KVM switches, or hardware
with unreliable connector status readout for example.
Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <>
Reviewed-by: default avatarIan Ray <>
parent 944dd235
Pipeline #1837 passed with stage
in 3 minutes and 11 seconds
......@@ -1594,6 +1594,22 @@ drm_head_prepare_enable(struct wet_compositor *wet,
static bool
drm_head_should_force_enable(struct wet_compositor *wet,
struct weston_head *head)
const char *name = weston_head_get_name(head);
struct weston_config_section *section;
int force = 0;
section = drm_config_find_controlling_output_section(wet->config, name);
if (!section)
return false;
weston_config_section_get_bool(section, "force-on", &force, 0);
return !!force;
static void
drm_try_attach(struct weston_output *output,
struct wet_head_array *add,
......@@ -1783,6 +1799,7 @@ drm_heads_changed(struct wl_listener *listener, void *arg)
bool connected;
bool enabled;
bool changed;
bool forced;
/* We need to collect all cloned heads into outputs before enabling the
* output.
......@@ -1791,10 +1808,11 @@ drm_heads_changed(struct wl_listener *listener, void *arg)
connected = weston_head_is_connected(head);
enabled = weston_head_is_enabled(head);
changed = weston_head_is_device_changed(head);
forced = drm_head_should_force_enable(wet, head);
if (connected && !enabled) {
if ((connected || forced) && !enabled) {
drm_head_prepare_enable(wet, head);
} else if (!connected && enabled) {
} else if (!(connected || forced) && enabled) {
} else if (enabled && changed) {
weston_log("Detected a monitor change on head '%s', "
......@@ -95,6 +95,14 @@ NOTE: cms-colord plugin does not work correctly with this option. The plugin
chooses an arbitrary monitor to load the color profile for, but the
profile is applied equally to all cloned monitors regardless of their
Force the output to be enabled even if the connector is disconnected.
Defaults to false. Note that
.BR mode=off " will override " force-on=true .
When a connector is disconnected, there is no EDID information to provide
a list of video modes. Therefore a forced output should also have a
detailed mode line specified.
.\" ***************************************************************
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment