我使用VNC连接到工作中的Linux工作站。在工作中我有一台20英寸显示器,运行速度为1600x1200,而在家里,我使用的笔记本电脑的分辨率为1440x900。 如果我将vncserver设置为在1440x900运行,我错过了我的显示器上的大量空间,而如果我将其设置为1600x1200运行它不适合笔记本电脑的屏幕,我必须一直滚动它。
有没有什么好方法可以动态调整VNC会话的大小?
我的VNC服务器是在SuSE64上运行的RealVNC E4.x(我不记得确切的版本)。
答案 0 :(得分:145)
Real VNC服务器4.4包括对Xrandr的支持,允许调整VNC的大小。使用以下命令启动服务器:
vncserver -geometry 1600x1200 -randr 1600x1200,1440x900,1024x768
然后调整:
xrandr -s 1600x1200
xrandr -s 1440x900
xrandr -s 1024x768
答案 1 :(得分:65)
发现Ubuntu(10.04)附带的vnc4server(4.1.1)也被修补,也支持通过xrandr动态更改分辨率。遗憾的是,该功能很难找到,因为它没有文档记录。所以这就是......
使用多个“几何”实例启动服务器,例如:
vnc4server -geometry 1280x1024 -geometry 800x600
从vncviewer中的终端(启用:'允许dymanic桌面大小调整'启用)使用xrandr查看可用模式:
xrandr
更改结果,例如使用:
xrandr -s 800x600
多数民众赞成。
答案 2 :(得分:26)
我在我的Linux服务器上运行TigerVNC,该服务器具有基本的 randr 支持。 我只是在没有任何-randr或多个几何选项的情况下启动vncserver。
当我在终端中运行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
然后我可以轻松切换到另一个分辨率(f.e。切换到1360x768):
bash> xrandr -s 5
我正在使用TightVnc查看器作为客户端,它会自动适应新的分辨率。
答案 3 :(得分:22)
我认为最好的方法是在不同的端口上运行具有不同几何结构的VNC服务器。我会尝试基于man page
$vncserver :0 -geometry 1600x1200 $vncserver :1 -geometry 1440x900
然后,您可以将工作连接到一个端口,从家连接到另一个端口。
编辑:然后使用xmove在两个x服务器之间移动窗口。
答案 4 :(得分:14)
有趣的是没有人回答这个问题。在TigerVNC中,当您登录会话时。从顶部菜单栏转到System > Preference > Display
(我使用Cent OS作为我的远程服务器)。点击分辨率下拉菜单,有各种可用的设置,包括1080p。选择你喜欢的那个。它会随时改变。
确保在提示对话框时应用新设置。否则它将恢复到之前的设置,就像在Windows
中一样答案 5 :(得分:12)
当这个问题首先出现在Google上时,我想我会使用TigerVNC共享解决方案,这是目前的默认设置。
xrandr
允许选择显示模式(a.k.a分辨率)
由于模型是hard
coded
任何额外的模式,例如" 2560x1600"或" 1600x900"需要
是added into the
code。一世
认为编写代码的开发人员更聪明,更难
编码列表只是值的一个样本。它得出结论
必须有一种方法来添加自定义模型和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"
答案 6 :(得分:7)
伙计这很简单。
通过ssh
登录您的pi
执行
vncserver -geometry 1200x1600
这将生成一个新会话:1
通过ipaddress:1
多数民众赞成。
答案 7 :(得分:6)
添加到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
}
答案 8 :(得分:1)
我不确定linux,但在windows下,tightvnc会检测并适应服务器上的分辨率变化。
所以你应该能够进入工作站VNC,相当于右键单击桌面,属性,设置任何分辨率,并让你的客户端vnc窗口自行调整大小。
答案 9 :(得分:1)
另一方面,如果有办法的话 从一个窗口移动现有窗口 X-server到另一个,可能会解决 问题。
我认为你可以使用xmove在两个独立的x服务器之间移动窗口。因此,如果它有效,这至少应该为你提供一种方法来做你想要的,尽管不像改变分辨率那么容易。
答案 10 :(得分:1)
也许是我发布的最无知的答案,但这里是:使用TigerVNC客户端/查看器并在选项的屏幕选项卡下选中'Resize remote session to local window'
。
我不知道$%#@ TigerVNC客户端告诉远程vncserver或xrandr或Xvnc或gnome还是......但是当我更改TigerVNC客户端窗口时它会调整大小。
我的设置:
有了这个,分辨率会改变以适应客户端窗口的大小,无论它是什么,它不是zooming
,它是实际的分辨率变化(我可以在xrandr输出中看到新的分辨率)。
我尽力为xrandr添加新的分辨率,但无济于事,总是出现'xrandr: Failed to get size of gamma for output default'
错误。
它现在适用于我的版本(虽然我过去没有任何版本的问题,我只使用yum install gnome-* tigervnc-server
安装最新版并且工作正常):
OS: RHEL 6.6 (Santiago)
VNC Server:
Name : tigervnc-server
Arch : x86_64
Version : 1.1.0
Release : 16.el6
# May be this is relevant..
$ xrandr --version
xrandr program version 1.4.0
Server reports RandR version 1.4
$
# I start the server using vncserver -geometry 800x600
# Xvnc is started by vncserver with following args:
/usr/bin/Xvnc :1 -desktop plabb13.sgdcelab.sabre.com:1 (sg219898) -auth /login/sg219898/.Xauthority
-geometry 800x600 -rfbwait 30000 -rfbauth /login/sg219898/.vnc/passwd -rfbport 5901 -fp catalogue:/e
tc/X11/fontpath.d -pn
# I'm running GNOME (installed using sudo yum install gnome-*)
Name : gnome-desktop
Arch : x86_64
Version : 2.28.2
Release : 11.el6
Name : gnome-session
Arch : x86_64
Version : 2.28.0
Release : 22.el6
Connect using Tiger 32-bit VNC Client v1.3.1 on Windows 7.
答案 11 :(得分:1)
@omiday的解决方案在Xvnc TigerVNC 1.1.0中为我工作,因此我将其压缩为单个bash函数 vncsize x y 。像这样使用它: vncsize 1400 1000 。它假定 xrandr 将VNC输出名称报告为默认。
function vncsize {
local x=$1 y=$2
local mode
if mode=$(cvt "$x" "$y" 2>/dev/null)
then
if [[ $mode =~ "Modeline (.*)$" ]]
then
local newMode=${BASH_REMATCH[1]//\"/}
local modeName=${newMode%% *}
local newSize=( ${modeName//[\"x_]/ } )
xrandr --newmode $newMode
xrandr --addmode default "$modeName"
xrandr --size "${newSize[0]}x${newSize[1]}" &&
return 0
else
echo "Unable to parse modeline for ($x $y) from $mode"
return 2
fi
else
echo "\`$x $y' is not a valid X Y pair"
return 1
fi
}
答案 12 :(得分:0)
据我所知,仅使用VNC无法改变客户端的分辨率,因为它只是一个“监视器镜像”应用程序。
然而,TightVNC(这是一个VNC客户端和服务器应用程序)可以在客户端调整屏幕大小,即使所有内容都小一点(类似于图形程序中的图像大小调整技术)。如果你不使用太小的字体大小,这应该工作。理论上,VNC应该在不同的VNC应用程序之间兼容。
答案 13 :(得分:0)
我有一个简单的想法,如下:
#!/bin/sh
echo `xrandr --current | grep current | awk '{print $8}'` >> RES1
echo `xrandr --current | grep current | awk '{print $10}'` >> RES2
cat RES2 | sed -i 's/,//g' RES2
P1RES=$(cat RES1)
P2RES=$(cat RES2)
rm RES1 RES2
echo "$P1RES"'x'"$P2RES" >> RES
RES=$(cat RES)
# Play The Game
# Finish The Game with Lower Resolution
xrandr -s $RES
嗯,我需要一个更好的解决方案,适用于Linux和Similars S.O
下的所有显示设备答案 14 :(得分:-3)