位置: 编程技术 - 正文

Linux折腾记(三):X Window的奥秘(linux ii)

编辑:rootadmin

推荐整理分享Linux折腾记(三):X Window的奥秘(linux ii),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux san,linux $3,linux iv,linux $3,linux $3,linuxu,linux san,linux san,内容如对您有帮助,希望把文章链接给更多的朋友!

  大名鼎鼎的X Window大家肯定不陌生。都知道它是Unix/Linux下面的窗口系统,也都知道它基于Server/Clinet架构。在网上随便搜一搜,也可以找到不少X Window的介绍。有不少文章为了给用户留一个直观的印象,往往先让系统进入纯文本界面,然后使用startx来启动图形界面,或者直接使用X来启动X Server,再然后运行一个xterm来做示范。我觉得以上这些文章对X Window的理解有限,不够深入,而且也不够新。所以,我这里写一篇《X Window的奥秘》,以最新的Ubuntu-. Desktop为例,展示如何学习X Window。

  先说一点题外话。在上一篇《打造属于自己的Vim》发表后,评论中有人让共享一下配置文件。当时我说:配置文件又不长,自己照着图片敲一下代码嘛。结果这个“照着图片敲代码”的事情我今天自己干了一遍,好在没花多少时间,几分钟而已。原因是因为我今天折腾X Window的时候,把系统给挂掉了,然后重装系统,然后,就只好再设置一遍Vim了。

了解自己机器上的X Window

  X Window其实是一种规范,它有很多不同的实现,在Linux系统下最流行的是实现Xorg和XFree,微软Windows系统下也有X Window的实现,苹果的Mac也是X Window的一种。要了解自己机器上运行的X Window究竟是哪一个,可以使用查看进程的ps命令,如下图:

  从上图可以看出,Ubuntu .使用的X Window是Xorg。如果使用ps -ef命令,还可以看到Xorg运行时的命令行参数。

  想了解X Window,下面这些文档需要看一遍先:

  下面来说一下也许是众所周知的基础知识:X Window是一个分层的架构,它分为Serve和Client。X Server负责图形界面的显示,(也负责用户的输入),而Client程序需要连接到X Server,然后请求X Server绘制图形界面,同时从X Server接受用户的输入。在桌面系统上,X Server和Client程序往往安装在同一台机器上,日常使用基本感觉不到它是分层的。但是很显然,X Server和Client也可以分别运行在不同的机器上,在一台机器上运行程序,而在另外一台机器上显示图形界面。

  X Window中的Server和Client的概念和我们平时接触到的“Server/Client”概念刚好相反。很多熟悉Internet原理的人,第一次接触X Window的这两个概念都会搞错。比如,我在一台本地机器上运行Ubuntu .桌面版,而在另外一台远程机器上运行CentOS 5.(纯字符界面),当我用ssh从Ubuntu连接到CentOS的时候,Ubuntu是Client,而CentOS是Server。在X Window中,Server偏偏是我面前的这台Ubuntu,X Server运行在Ubuntu上。我可以在CentOS中运行GVim,但是窗口显示在Ubuntu中,这时,GVim是一个Client程序,它在远程机器上运行,而它的窗口显示在本地。

理解display和虚拟控制台

  前面提到网上很多介绍X Window的文章都是先让系统进入字符界面,然后手动启动一个X Server。其实这完全没有必要,因为在同一台机器上完全可以运行多个X Server,只需要让每个X Server的display不同即可。那么display究竟是什么?

  在X Window中,可以通过hostname:display_number.screen_number来指定一个屏幕。可以这样理解:一台计算机可以有多个display,一个display可以有多个屏幕。所以,display相当于是计算机配备的一套输入输出设备,一般情况下,一台电脑只配一套键盘鼠标和一个显示器,特殊情况下,可以配多个显示器。

  现在问题出来了,我的电脑只有一套键盘鼠标和一个显示器,也就是只有一个display,那又怎么能运行多个X Server呢?那是因为在Linux中,还有虚拟控制台这样的高级特性。只需要同时按下Ctrl+Alt+F1、Ctrl+Alt+F2、...、Ctrl+Alt+F7,就可以在不同的虚拟控制台中进行切换。在Ubuntu .中,虚拟控制台1到6运行的getty,也就是字符界面,虚拟控制台7运行的是Xorg。(Fedora中不一样,虚拟控制台1运行的是图形界面,其它的是字符界面。)

  我们可以直接运行X Server程序来启动X Server。/usr/bin/X和Xorg都是X Server程序。其实/usr/bin/X是Xorg的符号链接,用哪一个都是一样的。

  启动X Server的时候可以指定display参数,因为可以省略掉hostname和screen_number,所以可以用:0,:1这样的格式来指定display。在我的机器上,本来就有一个X Server在运行,display :0已经被占用了,所以我使用sudo X :1 -retro来在display :1上再运行一个X Server,如下图:

  其中的-retro参数是为了让X Server的背景显示为斜纹,否则背景为纯黑色,那就看不出来是否启动了X Server。启动X Server后的效果如下图:

  按Ctrl+Alt+F7回到display :0,再用ps命令看一下,会发现系统中有两个Xorg在运行,一个运行在虚拟控制台7,一个运行在虚拟控制台8。如下图:

  在新启动的X Server中运行一个GVim看看效果。运行GVim时,使用-display :1参数指定窗口显示在新启动的X Server上,使用-geometry参数指定窗口的大小和位置。然后按Ctrl+Alt+F8切换虚拟控制台,看效果。命令见上图,程序运行效果见下图:

远程连接X Server

  如果能让远程机器上的GVim也把窗口显示在本地机器的屏幕上,那就比较过瘾了。所以,使用ssh连接到CentOS-5.,然后使用gvim -display ubuntu-:1命令,希望将GVim显示到Ubuntu的display :1上。由于是远程连接,所以hostname不能省略,需写成ubuntu-:1,也可以使用IP地址,写成..1.:1。如下图:

  很可惜,连接失败。

  失败的原因是远程访问X Server需要安全认证。这个可以理解,就像登陆邮箱需要输入用户名和密码一样,如果X Server不要认证就可以随便连接的话,那岂不是桌面上垃圾窗口满天飞?安全认证的方式有很多种,具体请参考man Xsecurity。安全认证可以使用xhost和xauth这两个程序来进行,具体使用方法参考它们的文档。

  先用xhost来授权,这个比较简单。为了运行xhost,需要在X Server上有一个终端,所以运行一个xterm,如下图:

  在xterm中输入sodu xhost +..1.,这样,CentOS-5.中运行的GUI程序都可以连接到这个新开启的X Server了。如下图:

  在CentOS-5.中运行GVim,如下图:

  窗口显示在Ubuntu中,如下图:

  新启动的X Server界面比较丑陋,我们还是想让远程机器上的GUI程序直接显示在Ubuntu的桌面环境中。所以,指定display为:0,如下图:

Linux折腾记(三):X Window的奥秘(linux ii)

  结果很不幸,无法打开display。连接不上,为什么呢?是安全认证的问题吗?不是,是lightdm的问题,请继续往下看。

理解lightdm和X Window桌面环境的启动过程

  X Server的启动方式有两种,一种是通过显示管理器启动,另一种是手动启动。在前面的例子中,我通过直接运行/usr/bin/X :1来启动了一个X Server。直接启动X Server的方法还有运行startx或者xinit。手动启动X Server的缺点就是启动的X Server不好看。而显示管理器启动的不仅有X Server,还有一大堆的Client程序,构成了一个完整的桌面环境,界面当然就漂亮多了。

  显示管理器(Display Manager)是什么呢?前面我讲到display就是一个电脑配备的一套键盘鼠标和显示器,那么显示管理器就是这一套设备的管理器了。显示管理器可以直接管理这些设备,所以它可以控制X Server的运行,由它来启动X Server那是再合适不过了。系统启动过程是这样的:内核加载-->init程序运行-->显示管理器运行-->X Server运行-->显示管理器连接到X Server,显示登录界面-->用户登录后,登录界面关闭,加载桌面环境。从上面的流程可以看出,显示管理器是X Server的父进程,它负责启动X Server,当X Server启动后,它又变成了X Server的一个Client程序,连接到X Server显示欢迎界面和登录界面,最后,显示管理器又是所有桌面环境的父进程,它负责启动桌面环境需要的其它Client程序。

  在Ubuntu .中,使用lightdm取代了传统的xdm、gdm等显示管理器。简单来说,就是由lightdm负责启动X Server和其它的X程序。不知道为什么,lightdm在启动X Server的时候,给X Server加上了-nolisten tcp参数,所以远程计算机就没有办法连接到Ubuntu的桌面了。(从第1张图片可以看到该参数。)

  下一步的目标就是更改lightdm的配置,去掉这个-nolisten tcp参数。不过要达成这个目标还真是艰难啊,我的系统挂掉然后重装就是在这里折腾出来的。在这里我要狠狠滴吐槽一下freedesktop.org,在X Window所用的软件中,freedesktop.org贡献很大,比如lightdm、xft、fontconfig、freetype都是这个组织贡献的,可是,你就不能把文档写详细点吗?不仅是lightdm的文档不行,xft、freetype的文档也都不行。

  lightdm的man page非常简略,使用sudo dpkg -L lightdm也找不出该软件包中有价值的东西。没办法,另辟蹊径吧。在使用sudo dpkg -L lightdm查看该软件包的文件时,发现它的log文件放在/var/log/lightdm文件夹下,过去看看:

  终于,从log文件中看到了lightdm启动的全过程。首先,看到它从哪几个目录加载配置文件,接着,看到它启动X Server。从下图光标所在的行可以看到X Server启动的所有参数,包括-nolisten tcp选项。

  继续看log文件,下面光标所在的行显示lightdm怎么启动gnome-session:

  同时,我发现/etc/lightdm/目录下没有lightdm.conf文件,而/usr/share/doc/lightdm/目录下有一个lightdm.conf.gz文件,把该文件当文档看了一下,发现里面果然就是lightdm的配置的解释。赶快将该文件复制到/etc/lightdm/目录下并解压,如下图:

  然后用Vim编辑/etc/lightdm/lightdm.conf文件,将xserver-allow-tcp=false一行前面的注释去掉,并且改为xserver-allow-tcp=true。如下图:

  最后,重启系统。再用ps查看进程,发现-nolisten tcp选项已经没有了。

搞定xauth

  搞定了-nolisten tcp之后,要想从远程计算接连接到Ubuntu桌面,还是需要安全认证。在前面的例子中,我使用了xhost。xhost是最简单的认证方式。在这里我要试一下别的认证方式,比如MIT-MAGIC-COOKIE-1。如上图,先使用xauth list命令查看一下当前的授权记录,发现只有一条,而且display是ubuntu-/unix:0,很显然,这是一个本地授权,所以需要使用xauth add命令添加一个使用ip地址的授权,后面的key照抄就行了。最后,使用xauth extract和xauth merge配合管道和ssh将该授权记录合并到CentOS-5.中。

  在CentOS-5.中启动GVim,指定display为..1.:0,GVim窗口就出现在了Ubuntu中。如下图:

X Server的配置

  可以使用不同的方法对X Server进行配置,前面的例子是直接指定命令行参数。除了指定命令行参数,还可以使用环境变量和配置文件。X Server的配置文件为一般是/etc/X/xorg.conf或/etc/X/xorg.conf.d/目录下的.conf文件,当然,配置文件也可以放在其它的目录中,具体信息,请参看man xorg.conf。

  如果没有配置文件,X Server将在启动的时候自动检测硬件,然后生成一个内置的配置。Ubuntu系统就没有配置文件。不过没关系,如果需要使用配置文件的时候,可以通过X Server的-configure参数生成一个配置文件,里面包含当前自动检测出的配置。如果需要任何个性化的配置,对该文件进行修改即可。

现有的图形界面中可以运行嵌套的X Server

  我们上面运行的X Server都是直接占用了计算机的整个显示器和键盘鼠标,事实上,在现有的图形界面中,还可以以窗口模式运行另外一个X Server,称为nested X Server。最常用的nested X Server是Xephyr,在Ubuntu中可以通过如下命令安装它:

复制代码代码如下:sudo aptitude install xserver-xephyr

  Xephyr的使用非常简单,可以通过 man Xephyr 命令查看它的使用手册。如果输入 Xephyr :1 命令,就可以在现有图形界面中打开一个窗口模式的X Server,如下图:

  以后再启动GUI程序,就可以通过程序的-display选项让程序运行在这个嵌套的X Server中,如下图:

  怎么样,是不是很好玩呢?除了好玩,还很有用,比如调试窗口管理器啊、连接远程桌面啊什么的都用得着。当然,我这里只是简单展示一下原来X Window还可以这么玩。

总结:

  1.在一个Linux系统中存在多个虚拟控制台,所以可以启动多个X Server;

  2.启动X Server的方式有两种,一种是使用/usr/bin/X、startx、xinit手动启动,一种是通过显示管理器启动;

  3.Ubuntu使用的显示管理器是lightdm,这是一个比较新的、轻量级的显示管理器,但是文档不够详细;

  4.远程计算机连接本地的X Server,需要X Server开放TCP端口,还要搞定安全认证;

  5.X Server的配置,可以通过命令行参数,可以通过环境变量,还可以通过配置文件;

  6.可以在现有的图形界面下以窗口模式运行嵌套的X Server,常用的软件是Xephyr;

  7.我的《玩转Linux系统的方法论》中介绍的方法不够用,还要加上两条:①使用ps命令查看进程;②查看程序启动的log文件。

Linux折腾记(四):Linux桌面系统字体配置详解 字体显示效果测试文字:复制代码代码如下:这一段是为了测试宋体字的显示效果,包括宋体里面自带的英文字体,Thisisenglish,howdoesitlooklike?。这一行是

Linux折腾记(五):在Ubuntu .中使用Windows字体 在前一篇随笔中,我详细讨论了字体的分类及用途,也以Fedora为例,展示了字体配置的思路和方法。我在配置Fedora系统字体的时候,采用的是一种釜

Linux折腾记(六):感悟GNU C及把Vim打造成C/C++的半自动化IDE C语言在Linux系统中的重要性自然是无与伦比、不可替代,所以我写Linux江湖系列不可能不提C语言。C语言是我的启蒙语言,感谢C语言带领我进入了程序世

标签: linux ii

本文链接地址:https://www.jiuchutong.com/biancheng/368237.html 转载请保留说明!

上一篇:Linux折腾记(二):打造属于自己的Vim(linux ii)

下一篇:Linux折腾记(四):Linux桌面系统字体配置详解(linux 744)

  • 失控发票账务处理
  • 节税是什么意思
  • 税务申报指的是什么
  • 增值税的视同销售行为有哪些?
  • 哪些单位属于政府工作部门系列
  • 资产负债表固定资产项目包括哪些
  • 会计哪些账本需要保存
  • 0税率发票有什么用
  • 明细分类账采用的格式有
  • 我公司给对方公司付款
  • 接受捐赠计入什么费用
  • 异地工程预缴税有哪些流程
  • 提供劳务收取现金会计分录
  • 公司名字开错了,认证过了怎么处理
  • 汽车违章罚款在哪里缴纳
  • 营改增后哪些费用可以抵扣
  • 已出账但未认证的抵扣联怎么办?
  • 税控盘白盘和黑盘图标
  • 领用原材料的会计分录
  • 标准误和标准差的区别和联系
  • 所得税申报季末资产总额怎么填
  • 小规模普通发票可以抵扣吗
  • 合伙企业合伙人数量
  • windows刷新桌面
  • 纳税人哪些支出不用交税
  • pop3服务是什么
  • 取得的进项税发票抵扣
  • 金融业贷款损失多少
  • PHP:imagegrabscreen()的用法_GD库图像处理函数
  • 当月计算的增值税怎么算
  • echarts引入地图
  • php操作json文件
  • 汽车4s店一般会摆放什么小零食
  • 购买完服务器之后要怎么做
  • 超参数有哪些调优方法
  • python答疑
  • 微信小程序开发
  • 个体工商户有固话吗
  • 接受捐赠收入如何纳税
  • 金蝶本月金额公式
  • 印花税可以年底报一次
  • 用现金付款应填什么凭证
  • 公司广告费用咨询费都应当作为管理费用对还是错
  • 增值税进项税额转出的情况有哪些
  • 资产负债表期末余额是累计数吗
  • 工程分包合同协议书
  • 固定资产报废如何交增值税
  • 发票作废该如何操作
  • 研发费用固定资产如何入账
  • 置换房产流程
  • 固定资产转为投资的条件
  • 税控盘没有反写会罚款吗
  • 会计凭证负数金额怎么算
  • 印花税需要计提税金及附加吗
  • mysql时间语句
  • sql server233错误
  • mysql高级功能
  • windows vista(service pack1)
  • vcspawn.exe什么意思
  • 360卫士重装电脑够进入不了桌面
  • mac文档怎么传给winds
  • win8共享文件
  • win7 分区表
  • windowsxp弹出广告怎么解决
  • 命令窗口的作用
  • win8能装pr2017吗
  • win10 1511版本升级到1803
  • python 处理mp3
  • JQuery中Ajax()的data参数类型实例分析
  • android中的动画有哪几类,它们的特点和区别是什么?
  • python爬虫视频教程
  • javascript定律
  • 安卓app性能测试
  • js调用失败
  • 山东税务是干什么的
  • 上海工资8000税后多少
  • 如何办理委托银行卡业务
  • 地税局刚进去工资多少
  • 物业优质服务我们在行动
  • 个人所得税税务审核不通过怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设