How do I set a custom resolution?
Sophia Terry
I tried to use xrandr to set 1680x1050 as a new mode to VGA output, but it says:
sudo xrandr --addmode VGA-0 1680
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 140 (RANDR)
Minor opcode of failed request: 18 (RRAddOutputMode)
Serial number of failed request: 35
Current serial number in output stream: 36 5 Answers
First generate a "modeline" by using cvt
Syntax is: cvt width height refreshrate
cvt 1680 1050 60this gives you:
# 1680x1050 59.95 Hz (CVT 1.76MA) hsync: 65.29 kHz; pclk: 146.25 MHz
Modeline "1680x1050_60.00" 146.25 1680 1784 1960 2240 1050 1053 1059 1089 -hsync +vsyncNow tell this to xrandr:
xrandr --newmode "1680x1050_60.00" 146.25 1680 1784 1960 2240 1050 1053 1059 1089 -hsync +vsyncThen you can now add it to the table of possible resolutions of an output of your choice:
xrandr --addmode VGA-0 1680x1050_60.00The changes are lost after reboot, to set up the resolution persistently, create the file ~/.xprofile with the content:
#!/bin/sh
xrandr --newmode "1680x1050_60.00" 146.25 1680 1784 1960 2240 1050 1053 1059 1089 -hsync +vsync
xrandr --addmode VGA-0 1680x1050_60.00 20 How to set a custom resolution previously specified. After executing the other steps defined to create the resolution, run:
xrandr -s 1680x1050 How to set a custom resolution previously specified when running multiple monitors. After executing the other steps defined to create the resolution, run:
xrandr --output DVI-0 --mode 1680x1050
Replace DVI-0 with your device-id, e.g. VGA-0
Thanks to thom and thirdender this is basically a single command configuration based on the most voted answer.
RES="1920 1200 60" && \
DISP=$(xrandr | grep -e " connected [^(]" | sed -e "s/\([A-Z0-9]\+\) connected.*/\1/") && \
MODELINE=$(cvt $(echo $RES) | grep -e "Modeline [^(]" | sed -r 's/.*Modeline (.*)/\1/') && \
MODERES=$(echo $MODELINE | grep -o -P '(?<=").*(?=")') && \
cat > ~/.xprofile << _EOF
#!/bin/sh
xrandr --newmode $MODELINE
xrandr --addmode $DISP $MODERES
_EOFThe above command will generate the desired ~/.xprofile file. Just make sure you use the resolution (i.e. the RES variable) of your liking. More info here.
You could replace
xrandr | grep -e " connected [^(]" | sed -e "s/\([A-Z0-9]\+\) connected.*/\1/"with
xrandr | grep -e " connected [^(]" | cut -d\ -f1in $DISP variable if that does not work for you.
Definitely you have to take a look at autorandr, there seems to be no easier way.
This is the man page (from Ubuntu):
And this is the source code:
Install it in Ubuntu with:
sudo apt install autorandrThen just save your current config with:
autorandr -s myFaveConfigand change config and save others with
autorandr -s myOtherConfigThen just apply them whenever you want with:
autorandr [theConfigIwant]for example:
autorandr myFaveConfigwill load the first config you saved in this example.
Nothing easier !!