Skip to content
omarchyFIELD GUIDE
PRACTICAL KNOWLEDGE / FIELD GUIDE

Displays, scaling, and multiple monitors: a practical setup

Understand logical space and monitor coordinates, then configure a high-resolution laptop and external display with a recovery path.

Based on public documentation; not hardware-tested. Match the instructions to your version and hardware.

This tutorial is for a working desktop whose interface needs resizing or a second display. By the end, you should be able to explain your scale, configure a layout using your own output information, and distinguish mode, placement and application-specific problems.

The teaching scenario uses a 2880 × 1800 laptop at scale 2 on the left and a 2560 × 1440 external display at scale 1 on the right. Output names and sample diagnostics are illustrative. Configuration syntax was checked against official source; this hardware combination has not been tested.

1. Choose the setting that matches the goal

Section titled “1. Choose the setting that matches the goal”
Desired result First setting to investigate Check afterward
Everything is too small or large Monitor scale Windows, buttons and text change together
Window sizes are fine; text needs resizing Text size Reading improves within the same window
Pointer movement between displays is wrong Display positions The pointer crosses adjacent edges
Show the same content on another screen Mirroring Both displays show the same content
Only one app is blurry or oversized That app’s rendering/scaling path Other applications on the same display

Establish readability before arranging two screens. For the underlying roles, see Hyprland and the input and display layer.

Resolution describes output pixels. Scale affects how many pixels an interface element occupies. Logical space is the coordinate area used to arrange windows. For an unrotated output, estimate it as:

Logical width = output width ÷ scale
Logical height = output height ÷ scale

These are calculations for one 4K output, not hardware recommendations:

Output resolution Scale Logical space Relative result
3840 × 2160 1× 3840 × 2160 Most space, smallest elements
3840 × 2160 1.5× 2560 × 1440 Intermediate element size and space
3840 × 2160 1.6× 2400 × 1350 Larger elements than at 1.5×
3840 × 2160 2× 1920 × 1080 Less space, larger elements

1920 × 1080 logical layout space

This illustrates relative logical space, not font rendering. Physical pixels stay unchanged. Higher scale allocates more physical pixels to the same logical element, leaving less layout space.

Choose a comfortable reading size, then check that enough working space remains. Displays with the same resolution can have different physical sizes and pixel densities. Equal logical dimensions do not guarantee equal physical text size.

Keeping a supported native output mode and adjusting interface scale differs from lowering output resolution. Change those separately so you can identify what affected sharpness.

Run this read-only query in your graphical session:

Terminal window
hyprctl monitors all

Record the fields below for each display. This is a shortened teaching example; actual formatting and values depend on your installed version:

Monitor eDP-1 (ID 0):
2880x1800@60.00000 at 0x0
scale: 2.00
availableModes: 2880x1800@60.00Hz ...
Monitor DP-1 (ID 1):
2560x1440@60.00000 at 1440x0
scale: 1.00
availableModes: 2560x1440@60.00Hz ...
Field How to use it
eDP-1, DP-1 Actual output names for output; replace example names
2880x1800@60... Current resolution and refresh rate
at 1440x0 Layout position, not physical resolution
scale Active scale used to calculate logical dimensions
availableModes Reported supported modes; check before pinning a mode

Decision point: if the display is absent, investigate input selection, cables and a direct connection through display troubleshooting. If it is present and only size or position is wrong, continue configuring. Laptop panels often use an eDP name, but your query is authoritative.

Open Setup → Monitors and confirm you are editing your personal file. Before editing:

Terminal window
cp -i ~/.config/hypr/monitors.lua ~/.config/hypr/monitors.lua.before-display-edit

If a backup exists, decide whether it contains an earlier working configuration. Decline overwrite and choose another name if unsure. If the source file is missing, return to the menu and identify the actual configuration path.

Keep the laptop open. Record modes, scales and positions before changing lid behavior, rotation or workspace rules.

5. One display: scale first, text size separately

Section titled “5. One display: scale first, text size separately”

The pinned configuration uses auto in a generic rule. Edit the existing matching line, retaining other settings:

-- Before: let Hyprland choose the output scale
local omarchy_monitor_scale = "auto"
-- Example after: use only when a fixed scale of 1 is intended
local omarchy_monitor_scale = 1

These show before and after: do not keep both declarations. The generic hl.monitor rule uses this variable; an existing specific output rule has its own scale. For differing scales on two screens, proceed to per-output rules below.

After saving and exiting the menu-opened editor, inspect the actual output and compare a browser with a terminal. Saving the file alone does not prove the result.

If overall sizing is suitable and only text needs changing, query the current size before trying a value:

Terminal window
omarchy display text size
omarchy display text size 14

Record the original value and use it to restore your personal preference. omarchy display text size reset restores the default. Open a new Foot window to observe a text-size change. Official text-size behavior

6. Two displays: calculate positions, then add rules

Section titled “6. Two displays: calculate positions, then add rules”

The teaching scenario is top-aligned, with the laptop left and external display right:

Display Output resolution Scale Logical width × height Top-left position
Left laptop 2880 × 1800 2 1440 × 900 0x0
Right external 2560 × 1440 1 2560 × 1440 1440x0

The right output starts at the laptop’s logical right edge: 2880 ÷ 2 = 1440. Using 2880x0 instead would leave a logical gap.

Teaching diagram: logical coordinates, not drawn to scale
(0,0) (1440,0)
┌──────────────────────┬─────────────────────────────┐
│ Laptop: 1440 × 900 │ External: 2560 × 1440 │
│ │ │
└──────────────────────┤ │
│ No neighboring screen here │
└─────────────────────────────┘

The shared boundary is only 900 logical units high. Moving left from a lower part of the external display has no neighboring screen to enter. For bottom alignment, place the laptop at 0x540 because 1440 − 900 = 540; center alignment would use 0x270. Choose a layout matching your desk and pointer habits.

Add specific rules after the generic rule. If those outputs already have rules, edit them instead of duplicating them. Replace names and modes using your own query:

hl.monitor({
output = "eDP-1",
mode = "2880x1800@60",
position = "0x0",
scale = 2,
})
hl.monitor({
output = "DP-1",
mode = "2560x1440@60",
position = "1440x0",
scale = 1,
})

output selects the display, mode selects a supported mode, position sets its top-left corner, and scale determines logical size. Use mode = "preferred" if you want the preferred mode rather than a pinned refresh rate, but recalculate positions from the resulting output. Lua source examples · Coordinate and scale rules

7. Why can some applications still look wrong?

Section titled “7. Why can some applications still look wrong?”

Monitor scale and application rendering both affect the result. This snapshot also sets GDK_SCALE, an integer GTK application setting whose changes require reopening applications. One global application setting cannot encode this example’s two output scales. Do not enter "2,1" or keep changing it as the pointer moves.

Initially preserve that setting and inspect the affected application. If a GTK application’s size is unsuitable, choose an application-level starting point using the configuration’s guidance, reopen it, and test on both screens. This setting does not uniformly control every toolkit or all XWayland applications.

Observation Next check
Every window and shell element is oversized Active output scale and logical space
Only applications opened before the edit are oversized Save work, reopen them, and compare
One app becomes blurry after crossing screens Its Wayland/XWayland and toolkit scaling support
One terminal retains its old text size Compare a new Foot window with the old one
Pointer crossing works on only part of the edge Logical heights and vertical offsets

These observations narrow the investigation; they are not universal fixes for every application.

Inspect active modes, scales and coordinates. Move the pointer across the shared boundary, then move a browser and a new terminal between screens and read both. Finally disconnect and reconnect once. Record actual results and undo the latest change when an observation differs from your goal.

For a presentation showing the same image, select mirroring through Trigger → Hardware. Extension increases working space. Establish an open-lid baseline before testing lid behavior. Workspace pinning is a separate next step: see Hyprland workspace rules.

If one screen still works, restore your backup from a terminal:

Terminal window
cp -i ~/.config/hypr/monitors.lua.before-display-edit ~/.config/hypr/monitors.lua

This overwrites the current personal file: accept only after confirming the backup is the intended version. Open the restored file through Setup → Monitors, save and exit, then query the result. Restore a changed text size separately using its original value. If no graphical screen is usable, follow display troubleshooting rather than stacking unseen edits.

Completion criteria: actual outputs match the intended settings, text is readable, pointer movement is explainable, everyday applications have been checked on both screens, and you know which file to restore.

The Omarchy manual documents official entry points and operations. The pinned monitors.lua defines this configuration baseline. Hyprland’s monitor documentation explains rules and coordinates.

This tutorial adds logical-space comparisons, diagnostic interpretation, a mixed-scale scenario and verification branches. Physical display size, connection bandwidth, drivers and application support still depend on your equipment.