我在工作中使用VNC连接到Linux工作站。在工作中,我有一台20英寸的显示器,其分辨率为1600x1200,而在家里,我使用的笔记本电脑的分辨率为1440x900。
如果将vncserver设置为以1440x900运行,我会在显示器上浪费很多空间,而如果将其设置为以1600x1200运行,它将无法在笔记本电脑的屏幕上显示,因此我必须一直滚动。
有什么好的方法可以即时调整VNC会话的大小?
我的VNC服务器是SuSE64上运行的RealVNC E4.x(我不记得确切的版本)。
Real VNC服务器4.4包含对Xrandr的支持,该支持允许调整VNC的大小。使用以下命令启动服务器:
1
| vncserver -geometry 1600x1200 -randr 1600x1200,1440x900,1024x768 |
然后使用以下内容调整大小:
1 2 3
| xrandr -s 1600x1200
xrandr -s 1440x900
xrandr -s 1024x768 |
发现Ubuntu(10.04)附带的vnc4server(4.1.1)已打补丁,还支持通过xrandr快速更改分辨率。不幸的是,由于未记录该功能,因此很难找到。所以这里是...
使用多个"几何"实例启动服务器,例如:
1
| vnc4server -geometry 1280x1024 -geometry 800x600 |
在vncviewer的终端中(启用:"允许动态桌面调整大小"),使用xrandr查看可用模式:
更改重新洗脱,例如使用:
就这样。
我正在Linux服务器上运行TigerVNC,该服务器具有基本的randr支持。
我只是在没有任何-randr或多个-geometry选项的情况下启动vncserver。
当我在终端中运行xrandr时,它将显示所有可用的屏幕分辨率:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 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):
我正在使用TightVnc查看器作为客户端,它会自动适应新的分辨率。
我认为最好的办法是在不同的端口上以不同的几何体运行VNC服务器。我会根据手册页尝试
1 2
| $vncserver :0 -geometry 1600x1200
$vncserver :1 -geometry 1440x900 |
然后,您可以从公司连接到一个端口,也可以从家连接到另一个端口。
编辑:然后使用xmove在两个x服务器之间移动窗口。
当这个问题首先出现在Google上时,我想我应该使用TigerVNC共享一个解决方案,这是目前的默认设置。
xrandr允许选择显示模式(也称为分辨率)
由于模式线很难
编码的
任何其他Modeline(例如" 2560x1600"或" 1600x900")都需要
被添加到
码。一世
认为编写代码的开发人员更聪明,更努力
编码列表只是值的样本。得出的结论是
必须有一种添加自定义模式行的方法,并且man xrandr确认
它。
在此背景下,如果目标是在两个之间共享VNC会话
具有上述分辨率并假定VNC服务器是
分辨率为" 1600x900"的计算机:
使用与物理显示匹配的几何图形启动VNC会话:
1
| $ vncserver -geometry 1600x900 :1 |
在" 2560x1600"计算机上,启动VNC查看器(我更喜欢
Remmina)并连接到远程VNC
会话:
一旦在VNC会话中启动了终端窗口。
确认新几何在VNC会话中可用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| $ 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"分辨率:
1 2 3
| $ 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计时:
1 2 3
| $ 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会话中:
1
| $ xrandr --newmode"2560x1600_60.00" 348.16 2560 2752 3032 3504 1600 1601 1604 1656 -HSync +Vsync |
在上面的xrandr输出中,查找第二个显示名称
行:
1
| VNC-0 connected 1600x900+0+0 0mm x 0mm |
将新的Modeline绑定到当前的VNC虚拟监视器:
1
| $ xrandr --addmode VNC-0"2560x1600_60.00" |
使用它:
1
| $ xrandr -s"2560x1600_60.00" |
有趣的是,没有人回答。在TigerVNC中,当您登录到会话时。从顶部菜单栏转到System > Preference > Display(我使用Cent OS作为远程服务器)。单击分辨率下拉菜单,有多种可用设置,包括1080p。选择您喜欢的一个。它会随时更改。
请确保在出现对话框时应用新设置。否则,它将恢复为先前的设置,就像在Windows
中一样
伙计,这真的很简单。
通过ssh登录到您的pi
执行
1
| vncserver -geometry 1200x1600 |
这将生成一个新的会话:1
通过ipaddress:1
与vnc客户端连接
就这样。
添加到弥敦道(已接受)的答案中:
我想浏览一下决议列表,但没有看到任何内容:
1 2 3 4 5
| function vncNextRes()
{
xrandr -s $(($(xrandr | grep '^*'|sed 's@^\\*\\([0-9]*\\).*$@\\1@')+1)) > /dev/null 2>&1 || \\
xrandr -s 0
} |
它获取当前索引,移至下一个索引,并在发生错误(即结束)时循环回到0
编辑
已修改,以匹配更高版本的xrandr(" *"在行尾,并且没有前导分辨率标识符)。
1 2 3 4 5
| function vncNextRes()
{
xrandr -s $(($(xrandr 2>/dev/null | grep -n '\\* *$'| sed 's@:.*@@')-2)) || \\
xrandr -s 0
} |
@omiday的解决方案在Xvnc TigerVNC 1.1.0中为我工作,因此我将其压缩为单个bash函数vncsize x y。像这样使用它:vncsize 14001000。它适用于任何VNC输出名称,"默认"或" VNC-0"。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 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客户端窗口时,它会调整大小。
我的设置:
-
在CentOS 6上运行的Tiger VNC服务器。托管GNOME桌面。 (也可以与RHEL 6.6一起使用)
-
Windows带有Tiger VNC Client的某些版本。
通过此操作,分辨率将更改为适合客户端窗口大小的大小,而不是zooming,这是实际的分辨率更改(我可以在xrandr输出中看到新的分辨率)。
我尽力为xrandr添加新的分辨率,但无济于事,总是以'xrandr: Failed to get size of gamma for output default'错误结束。
目前适用于我的版本(尽管过去我没有遇到任何版本问题,但我只是使用yum install gnome-* tigervnc-server安装了最新版本并可以正常工作):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 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. |
On the other hand, if there's a way to
move an existing window from one
X-server to another, that might solve
the problem.
我认为您可以使用xmove在两个单独的x服务器之间移动窗口。因此,如果可行,这至少应该为您提供一种方法来完成您想要的事情,尽管不像更改分辨率那样容易。
我不确定linux,但是在Windows下,tightvnc将检测并适应服务器上的分辨率更改。
因此,您应该能够VNC进入工作站,等效于右键单击桌面,属性,将分辨率设置为任意值,并让客户端vnc窗口相应地调整其大小。
我有一个简单的主意,像这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #!/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和类似的S.O下的所有显示设备的更好的解决方案。
据我所知,仅使用VNC就无法更改客户端的分辨率,因为它只是一个"监视器镜像"应用程序。
但是,TightVNC(这是VNC客户端和服务器应用程序)可以在客户端调整屏幕大小,即使所有内容都变小(类似于图形程序中的图像大小调整技术)。如果您不使用太小的字体,那应该可以工作。理论上,VNC应该在不同的VNC应用程序之间兼容。
我认为这取决于您的窗口管理器。
我是Windows用户,所以这可能是一个错误的猜测,但是:您是否可以在Linux机器上运行X-Server,至少在可能是VNC感兴趣的机器上运行?到" X-Clients"?
VNC只是获取屏幕上显示的所有内容,然后"通过您的网络将其隧道化"。如果我不是完全不对,那么" X"协议应该使您有机会使用客户端的桌面分辨率。
尝试一下Wikipedia上的X-Server,这可能会给您一个大概的概述。