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.
9 Answers
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,1024x768Then 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://sourceforge.net/projects/tigervnc/files/stable/
If you want only viewer, then download only viewer, like vncviewer64-1.12.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.
- 103
- 407
The UltraVNC viewer supports auto scaling, so it will resize the viewing window automatically, to display the whole screen of the remote server.

Update
- 1,167
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.
Even though 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.
- 1,248
If you need to change the setting without restarting VNC server, I had good results with:
vncconfig -set RandR="1024x768,1600x900"
and then using xrandr to change resolution as fgregg suggested:
xrandr -s 1024x768
xrandr -s 1600x900
- 141
- 3
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....
- 730
For TightVNC, click on the gear icon (settings) and change your picture quality to "High" and it works nicely.
- 229
I know that this is an old question, but as I found it looking for a way to setup a xrandr with some default sizes (-xrandr 2600x1600,1280x800,1820x1000,1920x1080,1600x1200,2400x1500,1500x950 did not work for me). To add another mode and resize the window to the new size, I use the following script:
The key commands are:
declare -a mdline=( $(gtf ${ip[0]} ${ip[1]} 60 | grep Modeline) )
mdname=$(echo ${mdline[1]} | sed -e 's/"//' -e 's/_.*//')
xrandr --newmode ${mdname} ${mdline[@]:2}
xrandr --addmode VNC-0 ${mdname}
xrandr --output VNC-0 --mode ${mdname}
The full script that I use follows:
#!/bin/bash
#############################################################################
# S C R I P T S / v n c _ a d d _ m o d e
# created Mon Apr 4, 2016 12:48 pm by:
# Copyright 2016 by SilverLoonSystems, LLC.
# All Rights Reserved Worldwide
#
# Licensed under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
#############################################################################
#
declare -a ip
verb=0
case $# in
0) ip=( 2400 1500 );;
1) ip=( $(echo $1 | sed -e 's/x/ /' ) ) ;;
2) ip=( $1 $2 );;
*) ip=( hopeless );;
esac
re='^[0-9]+$'
if (( ${#ip[@]} != 2 )) ; then
echo -n "failed: "
verb=1
fi
(( $verb != 0 )) && echo '${#ip[@]}' "= ${#ip[@]}"
if ! [[ ${ip[0]} =~ $re ]] ; then
echo -n "failed as a number: "
verb=1
fi
(( $verb != 0 )) && echo '${ip[0]} ' is ${ip[0]}
if ! [[ ${ip[1]} =~ $re ]] ; then
echo -n "failed as a number: "
verb=1
fi
(( $verb != 0 )) && echo '${ip[1]} ' is ${ip[1]}
if (( ${#ip[@]} != 2 )) || ! [[ ${ip[0]} =~ $re ]] || ! [[ ${ip[0]} =~ $re ]] ; then
cat <<EOF
error translating the argument list into a screen mode
expecting 0, 1, or 2 arguments
if zero, then the default 2400x1500 is used
if 1, then it should be of the format {width}x{height}
if 2, then the first arg is the width and the second the height
instead got '$@'
and translated that to {width} ${ip[0]} and {height} ${ip[1]}
EOF
exit 1
fi
echo "xrandr known modes, numbered for your convenience:"
(xrandr 2> /dev/null) | awk '/^ / {printf "mode %2d %s\n", NR-3, $0}'
nm="${ip[0]}x${ip[1]}"
echo "going to try to setup $nm"
if (xrandr 2> /dev/null | grep $nm &> /dev/null) ; then
echo "mode $nm is already present"
xrandr --output VNC-0 --mode ${nm}
else
#set -x
#set -v
declare -a mdline=( $(gtf ${ip[0]} ${ip[1]} 60 | grep Modeline) )
mdname=$(echo ${mdline[1]} | sed -e 's/"//' -e 's/_.*//')
xrandr --newmode ${mdname} ${mdline[@]:2}
xrandr --addmode VNC-0 ${mdname}
xrandr --output VNC-0 --mode ${mdname}
fi
I hope that this helps someone...
- 275
With TightVNC (at least) if the server (windows) changes screen resolution then the client automatically changes to match the new resolution.
- 9,204
- 2,394

