让Qt VNC服务器正常工作

3

我编译并安装了适用于嵌入式Linux的Qt,并确保在./configure命令中使用了-qt-gfx-vnc选项。

我使用以下代码启动我的应用程序。

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

没有使用"-display", "VNC:0"选项时,应用程序将使用嵌入式设备的显示,但是使用这些选项会在端口5900上创建一个QVNCServer,不再发送任何内容到显示器。尝试使用Ubuntu的远程桌面查看器连接不起来。它只会给出一个黑屏和没有错误消息。
对于我的应用程序,我需要一个VNC服务器,可以在GUI渲染到嵌入式显示器同时保持活动状态。理想情况下,我还希望能够在我的应用程序中启用/禁用VNC服务器。我还需要能够进行一些用户身份验证。
在Qt中是否可能同时运行VNC服务器和标准的qws内容,还是必须找到另一种解决方案?
1个回答

8
“QVNCServer created on port 5900”表示您的Qt库已编译包含Qt VNC服务器。 QVNCServer不是完整的VNC服务器,而是Qt显示驱动程序,其中输出作为VNC服务器在网络接口上提供。 "VNC服务器"不是单独的进程,并且比完整的VNC服务器更简单,因为它一次只能处理1个VNC客户端,并且仅支持使用32bpp连接的VNC客户端。 在我使用的Qt版本(4.2.2)中存在一个错误,如果VNC客户端尝试使用深度=8连接,则会导致QVNCServer似乎挂起。这可能是连接到QVNC服务器的问题。 确保您的VNC客户端配置为32位/24位/全彩色/高彩色。 我修补了我的QtGui库源代码,以便如果VNC客户端没有深度=32,则立即断开连接。
以下是从命令行启动Qt应用程序的参数,但是与您在示例中展示的启动另一个程序相同。
要仅在VNC显示器上启动应用程序:
  appname -qws -display "VNC::"
  appname -qws -display "VNC::size=640x480:depth=32:0"
为了使应用程序在本地Linux framebuffer (/dev/fb0) (在我的情况下,本地显示驱动程序为“sm501”)和远程VNC客户端上同时显示相同的输出,请使用以下命令:
  appname -qws -display "Multi: sm501: VNC::"

尽管文档中并没有明确指出,但我必须在VNC中使用2个冒号。

在本地显示器和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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接