我在办公室使用 VNC 完成绝大部分工作。我们设置了一组 Linux 服务器,供我们通过 SSH 登录以完成工作。它们使我们能够使用 VNC,这样我们就可以获得持久的桌面环境,从而简化工作流程。我通过办公桌上的双显示器 Windows 系统进行连接。我可以根据自己的需要为我的会话设置 TightVNC 服务器。
我希望能够设置服务器,以便它创建一个具有两个独立监视器的会话。它们可以拼接成一个视口,但我不希望我的 Fluxbox 任务栏或最大化窗口横跨整个屏幕,就像我仅将水平分辨率翻倍时一样。对于 X,我希望它看到两个屏幕。但对于 TightVNC Viewer,它只会显示为单个宽显示屏。
我在网上查看过,看到有人提到可以做到这一点,但没有真正的教程或要通过的开关列表来实现它。我无法使用 xorg.conf 创建多个适配器,因为我没有 root 权限(而且我们也没有系统范围的 xorg.conf 文件)。服务器位于机架上并且是无头的,因此没有未使用的物理适配器可以重新用作 VNC 的虚拟监视器。我尝试在命令行上指定多个屏幕,vncserver
然后-screen
使用xrandr
尝试将“VNC-1”放在“VNC-0”旁边,但它一直报告未找到名为“VNC-1”的输出,即使我查询它显示连接到它的显示器。如果我xrandr
通过--screen 1
VNC 进入以这种方式设置的会话,我仍然只能看到屏幕 0(在输出“VNC-0”上)。
我想一定是我遗漏了什么。配置xrandr
似乎是关键,但我似乎无法弄清楚调用 VNC 服务器时的先决条件步骤。
另请注意:
- 我们使用 Xvnc TightVNC 1.3.0 作为服务器。因此,它不使用 x11vnc 作为后端。
- 我的 Windows 机器正在连接最新版本的 TightVNC 查看器(截至本文发布时为 2.7.10)。
- 我尝试使用 Fluxbox 和 Gnome 进行此设置,行为上没有任何区别 - 仅在运行的桌面/WM 上存在区别。
- 我不想在此会话中设置两个单独的显示器。我希望在一个显示器上创建的窗口能够拖到另一个显示器上。
我遗漏了什么?或者我想要做的事情是否可行?
编辑:(2016年6月16日) 需要强调的是,我看不到任何可用的物理显示器(无论使用过还是未使用过)。我不知道物理机器是什么样子,但它是无头的,所以很可能没有物理显示适配器。
当我xrandr
通过带有 X 转发的 SSH 连接后运行时,我看到的是以下内容:
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 0 x 0, current 3840 x 1200, maximum 32768 x 32768
default connected 3840x1200+0+0 0mm x 0mm
3840x1200 0.0*
从 VNC 会话:
Screen 0: minimum 32 x 32, current 1920 x 1200, maximum 32768 x 32768
VNC-0 connected 1920x1200+0+0 0mm x 0mm
1920x1200 60.0*
1920x1080 60.0
1600x1200 60.0
1680x1050 60.0
1400x1050 60.0
1360x768 60.0
1280x1024 60.0
1280x960 60.0
1280x800 60.0
1280x720 60.0
1024x768 60.0
800x600 60.0
640x480 60.0
如果我尝试向未命名的输出添加模式,它将显示以下内容:
> xrandr --addmode VIRTUAL2 1920x1200_60.00
xrandr: cannot find output "VIRTUAL2"
我可以使用任何名称作为输出(我已尝试了几个),而我看到的只是这个错误。
答案1
这里的技巧是生成一个虚拟的在服务器上监控,将它放置在与真实显示器相关的任何位置,然后指示虚拟网络计算机使用您想要使用的整个显示器(真实 + 虚拟)的那部分。所有这些都在非常有用的 Arch Linux 论坛。
要创建虚拟镜像:
$ gtf 1920 1080 60 # 1920x1080 @ 60.00 Hz (GTF) hsync: 67.08 kHz; pclk: 172.80 MHz Modeline "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
允许您找到所需的模式行:假设虚拟显示器尺寸为 1920x1080,刷新率为 60Hz,您可以根据需要进行调整。
现在,您可以通过以下方式生成新的模式行
xrandr --newmode "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
您现在可以生成虚拟1通过以下方式监控:
xrandr --addmode VIRTUAL1 1920x1080_60.00
现在,您可以将虚拟显示器放在现有显示器的左侧(在我的情况下为 HDMI1,请根据自己的需要进行更改):
xrandr --output VIRTUAL1 --mode 1920x1080_60.00 --left-of HDMI1
最后,你可能决定只看到显示器的虚拟部分(例如)
x11vnc -clip 1920x1080+0+0 x11vnc -clip xinerama1
(无论哪种方式对您来说都适用)。如果您想查看整个监视器空间(虚拟 + 真实),只需省略上述操作即可。
上面引用的原始帖子建议在您希望启动时在远程计算机上传递以下两个参数虚拟网络会议:
vncviewer -encodings "tight copyrect"
我从来没觉得这有必要,但我会把它传递给你,因为 YMMV。
附言:你如何描述X11应该如何对待两个不同的监视器的存在是令人困惑的。X11最简单且无需我们干预的方法是创建一个工作区(称为屏幕) 从现有的显示器中分离出来,这样窗口就可以从一个显示器拖到另一个显示器,鼠标也可以无障碍地在显示器上移动。所有的监视空间(屏幕)。此外,最大化窗口只会填充它们所在的显示器,而不是屏幕。我认为这就是你想要的,也是上述内容无需额外工作即可实现的。其他任何事情都需要工作(如果可以完成的话)。
答案2
使用 Fedora 26 时,我遇到了同样的问题,即 VIRTUAL1 无法通过 xrandr 命令显示。
然后我按照其他说明重用空输出,如 HDMI-2,并且运行良好,但是:
- Gnome(和 xrandr)无法将空输出识别为已连接,并且不会显示虚拟显示器以在扩展桌面或克隆中安排位置。每次在其他输出中连接新的物理显示器时,它都有很高的概率会中断。
- 更糟糕的是,由于 gnome-shell(以及下面的 mutter)不将
新的虚拟显示器视为
复合帧缓冲区中可视区域的一部分,因此它没有被正确地重新绘制,并且窗口
在移动时会被撕裂,留下永久的动画痕迹,
即使关闭窗口后,即使重新启动 x11vnc 后,它们仍然存在。
然后,在使用虚拟驱动程序进行短暂的反复试验后,我发现它不需要完整的 xorg.conf 文件,但只需将“intel”驱动程序(在我的情况下;您应该使用自己的驱动程序名称)信息添加到 /etc/X11/xorg.conf.d 目录下的文件中即可激活 VIRTUAL1 和 VIRTUAL2 输出,并使 gnome-shell 将它们识别为有效输出。(我还注意到输出名称略有变化,例如从“eDP-1”更改为“eDP1”)此外,我还将选项“TearLess”设置为 true,以便在复合管理器不重新绘制时让驱动程序重新绘制。
~# vi /etc/X11/xorg.conf.d/01-dummy-monitor.conf
Section "Device"
Identifier "Configured Video Device"
Driver "intel" #CHANGE THIS
Option "TearLess" "1"
EndSection
Section "Monitor"
Identifier "Configured Monitor"
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
EndSection
之后,以上回应运行良好,新的虚拟显示器可以在 Gnome 屏幕设置中进行管理。如果您有不同分辨率的 VNC 客户端设备,您可以按照说明使用 xrandr 添加它们,然后在 Gnome 屏幕设置中分配它们。