I own a ViewSonic VA1931wa-LED monitor which has a native resolution of 1366x768 pixels with a refresh rate of 60Hz. The problem is that no matter what I do, it works just fine on Windows but on any Linux distribution it can't work properly. I have experimented both with the proprietary nvidia driver (my GPU is an nvidia GeForce 210) and with the nouveau driver and the resolutions I get which are closest to the native one are 1368x768 and 1360x768.

I have also tried typing gtf 1366 768 60 in the terminal and the output is the following:

    # 1368x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 85.86 MHz

Modeline "1368x768_60.00" 85.86 1368 1440 1584 1800 768 769 772 795 -HSync +Vsync

As you can clearly see even though I type in 1366 horizontal pixels I get 1368 as an output. So, is there a way to force my monitor to display its native resolution? If not then what else can be done?


1 Answer 1


Due to the way the legacy CRTC hardware works on Nvidia graphics cards, you can only set horizontal resolutions which are multiples of 8. 1360 and 1368 are multiples of 8, 1366 isn't.

You didn't say how your monitor is connected to your graphics card (VGA, DisplayPort, HDMI/DVI, ...). The details are a bit complicated, but again for legacy reasons, some of those connections include a horizontal and vertical phase where only blank pixels are sent. For your given modeline, you'd e.g. have 1368 framebuffer pixels out of 1584 horizontal pixels in total.

That means it doesn't really matter that the last two pixels of the 1368 range are not displayed, the card will send an additional 216 blank pixels that are also ignored by the monitor, anyway.

So in your case, I'd just choose to the 1368 horizontal resolution. It means your desktop will have two pixels at the right that are not visible (and I don't know any way to convince X that the actual framebuffer is smaller). Possibly you can configure your window manager to always ignore this area.


VGA uses analog transmission, so an LCD connected to VGA has a A/D converter to convert the pixel information back to digital. I'm not completely sured what you mean by "some vertical parts of the display are blurred", but if you mean vertical areas or stripes in equal distance, the reason is that the A/D conversion doesn't happen on the pixel boundary, and the reason for that is that the total horizontal width (1584 in your modeline) isn't what the monitor needs: This total width will stretch or shrink the pixels, so at regular times the sampling will happen at a boundary between pixels.

So you can play around with the total width (and/or the sync values, to shift the image) of your modeline.

Also, please have a look at your /var/log/Xorg.0.log, it should contain the modelines the monitor suggests via EDID. Or read the EDID data using other tools. If you don't know how to interpret the log, please upload it in a pastebin etc., and edit your question with a link.

Another thing you can try is to look up which modeline Windows uses (though I'm not sure where to find this information under Windows).

  • The monitor is connected to the GPU through VGA, which is the only interface available on this monitor. The problem is that even though I can set my resolution to 1368x768 and the picture is just fine, some vertical parts of the display are blurred and can't be fixed even when adjusting the settings manually. But what's even more puzzling is that under Windows, both the GPU and the monitor's native resolution are instantly recognised and applied once the driver is installed and it works flawlessly.
    – Losraio
    Nov 23, 2018 at 18:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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