This is how I got it working in Xubuntu 16.04.
You need to obtain along string for the desired resolution. This is within the result of the command:
xrandr --verbose
Now pick the part with the resolution you want. It will look something like:
1152x864 (0xa6) 108.000MHz +HSync +VSync
h: width 1152 start 1216 end 1344 total 1600 skew 0 clock 67.50KHz
v: height 864 start 865 end 868 total 900 clock 75.00Hz
From the data above you should get the string 108.000 1152 1216 1344 1600 864 865 868 900 +HSync +VSync
.
To find the name of your output, find a line similar too:
VGA1 connected 1152x864+0+0 (0xa4) normal (normal left inverted right x axis y axis) 306mm x 230mm
Here my output is named VGA1
.
Now create script:
sudo gedit /usr/share/lightdmxrandr.sh
Then in the file write the following:
#!/bin/sh
xrandr --newmode "1152x864_75.00" 108.000 1152 1216 1344 1600 864 865 868 900 +HSync +VSync
xrandr --addmode VGA1 "1152x864_75.00"
xrandr --output VGA1 --mode 1152x864_75.00 --pos 0x0 --rotate normal
Save and close file. Make script executable:
sudo chmod a+rx /usr/share/lightdmxrandr.sh
Create a config file to call the script just created.
sudo gedit /etc/lightdm/lightdm.conf.d/00-myres.conf
inside this file enter:
[Seat:*]
display-setup-script=/usr/share/lightdmxrandr.sh
Save and close file. Restart and hopefully the resolution you chose will be at your login.
In practical terms this is the only way that worked for me, even though re-creating existing resolutions is not logical.
Answer modified from this question.
note
An alternative way to get the long resolution string is the program cvt
. To get a string for resolution 1152x864, refresh rate 75.00:
cvt 1152 864 75
This gave me a slightly different resolution than my desktop resolution, and is the reason I did not include the method in the main answer.