2013-04-09 81 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