Primarily as a reminder to myself, here’s a small script droppable into ~/bin that allows switching between two custom Linux screen resolutions, that is, resolutions the X server does not necessarily already know about, from the command line.
My use case? A virtual machine within virt-viewer and switch between my laptop’s internal display and an external monitor.
Copy and paste into ~/bin/customres (or whatever you would like to call it), adapt the variables at the top of the script and set up two symlinks lores and hires to it.
#!/bin/bash OUTPUT="Virtual-1" LORES_X=1920 LORES_Y=944 HIRES_X=2560 HIRES_Y=1300 function define_mode { xres="$1" yres="$2" gtf_output=$(gtf $xres $yres 60 | sed -n '/Modeline/{s,.*Modeline ,,;s,_[^"]*",",;p}') modename=${gtf_output%% *} modename=${modename//\"/} modedef=${gtf_output#* } xrandr --newmode ${modename} ${modedef} xrandr --addmode $OUTPUT ${modename} } if [ "$(basename $0)" == "lores" ] ; then xrandr --output Virtual-1 --mode ${LORES_X}x${LORES_Y} 2>/dev/null || { define_mode ${LORES_X} ${LORES_Y} xrandr --output Virtual-1 --mode ${LORES_X}x${LORES_Y} } elif [ "$(basename $0)" == "hires" ] ; then xrandr --output Virtual-1 --mode ${HIRES_X}x${HIRES_Y} 2>/dev/null || { define_mode ${HIRES_X} ${HIRES_Y} xrandr --output Virtual-1 --mode ${HIRES_X}x${HIRES_Y} } else echo "ERROR: Must run me via either \"lores\" or \"hires\" symlink!" fi