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

时间:2008-08-19 06:56:39

标签: linux vnc

我使用VNC连接到工作中的Linux工作站。在工作中我有一台20英寸显示器,运行速度为1600x1200,而在家里,我使用的笔记本电脑的分辨率为1440x900。 如果我将vncserver设置为在1440x900运行,我错过了我的显示器上的大量空间,而如果我将其设置为1600x1200运行它不适合笔记本电脑的屏幕,我必须一直滚动它。

有没有什么好方法可以动态调整VNC会话的大小?

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

15 个答案:

答案 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。选择你喜欢的那个。它会随时改变。

enter image description here

确保在提示对话框时应用新设置。否则它将恢复到之前的设置,就像在Windows

中一样

答案 5 :(得分:12)

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

xrandr允许选择显示模式(a.k.a分辨率) 由于模型是hard coded 任何额外的模式,例如" 2560x1600"或" 1600x900"需要 是added into the code。一世 认为编写代码的开发人员更聪明,更难 编码列表只是值的一个样本。它得出结论 必须有一种方法来添加自定义模型和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. 列出模式行(参见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
    
  6. 将新的模式行添加到当前的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. 将新的模式行绑定到当前的VNC虚拟监视器:

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

    $ xrandr -s "2560x1600_60.00"
    

答案 6 :(得分:7)

伙计这很简单。

通过ssh登录您的pi

执行

vncserver -geometry 1200x1600

这将生成一个新会话:1

通过ipaddress:1

与您的vnc客户端建立联系

多数民众赞成。

答案 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客户端窗口时它会调整大小。

我的设置:

  • Tiger VNC Server在CentOS 6上运行。托管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.

答案 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)

我认为这取决于你的窗口管理员。

我是一个Windows用户,所以这可能是一个错误的猜测,但是:在Linux机器上运行的是什么叫X-Server - 至少在那些可能是VNC的有趣目标的地方 - 你可以连接到“X-Clients”?

VNC只需接收屏幕上的所有内容并“通过网络将其隧道化”。如果我没有完全错,那么“X”协议应该让您有机会使用客户端的桌面分辨率。

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