在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,现在我收到的错误是“没有指定协议”。
答案 0 :(得分:0)
您可以使用简单的X客户端打开连接,例如xclock
或xdpyinfo
且$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以及为您处理安全性,这样您就不必这样做了所有你自己。