Skip to content

Instantly share code, notes, and snippets.

@debloper
Last active September 13, 2024 22:40
Show Gist options
  • Save debloper/2793261 to your computer and use it in GitHub Desktop.
Save debloper/2793261 to your computer and use it in GitHub Desktop.
Add system unrecognized but monitor supported resolution in X
#!/bin/bash
# Copyright (c) 2021 Soumya Deb <debloper@gmail.com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
# ---
# Q: WHY IS THERE A COPYRIGHT NOTICE ON THIS SCRIPT?
# A: It had to be added on (a very reasonable) user request.
# https://gist.github.com/chirag64/7853413#gistcomment-3736041
# First we need to get the modeline string for xrandr
# Luckily, the tool `gtf` will help you calculate it.
# e.g. `gtf <hRes> <vRes> <refreshRate>`:
gtf 1920 1080 60
# In this case, the horizontal resolution is 1920px the
# vertical resolution is 1080px & refresh-rate is 60Hz.
# IMPORTANT: BE SURE THE MONITOR SUPPORTS THE RESOLUTION
# Typically, it outputs a line starting with "Modeline"
# e.g. "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
# Copy this entire string (except for the starting "Modeline")
# Now, use `xrandr` to add a new display mode. Pass the
# copied string as the parameter to the --newmode option:
xrandr --newmode "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
# Well, the string within the quotes is the nick/alias
# of the display mode - you can as well pass something
# as "MyAwesomeHDResolution". But, why though!?!
# Then all you have to do is to add the new mode to the
# display you want to apply, like this:
xrandr --addmode VGA1 "1920x1080_60.00"
# VGA1 is the display name, it might differ for you.
# Run `xrandr` without any parameters to be sure.
# The last parameter is the mode-alias/name which
# you've set in the previous command (--newmode)
# It should add the new mode to the display & apply it.
# If it doesn't apply automatically, force it with:
xrandr --output VGA1 --mode "1920x1080_60.00"
# That's it... Enjoy the new awesome high-res display!
# NOTE to make the change persistent over reboots:
# - save the script file (with the necessary changes)
# - run it at startup (search the web for "How To")
# Thanks for the feedback!
@debloper
Copy link
Author

@namhoangle from the output name, I'm guessing it's a remote desktop session. If that's the case, see if https://unix.stackexchange.com/questions/90101/xrdp-custom-resolution-fedora-19 helps.

If that's not the case, the simplest assertion would be either

  • the resolution you're trying to set isn't available for the display
  • you're using an adapter (DVI, HDMI, DP) which often causes issues
  • you're using NVIDIA drivers, which has some history of causing issues.

Without knowing more about the relevant details of the system, it'll not be possible to pinpoint the issue.

Copy link

ghost commented Oct 2, 2020

how to save this change to make it working after reboot?

@teo1978
Copy link

teo1978 commented Oct 12, 2020

Oh, great, now I get an option with the desired resolution in the droptown to choose. However, when I apply it it has no effect, the screen still stays at 640x480.

Very useful!

@debloper
Copy link
Author

@teo1978 for a person in their 40's you're awfully bitter. Hope you don't intend to spend the rest of your life as such. I'd recommend taking a moment to self-reflect. And if this seems like an unwarranted/unwanted advice, then congrats... I've been able to get my message across without resorting to passive-aggressive smugness or sarcasm.

If I was facing the same issue as yours, I'd check (in order):

  • if the monitor is rated for the resolution+refresh rate
  • the graphics processor is capable of delivering it, and
  • the frame-buffer throughput is sufficient to allow it.

I can't tell which one might be the problem, cause your comment didn't come with any useful diagnostic/troubleshooting information.

@chirag64
Copy link

chirag64 commented May 9, 2021

@anthroid
Copy link

anthroid commented Apr 1, 2022

how to save this change to make it working after reboot? @saviobabu @Mouhamouhy @asdf5252

To make it persistent, just add the resulting xrandr commands to your ~/.xprofile :

#!/bin/sh
xrandr --newmode "1920x1080_60.00"  172.80  1920 2040 2248 2576  1080 1081 1084 1118  -HSync +Vsync
xrandr --addmode VGA1 "1920x1080_60.00"
xrandr --output VGA1 --mode "1920x1080_60.00"

@Vortigern-The-Grey
Copy link

I entered xrandr --newmode "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
and it returned xrandr: Failed to get size of gamma for output default
What do I do?

@debloper
Copy link
Author

@Vortigern-The-Grey I looked up the error and found this discussion: https://askubuntu.com/questions/441040/ - hopefully it helps.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment