2011-04-21 341 views
3

我编译并安装了Qt for Embedded Linux并确保在./configure行中使用-qt-gfx-vnc使Qt VNC服务器正常工作

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

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

没有"-display", "VNC:0"选择应用程序的工作使用的嵌入式设备的显示但这些选项的QVNCServer在端口5900建立并没有进入到显示了。尝试使用Ubuntu的连接删除桌面查看器不起作用。它只给出一个黑屏,并没有错误信息。

对于我的应用程序,我需要一个在GUI同时呈现给嵌入式显示器时处于活动状态的VNC服务器。理想情况下,我也希望能够在我的应用程序中启用/禁用VNC服务器。我也需要能够做一些用户验证。

是否有可能有一个VNC服务器和标准qws的东西在同一时间运行使用Qt或我必须找到另一种解决方案?

回答

6

"QVNCServer created on port 5900"表示您的Qt库已编译为包含Qt VNC服务器。 QVNCServer不是一个完整的VNC服务器,而是一个Qt显示驱动程序,其输出在网络接口上作为VNC服务器提供。 “VNC服务器”不是一个单独的过程,并且比完整的VNC服务器简单,因为它一次只能处理1个VNC客户端,并且只支持连接深度为32bpp的VNC客户端。在我使用的Qt版本(4.2.2)中存在一个错误,如果VNC客户端尝试连接depth = 8(这是许多便携式设备VNC客户端的默认设置),则会导致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::" 

(我不得不使用2个冒号与VNC虽然这不是从文档显而易见的。)

显示本地显示器和VNC客户端上不同内容的最简单的方法是推出独立的Linux进程,每个指定不同的显示。

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 
:您可以通过启动不同的VNC端口号的应用程序支持多个VNC客户端