关于X-window+Xserver+libX11+libxcb的解释

  研究xwindow也很久了,过程断断续续,今天做个简单的概念梳理.关于xwindow,网上能搜到的都是些零零碎碎的知识.因为涉及的内容比较多,所以很少有人把它讲明白.

概念说明

  1. X-window,或者叫X,它的本名.linux本质上一个命令式系统,与windows系统不同,linux原生是不带有图形界面的.大多数时候,都是作为服务器系统使用.为了满足图形化桌面系统的需求,在linux系统中引入了xwindow软件.关于xwindow的历史这里就不做说明了.xwindow是一个C/S架构的软件系统,即包含服务端和客户端.我们用的图形化软件其实都只是xwindow的客户端.
  2. xserver,xwindow的服务端软件,这是个一般叫法.在我们实际的linux系统中,其实就是一个叫Xorg的程序(位于/usr/lib/Xorg).其启动时机是在linux自启动服务之后.linux用户态进程启动过程:init/systemd->service->xorg->图形化程序.Xorg官方文档:https://www.x.org/wiki/guide/concepts/
  3. xclient,这里还是说明一下.xwindow的客户端其实就是linux上各种图形化的程序,有基于gtk2/3的,Qt的,或者其他图形化接口的.图形化程序一般不直接跟xserver对接,而是调用gtk或者Qt这样的图形库.有的库有自己的ui设计风格,有的可能支持用户定制ui.
  4. libX11,xwindow的协议封装库,用于给客户端调用.像Qt等就是直接调用它,再结合自家的设计,画出各种各样的GUI图形化组件的.官方文档:https://www.x.org/releases/current/doc/libX11/libX11/libX11.html
  5. libxcb,libX11下层紧相连的库,也是抽象出来的一层.包含libxau(用于xwindow客户端与服务端的身份权限验证),xcb-proto(基于xcb协议的接口与实现),libxdmcp(xwindow display manager control proto显示管理协议)三个模块.
  6. gdm,kdm,lightdm,openbox之类,是各个linux发行版带有的窗口管理器及用户登录入口(让你输入用户名密码).我个人用的是gnome,及gdm管理器(开启gnome-session桌面环境).其上层为了进一步美化并使图形化构建统一,使用了gnome-shell.

  梳理完以上的概念后,我就不再使用xwindow这个名字了.我们研究的核心,或者说重点,应该是Xorg这个server服务.从本质上来讲,Xorg就是个服务端软件.在系统层次来讲,Xorg不属于linux内核,且只是个用户态程序.所以它的行为和权限也只限于用户态,与大多数用户态进程一样.最多!访问一下/dev路径下的设备文件,实际也正是如此!Xorg本身并不能直接操作硬件在屏幕上绘制图像.真正在屏幕上绘制图像的任务由内核态完成.这里说"绘制图像"可能有些不恰当,我指的是"直接操作"的意思.如果你研究过现代图形化系统实现原理的话,应该懂我的意思.在linux内核模块中,提供了DRM驱动接口,将显示(显卡/显存+屏幕)映射为/dev/fb0(低等级)和/dev/dri/card0等设备文件,以此给用户态提供了绘制图形到显示屏的能力.

  画个丑陋的框图解释下:

不一样的应用/玩法

  既然Xorg是个服务,那么自然可以有同一网段中其他的客户端连接它的用法.正常启动时的服务命令如下:

/usr/lib/Xorg vt2 -displayfd 3 -auth /run/user/0/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -novtswitch -verbose 3

  默认禁用tcp访问,修改配置xserver-allow-tcp=true.命令行参数的话,自行--help了解一下.然后配置下运行访问的ip地址.

xhost + xxx.xxx.xxx.xxx

  在另外一台电脑中,执行:

export DISPLAY=yyy.yyy.yyy.yyy # xwindow所在系统的ip
xterm & # 运行一个窗口管理器
gedit # 图形化程序

  这样,就实现了在命令行系统上运行了图形化程序,而界面显示在远程的xwindow电脑上.

  关于xwindow,暂时就介绍这么多,支持的话给个赞吧~

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值