X11协议基础与实践
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协议基础与实践相关推荐
- 视频质量评价基础与实践
点击上方"LiveVideoStack"关注我们 ▲扫描图中二维码或点击阅读原文▲ 了解音视频技术大会更多信息 编者按:视频质量评价作为近些年学6领域比较热门的基础研究,已经逐渐 ...
- 亿级日PV的魅族云同步的核心协议与架构实践
声明:本文根据msup和魅族联合举办的<第三期魅族技术开放日-架构设计与优化>录音整理原创首发,转载或节选内容前需获授权. 嘉宾:沈辉煌,魅族高级架构师,魅族云同步负责人.2010年加入 ...
- FTP、HTTP断点续传和多线程的协议基础
使用FTP或HTTP协议的下载软件支持断点续传和多线程的协议基础是: FTP用的是REST和SIZE:HTTP用的是Range. 1.FTP实现断点续传的协议基础 REST(有的服务器可能不支持此命令 ...
- 《大数据系统基础》实践项目期末答辩顺利举行 校企联手打造精品实践项目见真章
近期,由清华大学研究生院和数据科学研究院(以下简称:数据院)共同开设的清华大学大数据能力提升项目<大数据系统基础>实践项目期末答辩在清华大学六号教学楼顺利举行.20位企业导师作为评审参与答 ...
- html5实践开发教程,HTML5基础与实践教程
HTML5基础与实践教程 语音 编辑 锁定 讨论 上传视频 <HTML5基础与实践教程>是2010年4月机械工业出版社出版的图书,作者是云翔,刘猛猛,欧阳植昊. 书 名 HTML5基 ...
- 网工协议基础(4)TCP/UDP协议
往期回顾 网工协议基础(1) OSI七层模型 网工协议基础(2) TCP/IP四层模型 网工协议基础(3) IP地址 欢迎关注微信公众号[厦门微思网络].www.xmws.cn专业IT认证培训19周年 ...
- 网工协议基础(3) IP地址
往期回顾 网工协议基础(1) OSI七层模型 网工协议基础(2) TCP/IP四层模型 欢迎关注微信公众号[厦门微思网络].www.xmws.cn专业IT认证培训19周年 主要课程:思科.华为.红帽. ...
- 网工协议基础(2) TCP/IP四层模型
知道一些基础的人都知道,上篇知识点讲过了:网工协议基础(1) OSI七层模型,里面提及OSI设计了个七层模型作参考. 欢迎关注微信公众号[厦门微思网络].www.xmws.cn专业IT认证培训19周年 ...
- web安全学习—Http协议基础
今天在安全龙网站上听老师讲了Http协议基础,有的东西不是一遍就可以记住的,就先记录一下,方便以后自己看(截图都是转载于安全龙网站). 1.超文本 包含有超链接(link)和各种多媒体元素标记(Mar ...
最新文章
- 内嵌IE网页窗口中消除IE默认脚本设置影响的方法
- 网络拓扑图一般用什么软件画_视频后期一般用什么软件
- 成功解决lib\subprocess.py, line 997, in _execute_child startupinfo) FileNotFoundError: [WinError 2]
- iphone投屏_iPhone投屏电视机/投影仪用这个方法很简单,媲美华为PC模式
- ubuntu解压zip文件乱码问题
- canvas绘制线条1像素的问题
- ERROR: Cannot uninstall ‘PyYAML‘. 安装 fvcore
- 计算机科学导论考试A卷试题,09级计算机科学导论A卷答案
- 如何计算出int的数据范围
- python中排序的函数_Python中sorted()排序函数
- cnn可视化 感受野(receptive field)可视化
- Python+OpenCV:尺度不变特征变换 (SIFT, Scale-Invariant Feature Transform)
- 在Linux中使用cURL进行HTTP POST和GET [复制]
- python打包后怎么安装_别再问我怎么Python打包成exe了!
- 前端开发中,如何优化图像?图像格式的区别?
- 分享一个前辈的NPOIhelper
- 举例说明指针的运算方法c语言,C语言中指针的使用方法
- 刷脸免单打折领红包带动消费者进店二次消费
- 【心理咨询师考试笔记】操作技能(三)——咨询基本技能
- 如何看待中国制造2025?
热门文章
- 华为荣耀8x鸿蒙系统,采用鸿蒙系统的荣耀智慧屏正式亮相
- http://localhost/打开错误原因之一,eclipse PHP Web Application没反应 解决方法
- buuctf刷题9 (反序列化逃逸shtml-SSI远程命令执行idna与utf-8编码漏洞)
- mysql_去首尾空白字符_trim_去掉换行_去掉空白
- 分布式文件存储——阿里云oss存储
- 数据结构:栈和队列(Stack Queue)【详解】
- CE自带教程使用指南完整版过程(超详细)
- 2023新版图文详解SpringBoot整合SSM框架(附源码)
- 电影中的很有哲理的一句话
- 佳能R6存在moov结构体碎片恢复方法