My refurbished PC is up and running but I wanted to share my screen using a VGA switch. This had a disastrous effect on Ubuntu's appearance as the OS didn't seem to be able to detect the screen's native resolution through the switch although it had no problems when I plugged the cable directly into the video card.
There's a fair few
solutions on the web, but I couldn't seem to make any work, so I cobbled together a fix which, although not particularly elegant, does work (for me). Simply put, I automate a command at startup that adds the desired resolution and forces Ubuntu to adopt it as the default.
There are a couple issues with my solution:
- The script runs at startup not at boot, so I'm stuck with a low-res login screen.
- The script (initially) runs too early giving me some weird video effects until the resolution had been reset.
- This will only work for my login
As I'm the only user, I don't have to worry about multiple fixes. Moreover, I've fixed the second issue and resolved to live with the first. Here's how I solved the problem:
First of all, ascertain the monitor's native resolution. I just Googled mine, but if you have the manual, the information is probably in there. My resolution is 1280x1024 with a refresh rate of 60Hz. Now create the resolution in Ubuntu. Open a terminal and type:
sudo cvt 1280 1024 60
Change the values to suit your monitor (horizontal, vertical, and the refresh rate). The output of this command will look similar to that below.
# 1280x1024 59.89 Hz (CVT 1.31M4) hsync: 63.67 kHz; pclk: 109.00 MHz
Modeline "1280x1024_60.00" 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync +vsync
We're interested in the second line (the one starting
Modeline): we'll be using this information in our script later.
Next, determine the Output Port Name (aka monitor designation). In your terminal, type:
sudo xrandr -q
The output of this command gives you information about your monitor and how it's connected to the PC. The output will depend on the video driver in use; for my analogue connection, the port name is
VGA-0. If you're uncertain which designation is correct, look
here (under Output Port Names) to see which is the most likely.
Now prepare the script that will run at startup. Open a text editor such as Gedit with:
sudo gedit /home/username/.resfix
Then:
#!/bin/bash
# Fix screen resolution at boot via VGA switch
xrandr --newmode "1280x1024_60.00" 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync +vsync
xrandr --addmode VGA-0 1280x1024_60.00
xrandr --output VGA-0 --mode 1280x1024_60.00
Change the values (in red) to suit and then save and close your file. Next, make the file executable. In a terminal:
sudo chmod a+x /home/username/.resfix
Now add the script to the startup routine. The easiest way to do this is via the shutdown button - just select
Startup Applications... from the dropdown menu. In the
Startup Applications Preferences dialog, click
Add. Now complete the
Edit Startup Program:
- Name: anything you want!
- Command: /home/username/.resfix
- Comment: something useful!
One last thing to do and that's to delay the script so that it minimizes the weired video. In a terminal:
sudo gedit /home/username/.config/autostart/.resfix.desktop
At the end of the file, add the following:
X-GNOME-Autostart-Delay=15
The number is the time in seconds that you want to delay your script: change yours to suit. Reboot for your changes to take effect.
Sources &References: