DISPLAY和X Window System

一、X Window System

X Window System采用C/S结构,但和我们常见的C/S不同。常见的C/S结构中,称提供服务的一方为server,即服务器端(如HTTP服务,FTP服务等),使用服务的称为client,即客户端。但在X Window System中,client是执行程序的一方,在上面执行各种X程序,而server则是负责显示client运行程序的窗口的一方。
X Window System的组成可以分为X server,X client,X protocol三部分。X server主要控制输入输出,维护字体,颜色等相关资源。它接受输入设备的输入信息并传递给X client,X client将这些信息处理后所返回的信息,也由X server负责输出到输出设备(即我们所见的显示器)上。X server传递给X client的信息称为Event,主要是键盘鼠标输入和窗口状态的信息。X client传递给X server的信息则称为Request,主要是要求X server建立窗口,更改窗口大小位置或在窗口上绘图输出文字等。X client主要是完成应用程序计算处理的部分,并不接受用户的输入信息,输入信息都是输入给X server,然后由X server以Event的形式传递给X client(这里感觉类似Windows的消息机制,系统接收到用户的输入信息,然后以消息的形式传递给窗口,再由窗口的消息处理过程处理)。X client对收到的Event进行相应的处理后,如果需要输出到屏幕上或更改画面的外观等,则发出Request给X server,由X server负责显示。

常见的情况是X server与X client都在同一台电脑上运行,但他们也可分别位于网络上不同的电脑上。在X Window System中,X client是与硬件无关的,它并不关心你使用的是什么显卡什么显示器什么键盘鼠标,这些只与X server相关。[1]

小结:X Window System由X server X client和 X protocol三部分组成,与普通的C/S架构不同,服务器并不运行程序,只接收鼠标、键盘等输入信息并将其转发给X client,X client收到信息(event)后客户端经过对应的计算后(执行程序)计算出显示变化后发回给X server(Request),指导位于服务器的X server绘制显示。X server负责接收鼠标、键盘信息的好处在于可以在远程操作应用程序(Qt)并且显示程序。一个Qt程序调整大小是如何进行的?

  • X server接受鼠标的点击和拖动信息
  • X server发送event信息给X client
  • X client计算出拖动量、显示更新量回传 Request
  • X server收到Request重新绘制显示内容

二、SSH和X Window System

假如有一台电脑位于美国洛杉矶,有了X Window System架构,身在中国广东的我也可以操作位于美国的电脑对应的硬件资源。洛杉矶既有X Server也有X client,如果要在广东控制洛杉矶的电脑,那么我们必须要在广东建立一个X server用于接受坐在电脑前的我的鼠标、键盘信息。

X forwarding是X的一个功能,它可以让程序运行在一台主机上,而用户在另外一台机器上与之交互。其概念上与VNC和微软的远程桌面类似,而与这些软件不同,我们想要实现的是在Microsoft Windows平台运行特定的图形用户界面程序,而不是显示控制整个桌面。在X上下文中,客户端“client”是指运行程序的主机,而你坐在服务器“Server”前面,这点和常规的叫法不同。举例来说,你通过A远程打开B上面的程序,也就是说你在操作A,而你要远程控制B,那么B就是客户端,A是服务端。

SSH 的 X11 forwarding 特性可以使 X client 和 X server 安全地通讯。使用 X11 forwarding 后,从 X client 到 X Server 方向的数据先被送至 SSH server,SSH server 利用和 SSH client 的安全通道转发给 SSH client,再由 SSH client 转发给 X server,从 X server 到 X client 的数据流同理。这里 SSH server 和 SSH client 充当了 X client 和 X server 间数据的转发器,由于 SSH server 和 X client、SSH client 和 X server 一般在同一台机器上,它们之间是一种安全的进程间通讯,而 SSH server 和 SSH client 间的通讯也是安全的,所以 X client 和 X server 间的通讯就是安全的[2]

2.1 SSH设置
  • Server 端 (/etc/ssh/sshd_config)
    完成这一设置需要对服务端ssh和客户端ssh进行相关的设置,如果你的洛杉矶的电脑没有安装ssh服务端,请使用命令:
sudo apt-get install openssh-server

确认选项X11Forwarding设置为yes:
在这里插入图片描述

  • Client端(/etc/ssh/ssh_config)

在这里插入图片描述
部分选项的解释:

  • X11DisplayOffset
    指定 sshdX11 转发的第一个可用的显示区(display)数字。默认值是 10 。
    这个可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。

  • X11Forwarding
    是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。
    如果允许X11转发并且sshd代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。
    那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。
    需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。
    如果启用了 UseLogin ,那么X11转发将被自动禁止。

  • X11UseLocalhost
    sshd 是否应当将X11转发服务器绑定到本地loopback地址。默认值是"yes"。
    sshd 默认将转发服务器绑定到本地loopback地址并将 DISPLAY 环境变量的主机名部分设为"localhost"。
    这可以防止远程主机连接到 proxy display 。不过某些老旧的X11客户端不能在此配置下正常工作。
    为了兼容这些老旧的X11客户端,你可以设为"no"。

在广东的我们可以使用ssh -X user@hostname登陆并让接下来洛杉矶运行的程序的图形界面都显示在广东。

DISPLAY变量

DISPLAY变量在X Window system由下面三个基本部分:

  • 键盘
  • 鼠标
  • 屏幕

DISPLAY变量常被X11用来识别你的显示器及鼠标键盘。其值常常是:0,表示电脑的主屏幕。当我们使用带X选项登陆SSH,当前登陆的终端的DISPLAY的值将会是localhost:10:0之类数值,这个10称为偏移量。X应用根据这个数值,将图形输入输出发送到TCP端口127.0.0.1:6010,然后SSH将会发回你的原主机(也就是你终端所处的位置),这个过程被称为forward back

[1] https://www.cnblogs.com/super119/archive/2010/12/18/1910065.html
[2] https://blog.csdn.net/defeattroy/article/details/7466018
[3] localhost在/etc/hosts中有定义,其实就是127.0.0.1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Visual Assist Build 2107 支持vs2017 官方原版加破解补丁 requires software maintenance through 2016.07.15 (General release.) NEW Added new refactoring Move Implementation to Header File. (case=10239) 6999, 8255, 8286, 9006, 9830, 10741, 10905, 11311, 11976, 12293 NEW Sort Selected Lines now supports ascending and descending options, as well as case-sensitive and case-insensitive options. (case=29858) 8876, 9194, 12143 NEW Smart Select now supports more granular selection when starting to grow a selection (enabled by default; reg value named SmartSelectEnableGranularStart). (case=90797) 12544 NEW Smart Select supports sub-word selection (disabled by default and dependent upon reg value SmartSelectEnableWordStart; reg values named SmartSelectSplitWordByCase and SmartSelectSplitWordByUnderscore). (case=97531) NEW Support for disabling multithreaded parse during solution load (Performance page of VA Options dialog). (case=97903) NEW Find Symbol in Solution dialog now optionally supports display of file and directory in dedicated columns (via context menu). (case=35181) 12054, 12566 NEW Added support for filtering hashtag cross-references from VA Hashtags toolwindow (via context menu). (case=96785) NEW Added button to open File Explorer to VA File History directory (Performance page of VA Options dialog). (case=98234) 12686 NEW Option to disable spontaneous tooltips in Open File in Solution, Find Symbol in Solution and Goto Member dialogs (via context menu). (case=98240) NEW Enhanced Open Corresponding File (alt+o) to support directory structure of some additional libraries. (case=96426) [VS2010+] Fix for VA Navigate Back (alt+left arrow) failing to return to recorded column position. (case=97613) 12649 Fix for Smart Suggestion of vector of shared_ptr. (case=96425) 12604 Fixed Smart Suggestion namespace qualification of enum values in user-provided sample. (case=98073) 12661 Fix for failure to deduce auto rvalue ref type in range-based for loop. (case=96952) 12617 Sort Selected Lines honors system locale. (case=97868) Fix for Create Declaration being confused by a function try block. (case=93234) Fix for failure of Goto to work with variable defined using decltype expression. (case=93387) 12485 Various fixes for Smart Select selections. (case=94946, case=95812) Improved auto type deduction in range-based for loops. (case=86248) Improved Smart Suggestions of template variables in certain scenarios. (case=91733) Fixed case in which parentheses were not automatically matched when complete with any character was enabled and '(' was used to commit the listbox selection. (case=97044) Improved results of Goto and Goto Related on namespace usages that reference nested namespaces. (case=68241) Fix for snippets inserted with incorrect line endings in empty files. (case=97752) 12655 Fixed case in which VA incorrectly handled static_assert in a class definition. (case=97232) When Goto is invoked on an external type in XAML, VA prompts to open the Object Browser (instead of searching it without prompting). (case=96541) Find Symbol in Solution dialog lists symbols defined in source files imported via nuget packages. (case=97175) Fixed case in which VA Outline reported incorrect range of a #define in certain situations. (case=97224) Add Missing Case Statements now supports switches on properties. (case=96542) Fixed parsing of D2D interfaces and types that implement them. (case=97120) Fixed case in which symbols defined via system include directories might be recognized in one solution but not in another. (case=97154, case=97190) Fix for Move Implementation commands not properly selecting moved code in some cases. (case=96852) Fixed case in which include resolution of files in system include directories might not be properly resolved. (case=97154) Fixed case in which VA Snippet was processed with different end results when executed with in-editor placeholder expansion vs placeholder expansion via dialog. (case=96968) Disabled implementation of case=4568 due to unexplained lag while typing templates in a specific situation (can be re-enabled via edit of reg value ReparseIfNeededMaxFileSize2). (case=98305) [VS2015 Update 3] Enabled in-editor expansion of snippet input placeholders. (case=95894) [VS2015 Update 3] When changing the state of the automatically extend multi-line comments setting, VA prompts to make the opposite action with the IDE provided feature in C#. (case=95605) [VS2012+] Fixed positioning of Goto and Goto Related menus when invoked in XAML files. (case=98462) [VS2010+] Fixed tab order in Snippet Editor. (case=98606) [VC6] Fix for deadlock in some situations after using Add Class. (case=98643) 12701

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值