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.
2. Resolution, scale and logical space
Section titled “2. Resolution, scale and logical space”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 ÷ scaleLogical height = output height ÷ scaleThese 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.
3. Read your output information
Section titled “3. Read your output information”Run this read-only query in your graphical session:
hyprctl monitors allRecord 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.
4. Preserve a working starting point
Section titled “4. Preserve a working starting point”Open Setup → Monitors and confirm you are editing your personal file. Before editing:
cp -i ~/.config/hypr/monitors.lua ~/.config/hypr/monitors.lua.before-display-editIf 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 scalelocal omarchy_monitor_scale = "auto"
-- Example after: use only when a fixed scale of 1 is intendedlocal omarchy_monitor_scale = 1These 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:
omarchy display text sizeomarchy display text size 14Record 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.
8. Verify, mirror and undo
Section titled “8. Verify, mirror and undo”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:
cp -i ~/.config/hypr/monitors.lua.before-display-edit ~/.config/hypr/monitors.luaThis 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.
Sources and scope
Section titled “Sources and scope”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.