X11协议基础与实践

概念

X11(X Window System)是一种位图显示的视窗系统,X表示X协议,11是协议版本号。X 协议主要由 X server 和 X client 组成:

l X server 管理主机上与显示相关的硬件设置(如显卡、硬盘、鼠标等),它负责屏幕画面的绘制与显示,以及将输入设置(如键盘、鼠标)的动作告知 X client。

l X client (即 X 应用程序) 则主要负责事件的处理(即程序的逻辑)。

举个例子,如果用户点击了鼠标左键,因为鼠标归 X server 管理,于是 X server 就捕捉到了鼠标点击这个动作,然后它将这个动作告诉 X client,因为 X client 负责程序逻辑,于是 X client 就根据程序预先设定的逻辑(例如画一个圆),告诉 X server说:“请在鼠标点击的位置,画一个圆”。最后,X server 就响应 X client 的请求,在鼠标点击的位置,绘制并显示出一个圆。

由上可见,X Window系统的协议和架构 X基于客户端——服务器 模型。一个X服务器与多个客户端程序通讯。服务器接受对于图形输出(窗口)请求并反馈用户输入(键盘、鼠标、触摸屏)。服务器可能是一个能显示到其他显示系统的应用程序,也可能是控制某个PC的视频输出的系统程序,还可能是特殊硬件。

术语客户端-服务器——你的终端是"服务器",而应用程序是 “客户端”——这一概念经常困扰X的新用户,因为看起来似乎正好相反。但X采纳了应用程序而非最终用户或者硬件的视角:本地的X显示程序提供显示服务,所以它扮演了服务器;远端应用程序使用了该服务,所以它是客户端。

实践

以下实践主要基于公司当前使用的Xvnc作为Xserver,xclock作为Xclient。

要实现的效果为在A机器的Xserver上绘制B机器的Xclient,因为Xserver选择的是Xvnc,所以可以通过novnc或者vncviewer访问Xserver来共享画面。

基础实现

1.首先准备两台机器,A,B。在A上安装Xvnc,B上安装Xclock。使用Xshell分别访问A与B,当开启了Xshell的X11转发时,在B上直接输入Xclock命令可以在本地打开一个时钟。如下图:

但是我们的目标不是在本地打开时钟,所以需要关闭Xshell的X11转发功能关键)。关闭转发后再次尝试xclock命令出现错误便可以了。

2.在A机器上开启Xserver,命令如下

Xvnc :1 -rfbport 4001 -SecurityTypes None -geometry 2560*936 -depth 16 &

命令中 “:1” 为指定要开启的display窗口序号为1;

“-rfbport 4001” 为指定vnc访问的端口为4001(此处端口通常为4000+窗口序号,防止端口占用冲突),后续使用novnc或vncviewer访问时需要用到;

"–SecurityTypes None"设置vnc认证类型为不认证。

“-geometry 2560*936” 设置Xserver的分辨率,到时候novnc访问时分辨率就是此时设置的值。

"-depth 16"设置位深度。

“&” 为后台运行。

3.在A机器上设置DISPLAY临时变量为之前指定的窗口序号

export DISPLAY=localhost:1.0

4.在A机器上设置Xserver 访问权限,允许B机器进行访问

xhost + {B.ip}

5.在A机器上设置防火墙(可以直接关闭防火墙),开启6001端口(要开启的端口号为6000+display窗口序号)

6.在B机器上设置DISPLAY参数

export DISPLAY={A.ip}:1.0

7.在B机器上启动xclient(此处为xclock)

xclock

8.使用novnc或者vncviewer进行验证,访问A机器的4001端口。


​ (novnc访问)

隧道转发方式实现

公司中的xfwd协议就是基于隧道转发方式进行实现,其本质就是利用ssh的隧道进行X11转发,将linux上的图像信息转发绘制到Xvnc上,后续再通过vncviewer进行访问,显示图像。

1.基本同基础实现中的步骤1,在此之外需要确认B机器的SSH Server配置文件/etc/ssh/sshd_config中,有以下配置

X11Forwarding yes

若没有需增加此配置,并重启sshd服务

2,3步同基础实现。

4.通过SSH命令访问B机器并启动xclock

ssh -X root@{B.ip} /bin/xclock

5.使用vncviewer或者novnc进行验证。

关于X11的一些tip

lock

tmp目录下有.X1-lock目录,其下有各个文件 X0~Xn 标志着已经启动的Xserver。有时候启动Xserver会提示display已经被占用,但是又查不到对应进程时,就可以去/tmp目录下把对应的.Xn-lock文件删除后再启动即可。

DISPLAY

在Linux/Unix类操作系统上, DISPLAY用来设置将图形显示到何处。格式为host:NumA.NumB ,host指Xserver所在的主机名或者ip地址.如果host为空, 则表示Xserver运行于本机, 并且图形程序(Xclient)使用unix socket方式连接到Xserver, 此时NumA和NumB表示连接的unix socket的路径, 如果NumA为0, 则表示连接到/tmp/.X11-unix/X0 .NumB则几乎总是0.

如果host为主机名或者IP地址,则图形程序使用TCP方式连接,此时,NumA为连接的端口减去6000的值, 例如:NumA为0, 则表示连接到6000端口;

X11 forwording

当使用X11 forwording进行图像映射时,在client端(目标机器,即ssh连接的机器)会根据sshd_config中的配置X11DisplayOffset启动对应端口进行转发,配置默认值是10.即启动6010端口进行转发。有时候这会和Xserver启动的端口冲突,导致Xserver无法启动,这时就可以通过修改这个配置来避免冲突。

X11协议基础与实践相关推荐

  1. 视频质量评价基础与实践

     点击上方"LiveVideoStack"关注我们 ▲扫描图中二维码或点击阅读原文▲ 了解音视频技术大会更多信息 编者按:视频质量评价作为近些年学6领域比较热门的基础研究,已经逐渐 ...

  2. 亿级日PV的魅族云同步的核心协议与架构实践

    声明:本文根据msup和魅族联合举办的<第三期魅族技术开放日-架构设计与优化>录音整理原创首发,转载或节选内容前需获授权.  嘉宾:沈辉煌,魅族高级架构师,魅族云同步负责人.2010年加入 ...

  3. FTP、HTTP断点续传和多线程的协议基础

    使用FTP或HTTP协议的下载软件支持断点续传和多线程的协议基础是: FTP用的是REST和SIZE:HTTP用的是Range. 1.FTP实现断点续传的协议基础 REST(有的服务器可能不支持此命令 ...

  4. 《大数据系统基础》实践项目期末答辩顺利举行 校企联手打造精品实践项目见真章

    近期,由清华大学研究生院和数据科学研究院(以下简称:数据院)共同开设的清华大学大数据能力提升项目<大数据系统基础>实践项目期末答辩在清华大学六号教学楼顺利举行.20位企业导师作为评审参与答 ...

  5. html5实践开发教程,HTML5基础与实践教程

    HTML5基础与实践教程 语音 编辑 锁定 讨论 上传视频 <HTML5基础与实践教程>是2010年4月机械工业出版社出版的图书,作者是云翔,刘猛猛,欧阳植昊. 书    名 HTML5基 ...

  6. 网工协议基础(4)TCP/UDP协议

    往期回顾 网工协议基础(1) OSI七层模型 网工协议基础(2) TCP/IP四层模型 网工协议基础(3) IP地址 欢迎关注微信公众号[厦门微思网络].www.xmws.cn专业IT认证培训19周年 ...

  7. 网工协议基础(3) IP地址

    往期回顾 网工协议基础(1) OSI七层模型 网工协议基础(2) TCP/IP四层模型 欢迎关注微信公众号[厦门微思网络].www.xmws.cn专业IT认证培训19周年 主要课程:思科.华为.红帽. ...

  8. 网工协议基础(2) TCP/IP四层模型

    知道一些基础的人都知道,上篇知识点讲过了:网工协议基础(1) OSI七层模型,里面提及OSI设计了个七层模型作参考. 欢迎关注微信公众号[厦门微思网络].www.xmws.cn专业IT认证培训19周年 ...

  9. web安全学习—Http协议基础

    今天在安全龙网站上听老师讲了Http协议基础,有的东西不是一遍就可以记住的,就先记录一下,方便以后自己看(截图都是转载于安全龙网站). 1.超文本 包含有超链接(link)和各种多媒体元素标记(Mar ...

最新文章

  1. 内嵌IE网页窗口中消除IE默认脚本设置影响的方法
  2. 网络拓扑图一般用什么软件画_视频后期一般用什么软件
  3. 成功解决lib\subprocess.py, line 997, in _execute_child startupinfo) FileNotFoundError: [WinError 2]
  4. iphone投屏_iPhone投屏电视机/投影仪用这个方法很简单,媲美华为PC模式
  5. ubuntu解压zip文件乱码问题
  6. canvas绘制线条1像素的问题
  7. ERROR: Cannot uninstall ‘PyYAML‘. 安装 fvcore
  8. 计算机科学导论考试A卷试题,09级计算机科学导论A卷答案
  9. 如何计算出int的数据范围
  10. python中排序的函数_Python中sorted()排序函数
  11. cnn可视化 感受野(receptive field)可视化
  12. Python+OpenCV:尺度不变特征变换 (SIFT, Scale-Invariant Feature Transform)
  13. 在Linux中使用cURL进行HTTP POST和GET [复制]
  14. python打包后怎么安装_别再问我怎么Python打包成exe了!
  15. 前端开发中,如何优化图像?图像格式的区别?
  16. 分享一个前辈的NPOIhelper
  17. 举例说明指针的运算方法c语言,C语言中指针的使用方法
  18. 刷脸免单打折领红包带动消费者进店二次消费
  19. 【心理咨询师考试笔记】操作技能(三)——咨询基本技能
  20. 如何看待中国制造2025?

热门文章

  1. 华为荣耀8x鸿蒙系统,采用鸿蒙系统的荣耀智慧屏正式亮相
  2. http://localhost/打开错误原因之一,eclipse PHP Web Application没反应 解决方法
  3. buuctf刷题9 (反序列化逃逸shtml-SSI远程命令执行idna与utf-8编码漏洞)
  4. mysql_去首尾空白字符_trim_去掉换行_去掉空白
  5. 分布式文件存储——阿里云oss存储
  6. 数据结构:栈和队列(Stack Queue)【详解】
  7. CE自带教程使用指南完整版过程(超详细)
  8. 2023新版图文详解SpringBoot整合SSM框架(附源码)
  9. 电影中的很有哲理的一句话
  10. 佳能R6存在moov结构体碎片恢复方法