Почему сервер VNC не поддерживает несколько экранов? - PullRequest
0 голосов
/ 17 октября 2019

У меня есть одно 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.

1 Ответ

0 голосов
/ 18 октября 2019

Насколько я знаю, это ограничение протокола (я реализовал низкоуровневый клиент - https://github.com/sidorares/node-rfb2). Одно соединение vnc представляет один прямоугольник кадрового буфера (возможно, изменяя его ширину / высоту с течением времени). Вы можете построить что-то наВ довершение всего этого, когда сервер прослушивает отдельный порт для каждого физического экрана, а клиент устанавливает 2 соединения

...