Trying to simulate 2560x1440 external monitor custom resolution on Pop OS

_david_aaron

New Member
Joined
Sep 3, 2025
Messages
4
Reaction score
4
Credits
42
Hi everyone,

TL;DR:

I have a Samsung 27" monitor with a 1920x1080 max native resolution, attached to a System76 Darter Pro running Pop OS 22.04. When I had the monitor attached to my old MacBook Pro, I used an app called ResolutionMenu (https://github.com/robbertkl/ResolutionMenu) to simulate a 2560x1440 resolution. I'm trying to achieve the same effect on the new System76 machine; does anyone have experience doing this, and know the best way to do it?

The "too long" part:

I've been trying to do this using xrandr, and I haven't been able to get it to work. Things I have tried:

Code:
@pop-os:~$ gtf 2560 1440 60 -x

  # 2560x1440 @ 60.00 Hz (GTF) hsync: 89.40 kHz; pclk: 311.83 MHz
  Modeline "2560x1440_60.00"  311.83  2560 2744 3024 3488  1440 1441 1444 1490  -HSync +Vsync

@pop-os:~$ xrandr --newmode "2560x1440_60.00" 311.83 2560 2744 3024 3488 1440 1441 1444 1490 -HSync +Vsync
xrandr --addmode DP-1 "2560x1440_60.00"
@pop-os:~$ xrandr --output DP-1 --mode "2560x1440_60.00"

This turned my screen to pixelated static, something like the "static snow" on an old TV set when there was no signal from a channel. I tried using cvt:

Code:
@pop-os:~$ cvt 2560 1440 60
# 2560x1440 59.96 Hz (CVT 3.69M9) hsync: 89.52 kHz; pclk: 312.25 MHz
Modeline "2560x1440_60.00"  312.25  2560 2752 3024 3488  1440 1443 1448 1493 -hsync +vsync
@pop-os:~$ xrandr --newmode "2560x1440_60.00"  312.25  2560 2752 3024 3488  1440 1443 1448 1493 -hsync +vsync
@pop-os:~$ xrandr --addmode DP-1 "2560x1440_60.00"
@pop-os:~$ xrandr --output DP-1 --mode "2560x1440_60.00"

Same result. I tried using the -r flag:

Code:
@pop-os:~$ cvt 2560 1440 60 -r
# 2560x1440 59.95 Hz (CVT 3.69M9-R) hsync: 88.79 kHz; pclk: 241.50 MHz
Modeline "2560x1440R"  241.50  2560 2608 2640 2720  1440 1443 1448 1481 +hsync -vsync
@pop-os:~$ xrandr --newmode "2560x1440R"  241.50  2560 2608 2640 2720  1440 1443 1448 1481 +hsync -vsync
@pop-os:~$ xrandr --addmode DP-1 "2560x1440R"
@pop-os:~$ xrandr --output DP-1 --mode "2560x1440R"

Same result. I tried using --scale and --filter nearest:

Code:
@pop-os:~$ xrandr --newmode "1920x1080_60.00" 173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
xrandr --addmode DP-1 "1920x1080_60.00"
@pop-os:~$ xrandr --output DP-1 --mode "1920x1080_60.00" --rotate normal --scale 1.3x1.3 --filter nearest

This actually worked to force my display to simulate 2560x1440 resolution; but it looked absolutely awful. Text on screen was barely readable. When I used the ResolutionMenu app on macOS, it wasn't perfect, the picture wasn't as sharp as on native resolution; but it worked, and the picture was pretty good. This was unusable.

I also tried using a lower refresh rate:

Code:
@pop-os:~$ cvt 2560 1440 45
# 2560x1440 44.94 Hz (CVT) hsync: 66.52 kHz; pclk: 227.75 MHz
Modeline "2560x1440_45.00"  227.75  2560 2720 2992 3424  1440 1443 1448 1480 -hsync +vsync
@pop-os:~$ xrandr --newmode "2560x1440_45.00"  227.75  2560 2720 2992 3424  1440 1443 1448 1480 -hsync +vsync
@pop-os:~$ xrandr --addmode DP-1 "2560x1440_45.00"
@pop-os:~$ xrandr --output DP-1 --mode "2560x1440_45.00"

The monitor went black, and displayed only a message saying "Not optimal mode".

So, I'm running out of ideas. If anyone knows how I can simulate a 2560x1440 resolution on this monitor and make it look good enough to be usable, it would be greatly appreciated. Thanks very much for your help.
 


The monitor went black, and displayed only a message saying "Not optimal mode".

So, I'm running out of ideas. If anyone knows how I can simulate a 2560x1440 resolution on this monitor and make it look good enough to be usable, it would be greatly appreciated. Thanks very much for your help.
Welcome!
Perhaps try scaling with xrandr ... no guarantees. For example, simulating 2560x1440 on a 1920x1080 display:
Code:
 xrandr --output DP-1 --scale 1.3333x1.3333 --fb 2560x1440
"--scale" tells X to scale the output down to your monitor's physical resolution.
"--fb" sets the framebuffer (virtual desktop size).

The maths is: 2560/1920=1.3333, so the scaling is by ~1.33x to simulate.

To revert:
Code:
xrandr --output HDMI-1 --scale 1x1 --fb 1920x1080

Monitor's going blank is common if it doesn't work.

If you are running an nvidia card, there may be some proprietary means to accomplish the scaling, but I can't say. It's nouveau here.
 
xrandr --output DP-1 --scale 1.3333x1.3333 --fb 2560x1440
Amazing--this worked, and it looks pretty good. Not perfect; it's not quite as sharp as native resolution, but it's not bad at all; pretty comparable to what I was working with when using the ResolutionMenu app with MacBook Pro.

It gave me the following message:

xrandr: specified screen 2560x1440 not large enough for output DP-1 (2560x1440+1920+0)

But it rendered the resolution, so it seems all is good.

Thanks very much for your help.
 
One more question: is there a way to make my custom resolution persist on my external monitor when:
  • I shut down/restart Pop OS
  • I log out of Pop OS and log back in
  • I close the laptop lid
  • I open the laptop lid
 
One more question: is there a way to make my custom resolution persist on my external monitor when:
  • I shut down/restart Pop OS
  • I log out of Pop OS and log back in
  • I close the laptop lid
  • I open the laptop lid
To make the custom resolution persist can depend on the Desktop Environment. PopOs used to run Gnome, but AIUI lately moved to a derivative called Cosmic, neither of which I use. However, there is a means of autostart in Gnome which will achieve the desired persistence, so I guess it's similar in Cosmic. It involves writing your command in a script and then placing it somewhere in the user's /home filesystem, and maybe creating a .desktop file to place somewhere. I can't say more, but the details are certainly available.

Personally, however, I'd create a systemd unit to accomplish the task which takes the custom resolution outside of the purview of any desktop environment and will run the desired resolution for any desktop you may choose. There's a bit of learning about writing the systemd unit file, but it would look something like the following ... writing a file with a name like: myresolution.service, with some contents similar to the following:
Code:
[Unit]
Description=Set Screen Resolution
 
[Service]
ExecStart= /usr/bin/xrandr --output DP-1 --scale 1.3333x1.3333 --fb 2560x1440
Type=oneshot
User=<your-username>
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/<your-username>/.Xauthority
 
[Install]
WantedBy=graphical.target
Fill in <your-username> with your username.

Then a file like that is placed in /etc/systemd/system/, and run the following:
To have systemd read it:
Code:
systemctl daemon-reload
To start the service immediately:
Code:
systemctl start myresolution.service
To have the service run over boots:
Code:
systemctl enable myresolution.service

This is untested here of course, but it's the sort of thing done here.
 
Last edited:


Follow Linux.org

Members online


Top