diff --git a/backend/backend.c b/backend/backend.c index 3d84aa636..213cf89c8 100644 --- a/backend/backend.c +++ b/backend/backend.c @@ -1,4 +1,6 @@ #include +#include +#include #include #include #include @@ -137,6 +139,23 @@ static size_t parse_outputs_env(const char *name) { return outputs; } +static unsigned int parse_output_dimension_env(const char *name, unsigned int fallback) { + const char *dimension_str = getenv(name); + if (dimension_str == NULL) { + return fallback; + } + + char *end; + errno = 0; + unsigned long dimension = strtoul(dimension_str, &end, 10); + if (*end || errno != 0 || dimension == 0 || dimension > UINT_MAX) { + wlr_log(WLR_ERROR, "%s specified with invalid integer, ignoring", name); + return fallback; + } + + return dimension; +} + /** * Helper to destroy the multi backend when one of its nested backends is * destroyed. @@ -225,8 +244,10 @@ static struct wlr_backend *attempt_headless_backend(struct wl_event_loop *loop) } size_t outputs = parse_outputs_env("WLR_HEADLESS_OUTPUTS"); + unsigned int width = parse_output_dimension_env("WLR_HEADLESS_OUTPUT_WIDTH", 1280); + unsigned int height = parse_output_dimension_env("WLR_HEADLESS_OUTPUT_HEIGHT", 720); for (size_t i = 0; i < outputs; ++i) { - wlr_headless_add_output(backend, 1280, 720); + wlr_headless_add_output(backend, width, height); } return backend; diff --git a/docs/env_vars.md b/docs/env_vars.md index 59c8f078f..715aa55ee 100644 --- a/docs/env_vars.md +++ b/docs/env_vars.md @@ -35,6 +35,8 @@ wlroots reads these environment variables * *WLR_HEADLESS_OUTPUTS*: when using the headless backend specifies the number of outputs +* *WLR_HEADLESS_OUTPUT_WIDTH*, *WLR_HEADLESS_OUTPUT_HEIGHT*: when using the + headless backend specifies the output size ## libinput backend