diff --git a/docs/labwc-config.5.scd b/docs/labwc-config.5.scd
index 95564083..4e41d57f 100644
--- a/docs/labwc-config.5.scd
+++ b/docs/labwc-config.5.scd
@@ -171,6 +171,7 @@ this is for compatibility with Openbox.
0
no
no
+ yes
no
yes
@@ -209,6 +210,14 @@ this is for compatibility with Openbox.
consider setting the environment variable WLR_DRM_NO_ATOMIC=1 when
launching labwc.
+** [yes|no]
+ Automatically enable outputs at startup and when new outputs are
+ connected. Default is yes.
+
+ Caution: Disabling this option will make the labwc session unusable
+ unless an external tool such as `wlr-randr` or `kanshi` is used to
+ manage outputs.
+
** [yes|no]
Try to re-use the existing output mode (resolution / refresh rate).
This may prevent unnecessary screenblank delays when starting labwc
diff --git a/docs/rc.xml.all b/docs/rc.xml.all
index a4f628ba..ee7b111e 100644
--- a/docs/rc.xml.all
+++ b/docs/rc.xml.all
@@ -12,6 +12,7 @@
0
no
no
+ yes
no
yes
diff --git a/include/config/rcxml.h b/include/config/rcxml.h
index c65d6484..84757386 100644
--- a/include/config/rcxml.h
+++ b/include/config/rcxml.h
@@ -69,6 +69,7 @@ struct rcxml {
int gap;
enum adaptive_sync_mode adaptive_sync;
enum tearing_mode allow_tearing;
+ bool auto_enable_outputs;
bool reuse_output_mode;
enum view_placement_policy placement_policy;
bool xwayland_persistence;
diff --git a/src/config/rcxml.c b/src/config/rcxml.c
index cbb9eab6..f3f04db8 100644
--- a/src/config/rcxml.c
+++ b/src/config/rcxml.c
@@ -1082,6 +1082,8 @@ entry(xmlNode *node, char *nodename, char *content)
set_adaptive_sync_mode(content, &rc.adaptive_sync);
} else if (!strcasecmp(nodename, "allowTearing.core")) {
set_tearing_mode(content, &rc.allow_tearing);
+ } else if (!strcasecmp(nodename, "autoEnableOutputs.core")) {
+ set_bool(content, &rc.auto_enable_outputs);
} else if (!strcasecmp(nodename, "reuseOutputMode.core")) {
set_bool(content, &rc.reuse_output_mode);
} else if (!strcmp(nodename, "policy.placement")) {
@@ -1467,6 +1469,7 @@ rcxml_init(void)
rc.gap = 0;
rc.adaptive_sync = LAB_ADAPTIVE_SYNC_DISABLED;
rc.allow_tearing = false;
+ rc.auto_enable_outputs = true;
rc.reuse_output_mode = false;
#if LAB_WLR_VERSION_OLDER_THAN(0, 18, 2)
diff --git a/src/output.c b/src/output.c
index a75f6e13..22105254 100644
--- a/src/output.c
+++ b/src/output.c
@@ -499,7 +499,10 @@ new_output_notify(struct wl_listener *listener, void *data)
wlr_scene_node_raise_to_top(&server->menu_tree->node);
wlr_scene_node_raise_to_top(&output->session_lock_tree->node);
- configure_new_output(server, output);
+ if (rc.auto_enable_outputs) {
+ configure_new_output(server, output);
+ }
+
do_output_layout_change(server);
}