我使用VNC连接到工作中的Linux工作站。在工作中,我有一台20英寸的显示器,运行速度为1600x1200,而在家里,我使用的笔记本电脑的分辨率为1440x900。如果我将vncserver设置为以1440x900的速度运行,则可能会浪费很多显示器空间,而如果我将其设置为以1600x1200运行,它不适合笔记本电脑的屏幕,并且我必须一直滚动。
有什么好的方法可以即时调整VNC会话的大小?
我的VNC服务器是SuSE64上运行的RealVNC E4.x(我不记得确切的版本)。
我使用VNC连接到工作中的Linux工作站。在工作中,我有一台20英寸的显示器,运行速度为1600x1200,而在家里,我使用的笔记本电脑的分辨率为1440x900。如果我将vncserver设置为以1440x900的速度运行,则可能会浪费很多显示器空间,而如果我将其设置为以1600x1200运行,它不适合笔记本电脑的屏幕,并且我必须一直滚动。
有什么好的方法可以即时调整VNC会话的大小?
我的VNC服务器是SuSE64上运行的RealVNC E4.x(我不记得确切的版本)。
Answers:
Real VNC服务器4.4包括对Xrandr的支持,该支持允许调整VNC的大小。使用以下命令启动服务器:
vncserver -geometry 1600x1200 -randr 1600x1200,1440x900,1024x768
然后调整大小:
xrandr -s 1600x1200
xrandr -s 1440x900
xrandr -s 1024x768
.vnc/config
文件中很方便。例如,我的配置的第一行是:-randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x1080,3360x1050,1024x700,1200x740,1600x1000,3200x1000
tightvncserver
吗?
发现Ubuntu(10.04)附带的vnc4server(4.1.1)已打补丁,还支持通过xrandr快速更改分辨率。不幸的是,由于未记录该功能,因此很难找到。所以这是...
使用多个“ geometry”实例启动服务器,例如:
vnc4server -geometry 1280x1024 -geometry 800x600
在vncviewer的终端中(启用:“允许dymanic桌面调整大小”),使用xrandr查看可用模式:
xrandr
更改重新溶液,例如使用:
xrandr -s 800x600
而已。
我在具有基本randr支持的Linux服务器上运行TigerVNC。我只是在没有任何-randr或多个-geometry选项的情况下启动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
然后,我可以轻松切换到另一个分辨率(例如切换到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
您会注意到屏幕很小。
列出“ 2560x1600”分辨率的模型(参见ArchLinux Wiki中的xrandr文章):
$ 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
将新的modeline添加到当前的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
将新的Modeline绑定到当前的VNC虚拟监视器:
$ xrandr --addmode VNC-0 "2560x1600_60.00"
用它:
$ xrandr -s "2560x1600_60.00"
有趣的是,没有人回答。在TigerVNC中,当您登录到会话时。System > Preference > Display
从顶部菜单栏转到(我将Cent OS用作远程服务器)。单击分辨率下拉菜单,有多种可用设置,包括1080p。选择一个您喜欢的。它会随时变化。
确保在提示对话框时应用新设置。否则,它将恢复为先前的设置,就像在Windows中一样
添加到弥敦道(已接受)的答案中:
我想浏览一下决议列表,但没有看到任何东西:
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
}
@omiday的解决方案在Xvnc TigerVNC 1.1.0中为我工作,因此我将其压缩为单个bash函数vncsize xy。像这样使用它:vncsize 1400 1000。它适用于任何VNC输出名称,“默认”或“ VNC-0”。
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_]/ } )
local screen=$(xrandr -q|grep connected|cut -d' ' -f1)
xrandr --newmode $newMode
xrandr --addmode "$sscreen" "$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
}
也许是我发布的最无知的答案,但这是:使用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.
$HOME
目录中运行最新的1.4.3 可以按预期运行github.com/TigerVNC/tigervnc/issues/155
我不确定Linux,但是在Windows下,tightvnc将检测并适应服务器上的分辨率更改。
因此,您应该能够将VNC插入工作站,等效于右键单击桌面,属性,将分辨率设置为任意值,并使客户端vnc窗口相应地调整其大小。
另一方面,如果有一种方法可以将现有窗口从一个X服务器移动到另一个X服务器,则可能会解决该问题。
我认为您可以使用xmove在两个单独的x服务器之间移动窗口。因此,如果可行,这至少应该为您提供一种方法,尽管不像更改分辨率那样容易。
我有一个简单的主意,像这样:
#!/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和类似操作系统下的所有显示设备的更好解决方案
我认为这取决于您的窗口管理器。
我是Windows用户,所以这可能是一个错误的猜测,但是:没有所谓的X-Server在Linux机器上运行 -至少在可能是VNC感兴趣的机器上运行-您可以使用“ X客户”?
VNC只是获取屏幕上的所有内容,然后“通过网络将其隧道化”。如果我不是完全错误,那么“ X”协议应该使您有机会使用客户端的桌面分辨率。
给X-服务器在维基百科上一试,这可能给你一个粗略的概述。