我使用VNC连接到工作中的Linux工作站.在工作中,我有一台20英寸显示器,运行速度为1600x1200,而在家里,我使用的笔记本电脑的分辨率为1440x900.如果我将vncserver设置为运行在1440x900,我错过了显示器上的大量空间,而如果我将它设置为1600x1200运行它不适合笔记本电脑的屏幕,我必须一直滚动它.
有没有什么好方法可以动态调整VNC会话的大小?
我的VNC服务器是在SuSE64上运行的RealVNC E4.x(我不记得确切的版本).
Real VNC服务器4.4包括对Xrandr的支持,允许调整VNC的大小.启动服务器:
vncserver -geometry 1600x1200 -randr 1600x1200,1440x900,1024x768
然后调整大小:
xrandr -s 1600x1200 xrandr -s 1440x900 xrandr -s 1024x768
发现Ubuntu(10.04)附带的vnc4server(4.1.1)也被修补,也支持通过xrandr动态更改分辨率.遗憾的是,该功能很难找到,因为它没有文档记录.所以这里......
使用多个"几何"实例启动服务器,例如:
vnc4server -geometry 1280x1024 -geometry 800x600
从vncviewer中的终端(启用:'允许dymanic桌面大小调整'启用)使用xrandr查看可用模式:
xrandr
更改结果,例如使用:
xrandr -s 800x600
而已.
我在我的Linux服务器上运行TigerVNC,它具有基本的randr支持.我只是启动vncserver而没有任何-randr或多个几何选项.
当我在终端中运行xrandr时,它会显示所有可用的屏幕分辨率:
bash> xrandr SZ: Pixels Physical Refresh 0 1920 x 1200 ( 271mm x 203mm ) 60 1 1920 x 1080 ( 271mm x 203mm ) 60 2 1600 x 1200 ( 271mm x 203mm ) 60 3 1680 x 1050 ( 271mm x 203mm ) 60 4 1400 x 1050 ( 271mm x 203mm ) 60 5 1360 x 768 ( 271mm x 203mm ) 60 6 1280 x 1024 ( 271mm x 203mm ) 60 7 1280 x 960 ( 271mm x 203mm ) 60 8 1280 x 800 ( 271mm x 203mm ) 60 9 1280 x 720 ( 271mm x 203mm ) 60 *10 1024 x 768 ( 271mm x 203mm ) *60 11 800 x 600 ( 271mm x 203mm ) 60 12 640 x 480 ( 271mm x 203mm ) 60 Current rotation - normal Current reflection - none Rotations possible - normal Reflections possible - none
然后我可以轻松切换到另一个分辨率(fe切换到1360x768):
bash> xrandr -s 5
我正在使用TightVnc查看器作为客户端,它会自动适应新的分辨率.
我认为最好的方法是在不同的端口上运行具有不同几何形状的VNC服务器.我会尝试基于手册页
$vncserver :0 -geometry 1600x1200 $vncserver :1 -geometry 1440x900
然后,您可以从工作连接到一个端口,从家到另一个端口.
编辑:然后使用xmove在两个x服务器之间移动窗口.
当这个问题首先出现在Google上时,我想我会使用TigerVNC共享一个解决方案,这是目前的默认设置.
xrandr
允许选择显示模式(也称为分辨率),但由于模型被硬编码,
任何额外的模式行,如"2560x1600"或"1600x900"都需要添加到代码中.我认为编写代码的开发人员更聪明,硬编码列表只是一个值的样本.它得出结论,必须有一种方法来添加自定义模型并man xrandr
确认它.
在此背景下,如果目标是在具有上述分辨率的两台计算机之间共享VNC会话,并假设VNC服务器是分辨率为"1600x900"的计算机:
使用与物理显示匹配的几何体启动VNC会话:
$ vncserver -geometry 1600x900 :1
在"2560x1600"计算机上启动VNC查看器(我更喜欢Remmina)并连接到远程VNC会话:
host:5901
进入VNC会话后,启动一个终端窗口.
确认VNC会话中的新几何图形是否可用:
$ xrandr Screen 0: minimum 32 x 32, current 1600 x 900, maximum 32768 x 32768 VNC-0 connected 1600x900+0+0 0mm x 0mm 1600x900 60.00 + 1920x1200 60.00 1920x1080 60.00 1600x1200 60.00 1680x1050 60.00 1400x1050 60.00 1360x768 60.00 1280x1024 60.00 1280x960 60.00 1280x800 60.00 1280x720 60.00 1024x768 60.00 800x600 60.00 640x480 60.00
你会注意到屏幕很小.
列出模式行(请参阅ArchLinux wiki中的xrandr文章)获取"2560x1600"分辨率:
$ cvt 2560 1600 # 2560x1600 59.99 Hz (CVT 4.10MA) hsync: 99.46 kHz; pclk: 348.50 MHz Modeline "2560x1600_60.00" 348.50 2560 2760 3032 3504 1600 1603 1609 1658 -hsync +vsync
或者如果显示器老了,请获取GTF时间:
$ gtf 2560 1600 60 # 2560x1600 @ 60.00 Hz (GTF) hsync: 99.36 kHz; pclk: 348.16 MHz Modeline "2560x1600_60.00" 348.16 2560 2752 3032 3504 1600 1601 1604 1656 -HSync +Vsync
将新模式行添加到当前VNC会话:
$ xrandr --newmode "2560x1600_60.00" 348.16 2560 2752 3032 3504 1600 1601 1604 1656 -HSync +Vsync
在上面的xrandr
输出中查找第二行的显示名称:
VNC-0 connected 1600x900+0+0 0mm x 0mm
将新的模式行绑定到当前的VNC虚拟监视器:
$ xrandr --addmode VNC-0 "2560x1600_60.00"
用它:
$ xrandr -s "2560x1600_60.00"
有趣的是没有人回答这个问题.在TigerVNC中,当您登录会话时.System > Preference > Display
从顶部菜单栏转到(我使用Cent OS作为我的远程服务器).点击分辨率下拉菜单,有各种可用设置,包括1080p.选择你喜欢的那个.它会随时改变.
确保在提示对话框时应用新设置.否则它将恢复到以前的设置,就像在Windows中一样
伙计这很简单.
登录ssh
到您的pi
执行
vncserver -geometry 1200x1600
这将生成一个新会话 :1
连接你的vnc客户端 ipaddress:1
而已.
添加到Nathan(已接受)答案:
我想循环查看分辨率列表,但没有看到任何内容:
function vncNextRes() { xrandr -s $(($(xrandr | grep '^*'|sed 's@^\*\([0-9]*\).*$@\1@')+1)) > /dev/null 2>&1 || \ xrandr -s 0 }
它获取当前索引,步骤到下一个索引并在出错时循环回0(即结束)
编辑
修改为匹配更高版本的xrandr("*"在行尾,没有前导分辨率标识符).
function vncNextRes() { xrandr -s $(($(xrandr 2>/dev/null | grep -n '\* *$'| sed 's@:.*@@')-2)) || \ xrandr -s 0 }