Как заставить работать сервер Qt VNC - PullRequest
3 голосов
/ 21 апреля 2011

Я скомпилировал и установил Qt для встраиваемых Linux и убедился, что в строке ./configure используется -qt-gfx-vnc.

Я запускаю приложение со следующим кодом.

int argc = 1;
char *argv[] = { "appname", "-display", "VNC:0" };
QApplication app(argc, argv, QApplication::GuiServer);

Без опций "-display", "VNC:0" приложение работает с использованием дисплея встроенного устройства, но с этими опциями на порте 5900 создается QVNCServer, и больше ничего не отображается. Попытка подключиться с помощью Remove Desktop Viewer в Ubuntu не работает. Выдает только черный экран и никаких сообщений об ошибках.

Для моего приложения мне нужен VNC-сервер, который активен, в то время как графический интерфейс отображается на встроенном дисплее одновременно. В идеале я также хотел бы иметь возможность включать / отключать VNC-сервер из моего приложения. Мне также нужно иметь возможность выполнить некоторую аутентификацию пользователя.

Возможно ли иметь сервер VNC и стандартные компоненты qws, работающие одновременно с использованием Qt, или мне нужно найти другое решение?

1 Ответ

6 голосов
/ 29 октября 2011

"QVNCServer created on port 5900" указывает, что ваши библиотеки Qt были скомпилированы для включения сервера Qt VNC.QVNCServer не является полноценным VNC-сервером, но является драйвером дисплея Qt, где выходные данные доступны как VNC-сервер на сетевом интерфейсе.«VNC-сервер» не является отдельным процессом и проще, чем полноценный VNC-сервер, поскольку он может одновременно обрабатывать только 1 VNC-клиента и поддерживает только VNC-клиенты, которые подключаются с глубиной 32 бита на канал.В версии Qt, которую я использую (4.2.2), есть ошибка, из-за которой QVNCServer зависает, если клиент VNC пытается подключиться с глубиной = 8 (что по умолчанию для многих клиентов VNC портативных устройств).Это может быть ваша проблема с подключением к серверу QVNC.Убедитесь, что ваш VNC-клиент настроен как 32-битный / 24-битный / полноцветный / полноцветный.Я пропатчил исходный код библиотеки QtGui, чтобы он немедленно отключился, если у клиента VNC нет глубины = 32.

Ниже приведены параметры для запуска приложения Qt из командной строки, но те же строки работают при запуске другой программой, как показано в вашем примере.

Чтобы запустить приложение только наДисплей VNC:

  appname -qws -display "VNC::"
  appname -qws -display "VNC::size=640x480:depth=32:0"

Чтобы запустить приложение для одновременного отображения одного и того же вывода в обоих локальных буферах кадров Linux (/ dev / fb0) (в моем случае это драйвер локального дисплея "sm501 ") и удаленный клиент VNC используют следующее:

  appname -qws -display "Multi: sm501: VNC::"

(мне пришлось использовать 2 двоеточия с VNC, хотя это не было очевидно из документации.)

Самый простой способ отобразить различное содержимое на локальном дисплее и клиенте VNC - это запустить отдельные процессы Linux, каждый из которых задает различное отображение.Вы можете поддерживать несколько клиентов VNC, запуская приложения с разными номерами портов VNC:

  appname1 -qws                    --renders to the local display
  appname2 -qws -display VNC::0   --renders to VNC port 5900
  appname3 -qws -display VNC::1   --renders to VNC port 5901
  appname4 -qws -display VNC::2   --renders to VNC port 5902
...