VNC服务器为什么不提供多屏幕功能?

时间:2019-10-17 19:10:37

标签: java x11 xlib vnc

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

可能我忽略了一些这样做的东西吗?

我了解,如果我正在编写C / C ++代码,则可以利用Xlib API并连接到多个VNC服务器实例,但是我坚持Java的限制,即每个JVM仅连接到单个X服务器,如{ {3}}每次都没有回应。

我还了解到我可以实例化具有多个显示器的帧缓冲区宽度的单个VNC服务器。这种方法要求代码更改相邻框架/窗口的位置,并且与物理硬件上的渲染有所不同。

理想的情况是,如果您可以启动VNC服务器,如下所示:

Xvnc:1-几何1920x1080-几何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。

1 个答案:

答案 0 :(得分:0)

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