PC终端执行开发板上的图形界面程序时出错:Gtk-WARNING **: cannot open display:

场景

root@NanoPi2:/home/fa/Documents/opencv-demo# ./demo 

(edges:1685): Gtk-WARNING **: cannot open display: 

按照网上说明添加display如下:

root@NanoPi2:/home/fa/Documents/opencv-demo# export DISPLAY=:0.0
root@NanoPi2:/home/fa/Documents/opencv-demo# ./demo 
No protocol specified

(edges:1671): Gtk-WARNING **: cannot open display: :0.0

xhost + 之类的也没用。后来参考此篇说法明白了原因:

因为Xserver默认情况下不允许别的用户的图形程序的图形显示在当前屏幕上. 如果需要别的用户的图形显示在当前屏幕上, 则应以当前登陆的用户, 也就是切换身份前的用户执行如下命令。

因此,我直接切换到当前图形界面的用户下,执行程序是OK的,

root@NanoPi2:/home/fa/Documents/opencv-demo# su fa
root@NanoPi2:/home/fa/Documents/opencv-demo# ./demo
ok starting demo

按上述说法,在此账户下输入如下命令:

fa@NanoPi2:~/Documents/opencv-demo$ xhost +
access control disabled, clients can connect from any host
fa@NanoPi2:~/Documents/opencv-demo$ su root
Password: 
root@NanoPi2:/home/fa/Documents/opencv-demo# ./demo 
ok starting demo

在转回root用户下也可执行了。试了下如下:

root@NanoPi2:/home/fa/Documents/opencv-demo# su fa
fa@NanoPi2:~/Documents/opencv-demo$ xhost -
access control enabled, only authorized clients can connect

综上所述:在当前图形界面的账户里如果你使能了access control功能,那么只有允许了的用户才能启动GUI程序显示到当前的屏幕,否则由于无法显示而启动失败。

总结

参考文章:Linux在远程X Server上显示图形界面

一、远程的X Server

X Window System由客户端和服务端组成,服务端X Server负责图形显示,而客户端库**X
Client**根据系统设置的DISPLAY环境变量,将图形显示请求发送给相应的X Server。
X Server是Gnome等桌面环境的基础,一个桌面环境通常包含了XDM(X Display Manager,通常的图形化用户登录界面就属于XDM)、窗口管理器(X Server显示的图形是没有“窗口”边框的,通过替换窗口管理器可以实现不同的视觉效果,比如实现3D效果的Compiz)等组件。

进行图形显示并不需要桌面环境,只要有X Server即可。

依上述说明:

  1. 首先要在远程要显示图形的机子(简称图形机)上打开X erver服务。两种方法启动:startx和xinit,命令参数一样的

    startx [ [ client ] options ... ] [ -- [ server ] [ display ] options ... ]
    eg: xinit /usr/bin/xterm -- :1 &

    选项分为两个部分,以符号 “–”为界,前面是客户端选项,后面是X Server选项。客户端程序必须是绝对路径(/usr/bin/xterm),如果一个客户端也没有,X sever就会自行退出,所以开机时默认会启动一个客户端。服务端默认X :0
    display:用于设置客户端远程连接该图形服务器的DISPLAY名称
    启动完成后查看进程可看到

    /usr/bin/Xorg :0 -nr -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-Ikd3i7/database -nolisten tcp vt1
  2. 授权远程机访问X server

    xhost [[+-]name ...]

    直接xhost + 允许所有访问,xhost -禁止所有访问,xhost可以查询当前访问列表信息

  3. 在客户端配置显示机
    指定在哪个图形机上显示通用环境变量DISPLAY指定,格式如下:

    export DISPLAY = [Address]:{NumA}.{NumB}

    其中Address为X Server地址,如果Address为空,则通过域套接字连接到本地的X Server。

    NumA为display number,这与传递给xinit的display选项对应,这个display number为X Server的监听端口号送去6000。因此,实际上此时B机器上的X Server在监听6001端口,可以使用netstat命令验证。

    NumB为screen number(可能是多显示器的情况下指定显示在哪个显示器,未验证),通常情况下都为0.

二、 SSH隧道转发

图形机上的SSH服务开启了X11转发功能。
配置文件/etc/ssh/sshd_configX11Forwarding yes

在ssh远程登录时加上-X选项如下:

ssh -X 192.168.9.135

启动一个图形程序测试下。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值