Is it possible to change the resolution of the viewer specified during starting of the vnc server with the geometry command line argument? I have a vncserver configured for a wide screen monitor but I want to view it on a 1024x768 screen.
This same question was asked a while ago on stack overflow: https://stackoverflow.com/questions/15816/changing-the-resolution-of-a-vnc-session-in-linux
The accepted answer from Nathan Fellman:
Real VNC server 4.4 includes support for Xrandr, which allows resizing the VNC. Start the server with:
vncserver -geometry 1600x1200 -randr 1600x1200,1440x900,1024x768
Then resize with:
xrandr -s 1600x1200 xrandr -s 1440x900 xrandr -s 1024x768
With TigerVNC Windows VNC client (viewer) auto resolution works out of the box. No need to set anything anywhere, on the client or on the server. When you first connect to your server, the resolution is set to whatever is preset on the server side but you can easily change it just by resizing the client window; to any resolution, any crazy, non-standard, ad-hoc resolution you want. The remote desktop resolution, say KDE, follows your client window resolution smoothly.
Check that "Resize remote session to the local window" is set. It should be by default.
Please don't confuse auto resolution change with image stretching, alternatively called auto-scaling. This caling is virtually useless, unless you are visually impaired. It works like zoom or looking glass in popular bitmap editors. It just makes pixels bigger (or smaller) by stretching the output image. It decrease image quality significantly, if you stretch a lot.
What users typically want is real resolution change of the remote session. And that is what I talk about earlier and that is what TigetVNC client is capable, providing server has matching functionality. Auto-resolutioning keeps image sharp at any size. Downside is it also increases network bandwidth.
So far I found that only TigerVNC is capable of auto-resolutioning. I tested TightVNC (open source), RealVNC (free version) and UltraVNC (open source) and had no luck with any of them, they provide useless auto-scaling at the best.
TigerVNC homepage: https://tigervnc.org/
TigerVNC sources: https://github.com/TigerVNC/tigervnc
TigerVNC releases on GitHub: https://github.com/TigerVNC/tigervnc/releases
TigerVNC binaries to download: https://bintray.com/tigervnc/stable/tigervnc/1.9.0
If you want only viewer, then download only viewer, like vncviewer64-1.9.0.exe, that is just viewer without bundled VNC server. Beware that with TigerVNC server service starts automatically, silently, in the background, which I strongly detest as a possible security threat.
My server is run with no
-randr setting at all and just basic
-geometry 1024x768. This low resolution is used only when you first connect, but then you can change the resolution just by resizing the client window. If you are curious, here is my full VNC server command:
/usr/bin/Xvnc -log *:syslog:30,TcpSocket:syslog:-1 -inetd -MaxDisconnectionTime=5 -securitytypes=none -displayfd 10 -geometry 1024x768 -AllowOverride=Desktop,AcceptPointerEvents,SendCutText,AcceptCutText,MaxDisconnectionTime,MaxConnectionTime,MaxIdleTime,QueryConnect,QueryConnectTimeOut,AlwaysShared,NeverShared,DisconnectClients,SecurityTypes,Password,PlainUsers -query localhost -once -desktop New session -extension MIT-SHM
According to openSuse package description,
xorg-x11-Xvnc - the openSuse VNC server - is built on TigerVNC code. So in my case TigerVNC client talks to TigerVNC server, so perhaps that is why is is all so seamless :)
My client setup: TigerVNC client 1.9.0 (Windows)
My server setup: openSuse 15.1, xorg-x11-Xvnc 1.9.0, vncmanager 1.0.2, GDM, KDE Plasma.
I received an official reply writing to VNC customer service.
The short version is: no, you cannot change remote resolution to automatically match local vnc controller window / screen resolution.
They told me that is because RDP is a real login session, so the screen behaves as you are a common user in the controlled system.
VNC simply mirrors the screen. And it is not a bad thing because you cannot share RDP session but you can share VNC
I suggested to create a config on vnc server to allow the screen changing because I know that windows API allow third party sw to programmatically set screen resolution.
Then I will wait....
I was surprised to find out that setting the resolution on my Raspberry Pi 4 setup with a RealVNC server and client is as simple doing
xrandr --fb 1024x768
in a terminal window on the remote desktop for the OP usecase of 1024x768.
xrandr with no arguments says
$ xrandr Screen 0: minimum 320 x 200, current 1024 x 768, maximum 7680 x 7680 HDMI-1 disconnected primary (normal left inverted right x axis y axis) HDMI-2 disconnected (normal left inverted right x axis y axis)
so you would think it possible to plop just any arbitrary resolution in the given range, in reality it refused to switch to anything higher than 8K (7680x4320). Anything I tried up to that worked fine.
With TightVNC (at least) if the server (windows) changes screen resolution then the client automatically changes to match the new resolution.