X-Window结构分析与应用

X-Window结构分析与应用X-Window结构分析与应用简介结构组件X-ClientX-ServerLinux下的X-ServerMacOS WindowsX-Window-ManagerX-Security基于IP验证基于预共享密钥验证协议NAT-sensitiveNAT敏感结合SSH隧道运行远端GUI应用应用案例本地MAC端运
摘要由CSDN通过智能技术生成

X-Window结构分析与应用

简介

*nix系统的图形交互使用的是x-window系统. 基于C/S架构,即可完全运行在本地,也可以让本端运行的GUI应用在远端上进行交互(在远端上显示GUI 和 接收远端上的键盘鼠标输入).

结构

struct

组件

X-Client

  • X-Client就是GUI应用程序(如:xclock,xterm,firefox,…)
  • Linux下GUI应用程序大多是通过库Xlib(libX11)与X-Server通信
  • X-Client自身不直接输出图形到屏幕或直接读取键盘输入,这些与外设的通信都由X-Server来处理

GUI应用程序通过加载Xlib,连接到X-Server建立通信通道,最终通过这通道将显示需求发送到X-Server上 或 从这通道上接收用户的键盘鼠标输入, 从而实现GUI交互

每个终端可以配置使用指定的X-Server, 由终端当前的环境变量’DISPLAY’指定.DISPLAY字符串的格式如下:

[host]:[displayer-id].[screen-id]

意思为: 哪个主机上的哪个显示器上的哪个屏幕

其中[host]和[screen-id]可省略.host省略意为本机,screen-id省略为默认的屏幕.如:

# 本终端环境使用本地ID为0的显示器的默认屏幕作为X-Server
export DISPLAY=:0
# 使用主机(10.0.66.238)上ID为1的显示器的ID为0的屏幕
export DISPLAY=10.0.66.238:1.0

X-Server

  • 顾名思义是X-Client们的服务端
  • 负责与输入输出设备通信
  • Linux上通常使用的实现为 Xorg
  • MacOS上可使用 XQuartz
  • Windows上可使用 Xmanager 或 Xming

负责将X-Client请求显示的图形显示到屏幕上 和 将键盘鼠标的输入事件发送到相应的X-Client上.

Linux下的X-Server
  1. 已安装桌面环境

以ubuntu17为例,若安装了桌面环境,即GNOME,则已经完全具备X-Server的服务能力(基于Xorg-server). 这完整的桌面环境不止X-Server,还包括一系列的X-Client应用程序(任务栏,文件夹管理器…)和X-Window-Manager等等.

但默认的情况下,该X-Server只提供给本地的X-Client使用,没开启TCP的对外服务渠道,只开启了基于unix-socket的进程间通信的服务渠道.

开启TCP方式则需要修改配置文件:/etc/gdm3/custom.conf

[security]
DisallowTCP=false

开放给远端使用时可能会遇到X-Auth验证失败 或 NAT环境下不可用的情况,在后面的小节进行说明

下图为GNOME桌面环境下, 终端默认使用了当前GNOME桌面所在的X-Server(Displayer1), 当执行X-Client(GUI应用xclock)时就把他显示在当前GNOME桌面里了

gnome_xclock

当然也可以手动再开启一个纯净的X-Server,如接下来这小节所示

  1. 未安装桌面环境,使用最纯净的X-Server(Xorg)

先确认已安装X-Server:

rock@ubuntu17:~$ sudo apt-get xorg

手动开启一个新的X-Server(Xorg为例):

## ':1'表示该X-Server标识为ID为2的Displayer
## Displayer1显示在tty5
## '-listen tcp'显式表示要使用tcp方式
## '-retro'表示背景为斜纹,不然默认为纯黑,不好判断启动成功与否
rock@ubuntu17:~$ sudo X :2 vt5 -listen tcp -retro

此时tty5终端已经成功启动了X-Server了,显示如下斜纹背景:

x_blank

ctrl+alt+F3 切换到其他未使用的终端:

rock@ubuntu17:~$ sudo lsof -nPi tcp|grep X
Xorg      3505            root    5u  IPv6  37157      0t0  TCP *:6002 (LISTEN)
Xorg      3505            root    6u  IPv4  37158      0t0  TCP *:6002 (LISTEN)

启动后可以发现tcp6002端口已启动监听. 其实X-Server的端口号是从6000开始一一对应Displayer-ID,如:t

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值