0

在 Solaris 11 上运行以下程序时遇到问题。XOpenDisplay 函数始终返回 NULL。相同的程序在 Solaris 10 上运行良好。

#include <stdio.h>
#include <X11/Xlib.h>

int main(int argc, char** argv) {
    Display *ptr = 0;


    ptr = XOpenDisplay("machine_name:0.0");

    if (0 == ptr)
    {
        printf("NULL received\n");
    }
    else
    {
        printf("Valid pointer received\n");
    }

    return 0;
}

在调查期间,我发现 Solaris 11 不接受使用 TCP 协议的直接 X11 连接。我使用以下命令为 X11 服务器启用了 TCP。

svccfg -s x11-server setprop options/tcp_listen=true

但是在调用函数 XOpenDisplay 期间仍然返回 NULL,现在我收到错误为“未指定协议”。

4

1 回答 1

0

您能否使用简单的 X 客户端(例如设置为xclockxdpyinfo设置$DISPLAY为)打开连接machine_name:0.0- 在您可以这样做之前,您的 X 设置中存在配置错误,需要先修复该错误,然后才能确定您的代码是否正常工作。

您是否已登录到 Solaris 11 机器上的 X 会话?它是存储 xauth cookie$HOME/.Xauthority还是使用新的 gdm 默认设置$XAUTHORITY为 /tmp 中对其他机器不可见的本地文件?如果是这样,您可能需要将该机器的 xauth cookie 复制到您设置指向$HOME/.Xauthority的远程系统上的文件或文件。$XAUTHORITY

顺便说一句,我们现在主要推荐使用ssh -X远程 X 连接,并为您设置 DISPLAY 环境变量、xauth cookie 和处理安全性,因此您不必自己做所有这些。

于 2013-04-10T14:57:43.470 回答