我有一个Java应用程序,可以利用Linux X服务器描述为单独屏幕或一个逻辑帧缓冲区(即TwinView或Xinerama)的多个物理监视器,但是在硬件中没有相同的表示形式。任何VNC服务器实施AFAIK。我真的很想了解VNC或RFB中有哪些限制因素阻止逻辑屏幕像具有多个显示器的物理X服务器那样被表示。
可能我忽略了执行此操作的某些内容?
我知道,如果我正在编写C / C ++代码,我可以利用Xlib API并连接到多个VNC服务器实例,但是我一直受Java的限制,即每个JVM仅连接到一个X服务器,如所述[C0 ],如果没有回应。
我也知道我可以实例化具有多个显示器的帧缓冲区宽度的单个VNC服务器。这种方法要求代码更改相邻框架/窗口的位置,并且与物理硬件上的渲染有所不同。
理想的情况是,您可以像下面那样启动VNC服务器:
Xvnc:1 -geometry 1920x1080 -geometry 1920x1080
结果将是一个3840x1080的帧缓冲区,但是当下面的Java代码返回的结果不止一个GraphicsDevice时:
here
vncviewer不需要关心逻辑屏幕,只需要将扩展帧缓冲区表示为3840x1080。
据我所知,这是该协议的限制(我已经实现了低级客户端-GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gd = ge.getScreenDevices();
for(int i = 0; i < gd.length; i++){
System.out.println(gd[i]);
}
)。一个vnc连接代表一个帧缓冲区矩形(可能随时间更改其宽度/高度)。您可以在此之上构建一些内容,其中服务器在每个物理屏幕的单独端口上侦听,而客户端建立2个连接]