在Linux中更改VNC会话的分辨率


152

我使用VNC连接到工作中的Linux工作站。在工作中,我有一台20英寸的显示器,运行速度为1600x1200,而在家里,我使用的笔记本电脑的分辨率为1440x900。如果我将vncserver设置为以1440x900的速度运行,则可能会浪费很多显示器空间,而如果我将其设置为以1600x1200运行,它不适合笔记本电脑的屏幕,并且我必须一直滚动。

有什么好的方法可以即时调整VNC会话的大小?

我的VNC服务器是SuSE64上运行的RealVNC E4.x(我不记得确切的版本)。


我想提一下我最近遇到的一些问题,但是我还无法对其进行测试。有一个名为FreeNX的新程序已开始替代VNC。这是链接:freenx.berlios.de
andho 2011年

@andho-该链接似乎已断开。
ArtOfWarfare 2014年

@ArtOfWarfare希望这对help.ubuntu.com/community/FreeNX有帮助。现在应该很稳定。如果时间允许,我想尽快尝试一下。
andho 2014年

Answers:


158

Real VNC服务器4.4包括对Xrandr的支持,该支持允许调整VNC的大小。使用以下命令启动服务器:

vncserver -geometry 1600x1200 -randr 1600x1200,1440x900,1024x768

然后调整大小:

xrandr -s 1600x1200
xrandr -s 1440x900
xrandr -s 1024x768

1
谢谢Nathan,即使是Realvnc的人似乎也不强调xrandr功能...另请参见下面的bash函数,以允许循环浏览randr分辨率。
2011年

7
您可能会发现将所有这些选项放在.vnc/config文件中很方便。例如,我的配置的第一行是:-randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x1080,3360x1050,1024x700,1200x740,1600x1000,3200x1000
bfroehle 2012年

@Nathan我尝试使用您提供的解决方案,但没有成功。您能尝试回答我的这个问题吗?
极客

3
我想知道这是否适用tightvncserver吗?
Dimitry K

4
@DimitryK我有tightvncserver,但无法正常工作。我清除它并安装了真正的VNC。我推荐它。所有横向分辨率:320x240,480x320,482x320,560x360,576x360,640x480,640x482,648x486,720x480,720x486,720x540,720x576,768x576,800x480,800x600,1024x600,1024x768,1280x720,1280x800,1280x1024,1366x768,1400x1050,1440x900 1600x900,1600x1024,1600x1200,1680x1050,1920x1080,1920x1200,2048x1024,2048x1152,2048x1536,2560x1080,2560x1440,2560x1600,2560x2048,3072x1536,3072x1728,3840x2160,4096x2048,4096x2304,7680x4320,8192x
barwnikk

68

发现Ubuntu(10.04)附带的vnc4server(4.1.1)已打补丁,还支持通过xrandr快速更改分辨率。不幸的是,由于未记录该功能,因此很难找到。所以这是...

使用多个“ geometry”实例启动服务器,例如:

vnc4server -geometry 1280x1024 -geometry 800x600

在vncviewer的终端中(启用:“允许dymanic桌面调整大小”),使用xrandr查看可用模式:

xrandr

更改重新溶液,例如使用:

xrandr -s 800x600

而已。


我也尝试将您的方法与Nathan建议的方法一起使用,但没有成功。您能发现这里
极客

工作完美。谢谢!
罗尼·迈克尔

27

我在具有基本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查看器作为客户端,它会自动适应新的分辨率。


这样一来,人们就不会再追赶大鹅了,您能同时列出TigerVnc的版本和您的Linux服务器发行版和版本吗?谢谢
nhed 2012年

我可以确认它与TiverVnc 1.1.0(Linux服务器,Linux客户端)配合得很好
Benedikt Waldvogel 2012年

1
我正在使用vncviewer,每次尝试更改窗口关闭时的外观。
2012年

请问这是哪个xrandr版本。我的:xrandr程序版本1.3.5服务器报告RandR版本1.3似乎完全不同,例如没有第一列
Wakan Tanka 2015年

补充一点,它也可以与Real VNC一起使用。经过版本6.0.3测试
Vivek VK

25

我认为最好的办法是在不同的端口上以不同的几何体运行VNC服务器。我会根据手册页尝试

$vncserver :0 -geometry 1600x1200
$vncserver :1 -geometry 1440x900

然后,您可以从办公室连接到一个端口,再从家连接到另一个端口。

编辑:然后使用xmove在两个x服务器之间移动窗口。


3
@Pat,您的解决方案存在的问题是,我无法轻松地将窗口从一个VNC会话移至另一个。如果我必须离开时处于调试阶段,我希望能够从中断的地方继续(也许由于调整大小而使窗口稍微移动了一点)。如果我有两个单独的会话,则将无法继续以前的操作,因为我必须关闭一个会话的窗口,然后在另一个会话中重新打开它们。另一方面,如果有一种方法可以将现有窗口从一个X服务器移动到另一个X服务器,则可能会解决该问题。
内森·费尔曼

1
xmove不在当前的Ubuntu存储库中;xpra是,它将做相同的事情(充当X代理)。
山姆·哈茨菲尔德2010年

20

当这个问题首先出现在Google上时,我想我将分享使用TigerVNC的解决方案,这是当前的默认设置。

xrandr允许选择显示模式(又称分辨率),但是由于对模式行进行了硬编码, 因此需要在代码中添加任何其他模型,例如“ 2560x1600”或“ 1600x900” 。我认为编写代码的开发人员要聪明得多,而硬编码列表只是价值的一个示例。得出的结论是,必须有一种添加自定义模式行和man xrandr确认的方法。

在此背景下,如果目标是在具有上述分辨率的两台计算机之间共享VNC会话,并假定VNC服务器是分辨率为“ 1600x900”的计算机,则:

  1. 使用与物理显示匹配的几何图形启动VNC会话:

    $ vncserver -geometry 1600x900 :1
    
  2. 在“ 2560x1600”计算机上,启动VNC查看器(我更喜欢Remmina)并连接到远程VNC会话:

    host:5901
    
  3. 进入VNC会话后,将启动一个终端窗口。

  4. 确认新几何在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  
    

    您会注意到屏幕很小。

  5. 列出“ 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
    
  6. 将新的modeline添加到当前的VNC会话中:

    $ xrandr --newmode "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  7. 在上面的xrandr输出中,在第二行中查找显示名称:

    VNC-0 connected 1600x900+0+0 0mm x 0mm
    
  8. 将新的Modeline绑定到当前的VNC虚拟监视器:

    $ xrandr --addmode VNC-0 "2560x1600_60.00"
    
  9. 用它:

    $ xrandr -s "2560x1600_60.00"
    

使用它用Tigervnc和mwm创建更大的工作区,它可以增加屏幕大小,但是工作区仅限于vnc使用的初始大小。
user2019716

这是由于mwm,一旦mwm重新启动
便会

很棒,非常感谢您的食谱,它真的很有帮助。
Adrian Rosoga '19

这节省了我很多时间,谢谢!
Ben Davis

17

有趣的是,没有人回答。在TigerVNC中,当您登录到会话时。System > Preference > Display从顶部菜单栏转到(我将Cent OS用作远程服务器)。单击分辨率下拉菜单,有多种可用设置,包括1080p。选择一个您喜欢的。它会随时变化。

在此处输入图片说明

确保在提示对话框时应用新设置。否则,它将恢复为先前的设置,就像在Windows中一样


1
这是TigerVNC,CentOS或窗口管理器的设置吗?
弥敦道·费尔曼

这是CentOS中的设置。登录后可以从“ TigerVNC Viewer”访问它。–
Hammad Khan

2
我的生命如此安全
于家澳

9

伙计们,这真的很简单。

通过登录ssh到您的pi

执行

vncserver -geometry 1200x1600

这将产生一个新的会话 :1

与您的vnc客户连接 ipaddress:1

而已。


7
这是一个错误的答案,因为它不会更改现有会话的分辨率,而只是创建一个新的会话。
内森·费尔曼

6

添加到弥敦道(已接受)的答案中:

我想浏览一下决议列表,但没有看到任何东西:

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
}

3

@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
}

2

也许是我发布的最无知的答案,但这是:使用TigerVNC客户端/查看器,然后'Resize remote session to local window'在“选项”的“屏幕”选项卡下进行检查。

我不知道$%#@ TigerVNC客户端告诉远程vncserver或xrandr或Xvnc或gnome或...的内容,但是当我更改TigerVNC客户端窗口时,它会调整大小。

我的设置:

  • 在CentOS 6上运行的Tiger VNC Server。托管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并可以正常工作):

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.

您的客户端/服务器使用的是哪个TigerVNC版本?我今天尝试过此方法,但它不会自动为我调整大小。我正在运行用于服务器和vncviewer-1.4.3.exe客户端的Xvnc TigerVNC 1.1.0的RHEL 6.2-cdwilson
2015年

@cdwilson希望您以全屏模式尝试使用客户端。添加的版本。HTH
Kashyap

事实证明1.1.0与他们在我们的工作机上运行的任何设备都不兼容。从我的$HOME目录中运行最新的1.4.3 可以按预期运行github.com/TigerVNC/tigervnc/issues/155
cdwilson,2015年

已确认:openSuse 15.1,GDM,KDE Plasma,TigerVNC客户端1.9.0。我的远程桌面的分辨率取决于客户端窗口的大小,任何疯狂的临时分辨率,任何纵横比;在GDM或KDE中。开箱即用,就像魅力一样,无需在客户端或服务器上的任何地方进行任何设置。
Espinosa

1

我不确定Linux,但是在Windows下,tightvnc将检测并适应服务器上的分辨率更改。

因此,您应该能够将VNC插入工作站,等效于右键单击桌面,属性,将分辨率设置为任意值,并使客户端vnc窗口相应地调整其大小。


1

另一方面,如果有一种方法可以将现有窗口从一个X服务器移动到另一个X服务器,则可能会解决该问题。

我认为您可以使用xmove在两个单独的x服务器之间移动窗口。因此,如果可行,这至少应该为您提供一种方法,尽管不像更改分辨率那样容易。


您是否知道SuSE Linux中xmove是否使用其他名称?
内森·费尔曼

@NathanFellman您看过xpra吗?这是一个较新的应用程序,但具有类似的工具en.wikipedia.org/wiki/Xprasoftware.opensuse.org/package/xpra
DDay

我对此没有太多控制权,因为我在一家大型公司中工作,在该公司中IT选择了远程访问工具
Nathan Fellman

0

据我所知,仅使用VNC就无法更改客户端的分辨率,因为它只是一个“监视器镜像”应用程序。

但是,TightVNC(这是VNC客户端和服务器应用程序)可以在客户端调整屏幕大小,即使所有内容都变小(类似于图形程序中的图像大小调整技术)。如果您不使用太小的字体,那应该可以工作。理论上,VNC应该在不同的VNC应用程序之间兼容。


该问题严格来说是linux问题,此Windows答案不适用于此处。在Windows中,VNC只是一个监视器,但在Linux中,它首先是一个虚拟桌面,并且仅在以后的某些版本中添加了“显示0”支持(即监视器)。VNC缩放是非常差的用户体验。
2011年

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和类似操作系统下的所有显示设备的更好解决方案


-3

我认为这取决于您的窗口管理器。

我是Windows用户,所以这可能是一个错误的猜测,但是:没有所谓的X-Server在Linux机器上运行 -至少在可能是VNC感兴趣的机器上运行-您可以使用“ X客户”?

VNC只是获取屏幕上的所有内容,然后“通过网络将其隧道化”。如果我不是完全错误,那么“ X”协议应该使您有机会使用客户端的桌面分辨率。

X-服务器在维基百科上一试,这可能给你一个粗略的概述。


这个想法很好,可以使用ssh隧道和本地x服务器来完成。您的计算机上装有x服务器,并为远程客户端提供了对x服务器的访问权限,这将在您的显示器上呈现远程应用程序的gui。
2011年

@andho不,这根本不是发布者所要求的-这里的问题是,当失去连接时,您将失去寡妇。隧道上打开的窗口仅对短期应用程序有用,如果您要将台式机(以及其中的所有打开的应用程序)从一个客户端转移到另一个客户端,则
无济于事

@nhed,我根本不知道这是否可行,但这是一个主意。至于长期的应用程序,也许可以使用“屏幕”程序?
andho 2011年

@andho屏幕非常棒,对于纯文本应用程序……OP询问了X应用程序……而我到达网络的这个角落是因为我在寻找相同的东西,似乎是xranr或壁橱里的东西xmove(xrandr是一个更清洁的选择)
2011年

@nhed,是的,这也是我遇到的问题。只是把那个想法扔出去,以便更有经验的人可以把它弄出来,而我不必测试这是否完全可能。
andho 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.