Ben*_*rds 8 linux vnc multiple-monitors
我在办公室使用 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 进入这样设置的会话,
我想一定有我遗漏的东西。配置xrandr似乎是关键,但我似乎无法弄清楚调用 VNC 服务器时的先决步骤。
还要注意:
我错过了什么?或者我想做的事情甚至可能吗?
编辑:(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*
Run Code Online (Sandbox Code Playgroud)
从 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
Run Code Online (Sandbox Code Playgroud)
如果我尝试向未命名的输出添加模式,它将显示:
> xrandr --addmode VIRTUAL2 1920x1200_60.00
xrandr: cannot find output "VIRTUAL2"
Run Code Online (Sandbox Code Playgroud)
我可以为输出使用任何名称(我已经尝试了几个),而这个错误就是我看到的全部。
Mar*_*iae 11
这里的技巧是在服务器上生成一个虚拟监视器,将它与真实监视器相关联放置在您想要的任何位置,然后指示VNC使用您想要使用的总监视器(真实 + 虚拟)的那部分. 所有这些都在有用的 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
Run Code Online (Sandbox Code Playgroud)
允许您找到所需的模式行:假设虚拟显示器大小为 1920x1080,刷新率为 60Hz,您可以根据需要进行调整。
现在您可以通过以下方式生成新的模式行
xrandr --newmode "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
Run Code Online (Sandbox Code Playgroud)您现在可以通过以下方式生成VIRTUAL1监视器:
xrandr --addmode VIRTUAL1 1920x1080_60.00
Run Code Online (Sandbox Code Playgroud)现在您可以将虚拟监视器放置在现有监视器的左侧(HDMI1,在我的情况下,更改它以使其最适合您):
xrandr --output VIRTUAL1 --mode 1920x1080_60.00 --left-of HDMI1
Run Code Online (Sandbox Code Playgroud)最后,您可以决定通过以下方式仅查看显示器的虚拟部分(例如)
x11vnc -clip 1920x1080+0+0
x11vnc -clip xinerama1
Run Code Online (Sandbox Code Playgroud)
(以适合您的为准)。如果要查看整个监视器空间(虚拟+真实),只需省略上面的内容。
当您希望启动vnc会话时,上面引用的原始帖子建议在远程计算机上传递以下两个参数:
vncviewer -encodings "tight copyrect"
Run Code Online (Sandbox Code Playgroud)
我从来没有觉得这是必要的,但自 YMMV 起我会把它传递给你。
PS:您对X11应如何处理两个不同显示器的存在的描述令人困惑。什么X11不容易,没有任何需要我们干预的,是建立一个单一的工作空间(称为屏幕)从现有的显示器,以这样一种方式,窗口可以拖动从一个显示器到另一个,和鼠标不流整个监视器空间(屏幕)上的障碍。此外,最大化窗口只会填充它们所在的监视器,而不是屏幕。这就是我假设您想要的,并且无需任何额外工作即可实现上述目标。其他任何事情都需要工作(如果可以完成的话)。