【问题标题】:Why doesn't a VNC server provide multiple screen capability?为什么 VNC 服务器不提供多屏功能?
【发布时间】:2020-02-14 18:26:42
【问题描述】:

我有一个 Java 应用程序,它可以利用 Linux X 服务器描述的多个物理监视器作为单独的屏幕或一个逻辑帧缓冲区(即 TwinView 或 Xinerama),但相同的硬件表示不可用在任何 VNC 服务器实现 AFAIK 中。我真的很想了解 VNC 或 RFB 中阻止逻辑屏幕被表示为具有多个显示器的物理 X 服务器的限制因素是什么。

可能我忽略了一些可以做到这一点的东西?

我知道,如果我正在编写 C/C++ 代码,我可以利用 Xlib API 并连接到多个 VNC 服务器实例,但我坚持 Java 的限制,即每个 JVM 只能连接到单个 X 服务器,如所述 @ 987654321@每缺乏响应。

我也知道我可以用多个显示器的帧缓冲区的宽度来实例化单个 VNC 服务器。这种方法需要代码更改相邻帧/窗口的位置,并且与在物理硬件上渲染不同。

如果您可以像下面这样启动 VNC 服务器,那将是理想的:

Xvnc :1 -geometry 1920x1080 -geometry 1920x1080

结果将是一个 3840x1080 的帧缓冲区,但当 Java 代码如下时会返回多个 GraphicsDevice:

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gd = ge.getScreenDevices();
for(int i = 0; i < gd.length; i++){
    System.out.println(gd[i]);
}

vncviewer 不需要关心逻辑屏幕,它只需要将扩展​​帧缓冲区表示为 3840x1080。

【问题讨论】:

  • 我确实发现带有 CentOS 8.0 的 TigerVNC 1.9.0 具有定义屏幕的功能,而 Java 似乎接受了配置。这是一个例子: Xvnc :1 -screen 0 1920x1080x24 -screen 1 1920x1080x24 +xinerama

标签: java x11 xlib vnc


【解决方案1】:

据我所知,这是协议的限制(我已经实现了低级客户端 - https://github.com/sidorares/node-rfb2)。一个 vnc 连接代表一个帧缓冲区矩形(可能随时间改变它的宽度/高度)。您可以在此基础上构建一些东西,服务器监听每个物理屏幕的单独端口,客户端建立 2 个连接

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 2020-06-23
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多