我使用VNC连接到工作中的Linux工作站.在工作中,我有一台20英寸显示器,运行速度为1600x1200,而在家里,我使用的笔记本电脑的分辨率为1440x900.如果我将vncserver设置为运行在1440x900,我错过了显示器上的大量空间,而如果我将它设置为1600x1200运行它不适合笔记本电脑的屏幕,我必须一直滚动它.
有没有什么好方法可以动态调整VNC会话的大小?
我的VNC服务器是在SuSE64上运行的RealVNC E4.x(我不记得确切的版本).
Nat*_*man 152
Real VNC服务器4.4包括对Xrandr的支持,允许调整VNC的大小.启动服务器:
vncserver -geometry 1600x1200 -randr 1600x1200,1440x900,1024x768
Run Code Online (Sandbox Code Playgroud)
然后调整大小:
xrandr -s 1600x1200
xrandr -s 1440x900
xrandr -s 1024x768
Run Code Online (Sandbox Code Playgroud)
小智 67
发现Ubuntu(10.04)附带的vnc4server(4.1.1)也被修补,也支持通过xrandr动态更改分辨率.遗憾的是,该功能很难找到,因为它没有文档记录.所以这里......
使用多个"几何"实例启动服务器,例如:
vnc4server -geometry 1280x1024 -geometry 800x600
Run Code Online (Sandbox Code Playgroud)
从vncviewer中的终端(启用:'允许dymanic桌面大小调整'启用)使用xrandr查看可用模式:
xrandr
Run Code Online (Sandbox Code Playgroud)
更改结果,例如使用:
xrandr -s 800x600
Run Code Online (Sandbox Code Playgroud)
而已.
小智 26
我在我的Linux服务器上运行TigerVNC,它具有基本的randr支持.我只是启动vncserver而没有任何-randr或多个几何选项.
当我在终端中运行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
Run Code Online (Sandbox Code Playgroud)
然后我可以轻松切换到另一个分辨率(fe切换到1360x768):
bash> xrandr -s 5
Run Code Online (Sandbox Code Playgroud)
我正在使用TightVnc查看器作为客户端,它会自动适应新的分辨率.
Pat*_*Pat 25
我认为最好的方法是在不同的端口上运行具有不同几何形状的VNC服务器.我会尝试基于手册页
Run Code Online (Sandbox Code Playgroud)$vncserver :0 -geometry 1600x1200 $vncserver :1 -geometry 1440x900
然后,您可以从工作连接到一个端口,从家到另一个端口.
编辑:然后使用xmove在两个x服务器之间移动窗口.
小智 16
当这个问题首先出现在Google上时,我想我会使用TigerVNC共享一个解决方案,这是目前的默认设置.
xrandr
允许选择显示模式(也称为分辨率),但由于模型被硬编码,
任何额外的模式行,如"2560x1600"或"1600x900"都需要添加到代码中.我认为编写代码的开发人员更聪明,硬编码列表只是一个值的样本.它得出结论,必须有一种方法来添加自定义模型并man xrandr
确认它.
在此背景下,如果目标是在具有上述分辨率的两台计算机之间共享VNC会话,并假设VNC服务器是分辨率为"1600x900"的计算机:
使用与物理显示匹配的几何体启动VNC会话:
$ vncserver -geometry 1600x900 :1
Run Code Online (Sandbox Code Playgroud)在"2560x1600"计算机上启动VNC查看器(我更喜欢Remmina)并连接到远程VNC会话:
host:5901
Run Code Online (Sandbox Code Playgroud)进入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
Run Code Online (Sandbox Code Playgroud)
你会注意到屏幕很小.
列出模式行(请参阅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
Run Code Online (Sandbox Code Playgroud)
或者如果显示器老了,请获取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
Run Code Online (Sandbox Code Playgroud)将新模式行添加到当前VNC会话:
$ xrandr --newmode "2560x1600_60.00" 348.16 2560 2752 3032 3504 1600 1601 1604 1656 -HSync +Vsync
Run Code Online (Sandbox Code Playgroud)在上面的xrandr
输出中查找第二行的显示名称:
VNC-0 connected 1600x900+0+0 0mm x 0mm
Run Code Online (Sandbox Code Playgroud)将新的模式行绑定到当前的VNC虚拟监视器:
$ xrandr --addmode VNC-0 "2560x1600_60.00"
Run Code Online (Sandbox Code Playgroud)用它:
$ xrandr -s "2560x1600_60.00"
Run Code Online (Sandbox Code Playgroud)Ham*_*han 15
有趣的是没有人回答这个问题.在TigerVNC中,当您登录会话时.System > Preference > Display
从顶部菜单栏转到(我使用Cent OS作为我的远程服务器).点击分辨率下拉菜单,有各种可用设置,包括1080p.选择你喜欢的那个.它会随时改变.
确保在提示对话框时应用新设置.否则它将恢复到以前的设置,就像在Windows中一样
小智 9
伙计这很简单.
登录ssh
到您的pi
执行
vncserver -geometry 1200x1600
Run Code Online (Sandbox Code Playgroud)
这将生成一个新会话 :1
连接你的vnc客户端 ipaddress:1
而已.
添加到Nathan(已接受)答案:
我想循环查看分辨率列表,但没有看到任何内容:
function vncNextRes()
{
xrandr -s $(($(xrandr | grep '^*'|sed 's@^\*\([0-9]*\).*$@\1@')+1)) > /dev/null 2>&1 || \
xrandr -s 0
}
Run Code Online (Sandbox Code Playgroud)
它获取当前索引,步骤到下一个索引并在出错时循环回0(即结束)
编辑
修改为匹配更高版本的xrandr("*"在行尾,没有前导分辨率标识符).
function vncNextRes()
{
xrandr -s $(($(xrandr 2>/dev/null | grep -n '\* *$'| sed 's@:.*@@')-2)) || \
xrandr -s 0
}
Run Code Online (Sandbox Code Playgroud)
@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 "$screen" "$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
}
Run Code Online (Sandbox Code Playgroud)