How can I get consistent sizes with physically different monitors on Linux?


I can't think of a concise way of wording this. I have three monitors. Each has the same resolution - 1920x1080px. But each one has a different physical size - 61 cm monitor, 39 cm laptop, and 48 cm monitor.

Three monitors.

Here's my problem. When I move a window from one screen to another, the window changes size.

It contains the same number of pixels, but it has different physical dimensions. Here's one window, stretched across all three screens:

A long blue line stretched across each monitor. It is a different height on each.

As you can see, the blue bar is a different thickness on each screen.

I can change the relative vertical placement of each monitor fairly easily. So I can line up the top of each screen, but that doesn't help with the sizing.

Multi monitor settings showing the relative placement of the screens.

What I want, is something like this screenshot from SuperPaper Wallpaper manager. Three monitors, with their physical sizes shown.

That app correctly detects the physical dimensions of my screens and displays them correctly. How can I get Ubuntu / Pop OS / Wayland to do the same?

I'm using a modern Wayland display server. To enable Fractional Scaling, I run:

gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

And then reboot. Then I get these options per display. A scaling display options screen.

That's great - but intervals of 25% just aren't fine grained enough from me. And, because my external screens are larger than my internal screens, I need them to have a smaller scaling factor. Assuming my laptop is 100%, I need one monitor to be 90% and the other to be 66%.

There's a Gnome bug open since 2017 - but no fix yet.

I could set my laptop's screen to be 150% and the other screens to be 100% and 125% - but that makes everything on my main screen far too large.

Ideally, I'd like to tell Linux the physical dimensions of my monitors, and their placement, then let it work out the fine detail. But I'll settle for some command line fiddling.

To be clear, this isn't a problem with HiDPI - all my screens are less than 4K.

If you have a suggestion for how to independently underscale individual displays using Wayland - I'd love to know!

Possible objections

  • It'll look blurry
  • Not every component can scale
    • The modern Linux operating system mostly uses SVG for icons, and fonts are designed to scale. So I don't see why that would be the case.
  • It'll spike your CPU / GPU
    • I'm always tethered to power when I'm using multiple monitors. And I'm mostly not running computationally intensive apps.
  • Stop being so obsessive
    • Fair!

Share this post on…

  • Mastodon
  • Facebook
  • LinkedIn
  • BlueSky
  • Threads
  • Reddit
  • HackerNews
  • Lobsters
  • WhatsApp
  • Telegram

One thought on “How can I get consistent sizes with physically different monitors on Linux?”

  1. said on beko.famkos.net:

    Sounds like you want to go back to tweaking an Xorg config file 🙂 A Monitor section has an option for a DisplaySize (in mm) that may be used (overriden by dpi from DDC file so may have to be disabled) but since the dimensions seem to be detected fine already I’d fiddle with xrand and if you’re happy with the results put that in ~/.xprofile or whatever. Here you can set anything without restrictions from the GUI. Example: xrandr --output DisplayPort-0 --scale 0.8x0.8 Sadly this doesn’t seem to work with Wayland (I tried it even with XWayland for you). There was a project to rewrite xrandr but looks like it never flew. Latest solution to this seems to be wlr-randr that has according to source a --scale parameter but this requires wlr-output-management-unstable-v1 and while this may be in wlroots by now it’s not shipped (for me!) yet. Your mileage may vary.

    Reply | Reply to original comment on beko.famkos.net

What are your reckons?

All comments are moderated and may not be published immediately. Your email address will not be published.

Allowed HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <p> <pre> <br> <img src="" alt="" title="" srcset="">