У меня есть одно Java-приложение, которое может использовать более одного физического монитора, описанного сервером Linux X как отдельные экраны или один буфер логических кадров (т. Е. TwinView или Xinerama), но такое же представление оборудования недоступнов любом VNC сервере реализация AFAIK. Я действительно хочу понять, что является ограничивающим фактором (факторами) в VNC или RFB, который препятствует представлению логических экранов как физического X-сервера с более чем одним дисплеем.
Возможно, я пропустил что-то там, чтоэто так?
Я понимаю, что если бы я писал код на C / C ++, я мог бы воспользоваться API-интерфейсом Xlib и подключиться к нескольким экземплярам VNC-сервера, но я застрял с ограничением Java на подключение только к одному Xсервер на JVM, как указано здесь за отсутствие ответа.
Я также понимаю, что мог бы создать экземпляр одного 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.