Displays
Noctalia Greeter uses its bundled wlroots compositor to configure displays. Put
the settings on this page under [output] in
/var/lib/noctalia-greeter/greeter.toml. On NixOS, use
services.displayManager.noctalia-greeter.settings.output with the nixpkgs
module or programs.noctalia-greeter.settings.output with the project flake.
- Find connector names
- Choose which monitors show the greeter
- Arrange multiple monitors
- Match the desktop output mode
- Rotate an output
- Scale the interface
- Blank displays when idle
- Apply changes
Find connector names
Section titled “Find connector names”Run this from a graphical Wayland session:
noctalia-greeter outputsUse the connector names it prints, such as DP-1 or HDMI-A-1, in the
settings below.
Choose which monitors show the greeter
Section titled “Choose which monitors show the greeter”By default, the greeter shows the same login interface on every connected monitor. Each display uses its own resolution and scale.
To show it on only one monitor, pin that connector:
[output]name = "DP-2"The compositor disables all other connectors at the KMS level while the
greeter is running. If name is empty, missing, invalid, or refers to a
disconnected monitor, the greeter falls back to all connected outputs.
Arrange multiple monitors
Section titled “Arrange multiple monitors”Without an explicit layout, outputs are placed from left to right in connector name order. If that does not match the physical arrangement, set their logical positions:
[output]layout = "DP-1:0,0; DP-2:2560,0"scales = "DP-1:1; DP-2:1"layout coordinates are logical pixels. Use matching per-output scales so
the configured edges remain adjacent and the pointer can move naturally
between monitors. When layout is set but a connector has no matching scale,
that connector uses scale 1.0 instead of automatic DPI scaling. A global
scale setting overrides all per-output scales.
Noctalia can copy layout, transform, and effective scale values from the
desktop session through xdg-output. It records a layout only when multiple
ready outputs report distinct positions; transforms and scales need at least
one ready output. See Sync with Noctalia. Values declared in
greeter.toml take precedence over synchronized values in sync.toml.
Match the desktop output mode
Section titled “Match the desktop output mode”By default, the compositor uses each display’s EDID-preferred resolution and then selects the highest advertised refresh rate at that size. If this differs from the desktop session, the display may flash or modeset during login.
Set both width and height to request a particular resolution:
[output]name = "DP-2"width = 5120height = 2160Both values are required and must be positive. A partial or invalid override is ignored. If the display does not advertise the requested size, the compositor logs a warning and falls back to the preferred-resolution behavior. At the requested size, it still chooses the highest advertised refresh rate.
Match the resolution to the desktop session to avoid an unnecessary resolution change when logging in.
Rotate an output
Section titled “Rotate an output”For a portrait or flipped display, assign a transform to its connector:
[output]transforms = "HDMI-A-1:270"Available tokens are normal, 0, none, 90, 180, 270, flipped,
flipped-90, flipped-180, and flipped-270. Separate multiple connectors
with semicolons:
[output]transforms = "DP-1:normal; HDMI-A-1:90"Transform is independent of the physical mode size and UI scale. Noctalia can also synchronize transforms; see Sync with Noctalia.
Scale the interface
Section titled “Scale the interface”When no layout or scale override applies, the greeter calculates each output’s
scale from its physical dimensions reported by EDID, falling back to its
resolution. It uses the selected DRM mode size so cold boot and post-logout
results match. Automatic scale is capped at 2.
Scale is resolved independently for each output in this order:
- Global
[output].scaleingreeter.toml - A connector entry in
[output].scalesfromgreeter.toml, thensync.toml - Scale
1.0when[output].layoutapplies but the connector has no scale - Automatic scale from display geometry
Set different scales per connector:
[output]scales = "DP-1:1; DP-2:1.25"Or force one scale on every output:
[output]scale = 1.5An invalid global scale, including a non-positive number, is ignored and resolution continues with the next applicable step above. The greeter lays out its interface at logical size and renders HiDPI buffers with Wayland fractional scaling.
These settings affect only the greeter session. They do not configure scaling inside the desktop session, although Noctalia Sync can copy the desktop’s effective per-output scales to keep synchronized layouts valid.
Blank displays when idle
Section titled “Blank displays when idle”By default, the greeter never blanks the screen. To turn off active DRM outputs
after a period without input, set [idle].timeout in seconds:
[idle]timeout = 3000 or an omitted key disables blanking. Valid values are 0 through 86400
(24 hours).
The greeter client keeps running while the outputs are blanked. A key press, mouse button press, or touch wakes them and restarts the idle timer. Pointer motion and scrolling wake an already blanked screen, but do not reset the timer while the screen is on. This prevents motion noise from a wireless mouse from keeping the greeter awake indefinitely.
NOCTALIA_GREETER_IDLE_TIMEOUT overrides the config value when set. Because
greetd starts the greeter with an empty environment, add the variable to its
session command with env:
[default_session]command = "env NOCTALIA_GREETER_IDLE_TIMEOUT=300 /usr/bin/noctalia-greeter-session"On NixOS with the nixpkgs module:
services.displayManager.noctalia-greeter.settings = { idle.timeout = 300;};With the project flake module instead:
programs.noctalia-greeter.settings = { idle.timeout = 300;};Both modules write the value to greeter.toml; neither adds the environment
override to the greetd command. Restart greetd after changing the timeout as
shown below.
Apply changes
Section titled “Apply changes”Restart greetd after changing display settings:
sudo systemctl restart greetdOn runit:
sudo sv restart greetd