Solaris 11 XOpenDisplay返回NULL

时间:2013-04-09 09:24:54

标签: solaris system-calls xserver

在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,现在我收到的错误是“没有指定协议”。

1 个答案:

答案 0 :(得分:0)

您可以使用简单的X客户端打开连接,例如xclockxdpyinfo$DISPLAY设置为machine_name:0.0 - 直到您可以执行此操作,您有配置X设置中的错误,需要先修复它,然后才能找到代码是否正常工作。

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

顺便说一下,我们主要建议使用ssh -X来进行远程X连接,并负责设置DISPLAY环境变量,xauth cookie以及为您处理安全性,这样您就不必这样做了所有你自己。