2013-04-09 37 views
0

在Solaris 11上运行以下程序时出现问题.XOpenDisplay函数始终返回NULL。同样的程序运行在精细Solaris 10中Solaris 11 XOpenDisplay返回NULL

#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协议的Direct X11连接。 我使用以下命令启用了TCP for X11-server。

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

但在调用函数XOpenDisplay仍然返回NULL,现在我得到的错误为“无协议指定”。

回答

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以及为您处理安全性,因此您不必亲自操作。

+0

:我直接登录到Solaris 11的X会话中。我的应用程序运行在同一主机上,并使用主机名:0.0打开与同一主机的连接。如果我给出命令ssh -X username @ host_name,那么应用程序将正常运行并且能够打开与X服务器的连接。但每次我打开新的终端时,我都必须发出这个命令。我应该如何使用.Xauthority配置身份验证?你有任何oracle链接分享? – Sumeet 2013-04-11 12:24:24