【问题标题】:Getting the Qt VNC Server to work让 Qt VNC 服务器工作
【发布时间】:2011-08-10 08:42:03
【问题描述】:

我编译并安装了Qt for Embedded 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,并且不会再显示任何内容。尝试使用 Ubuntu 的 Remove Desktop Viewer 连接不起作用。它只是黑屏,没有错误消息。

对于我的应用程序,我需要一个激活的 VNC 服务器,同时将 GUI 渲染到嵌入式显示器。理想情况下,我还希望能够从我的应用程序中启用/禁用 VNC 服务器。我还需要能够进行一些用户身份验证。

是否有可能使用 Qt 同时运行 VNC 服务器和标准 qws 东西,还是我必须找到其他解决方案?

【问题讨论】:

    标签: qt vnc vnc-server


    【解决方案1】:

    "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 客户端配置为 32bit/24bit/full-color/high-color。我修补了我的 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::"
    

    (我不得不在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-04
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      相关资源
      最近更新 更多