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

First generate a "modeline" by using cvt
Syntax is: cvt width height refreshrate

cvt 1680 1050 60

this 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 +vsync

Now tell this to xrandr:

xrandr --newmode "1680x1050_60.00"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync

Then you can now add it to the table of possible resolutions of an output of your choice:

xrandr --addmode VGA-0 1680x1050_60.00

The 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
  • 19
    The connected device might not be VGA-0. If you get the message xrandr: cannot find output "VGA-0", try running the following command: xrandr | grep -e " connected [^(]" | sed -e "s/\([A-Z0-9]\+\) connected.*/\1/" (source: xrandr on ArchWiki). The output of that command should be the correct device identifier. – thirdender Jul 9 '14 at 6:25
  • 8
    You do not need sudo with xrandr – Panther Oct 12 '15 at 18:14
  • 1
    I would like to add that I have the same error - and the above does not solve the problem at all – TellMeWhy Oct 13 '15 at 9:35
  • 2
    If you're on a VM, the display is usually Virtual1 instead of VGA-0. – CyberEd Mar 22 '16 at 22:37
  • 2
    You need to replace VGA-0 with your monitor connection. Use xrandr --listmonitors. See How to fix error 'xrandr: cannot find output “VGA1”'? – Hooman Mar 7 at 5:27

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
_EOF

The 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.

protected by Community Jun 15 at 18:24

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.