
大家好,我是無(wú)用掛件,本期將為大家介紹一波有關(guān)Xwindow的基礎(chǔ)知識(shí)。
先祭出上期問(wèn)題解答:“你SSH到你的Linux服務(wù)器,嗯,然后順理成章地startx…等等,這時(shí)你的屏幕是X Client還是X Server?”
這個(gè)基本概念,初學(xué)者最容易犯錯(cuò)。估計(jì)會(huì)有童鞋會(huì)不假思索地認(rèn)定,“這不顯然是Client嘛,連到Xorg后端顯示GUI?!?/p>
說(shuō)得好!我給滿(mǎn)分(滿(mǎn)分為0分)
選X Client的童鞋應(yīng)該是對(duì)XWindow的基本原理不清晰,以致將Server和Client的概念混淆了。比如,在Internet上,你通過(guò)Remmina選擇SSH類(lèi)型連到你的RedHat服務(wù)器上,這時(shí)Remmina是Client,你的RedHat服務(wù)器是Server。
然而XWindow并不是一回事。X server并不是你登錄的那臺(tái)機(jī)器,而是指一個(gè)程序。它負(fù)責(zé)在某臺(tái)機(jī)器上接受客戶(hù)的要求,在屏幕上顯示客戶(hù)請(qǐng)求的圖形,并且把消息(鍵盤(pán),鼠標(biāo),窗口消息)通知客戶(hù)程序。
還是不懂?來(lái),我們具體分析一下。
上述執(zhí)行startx的Remmina就是一個(gè)X server,它負(fù)責(zé)控制那臺(tái)RedHat服務(wù)器上的display,而其它的什么GNOME、Xterm、LightDM之類(lèi)都是客戶(hù)程序。它們走TCP-6000(舉個(gè)例子而已)連接你的Remmina上已經(jīng)調(diào)用起來(lái)的GUI Display,而你手里Debian筆記本的TCP-6000是由Remmina進(jìn)行相關(guān)bind&Listen的。So,你覺(jué)得,這里調(diào)起startx的Remmina,是更像Server還是Client呢?
看到這一大堆之后的正確感覺(jué)應(yīng)該是:“這啥子玩意…好像有點(diǎn)意思”,對(duì),就應(yīng)該是這樣。
再來(lái)兩個(gè)栗子:
你調(diào)起了XTerm,就會(huì)在Remmina的屏幕上顯示一個(gè)窗口。實(shí)際發(fā)生的事情是:XTerm請(qǐng)求連接Debian筆記本的6000號(hào)端口(由Remmina控制),跟其對(duì)接,然后XTerm請(qǐng)求得到資源,并在屏幕上顯示一個(gè)窗口。
你在Terminal里按下”S”鍵時(shí),Remmina會(huì)把這個(gè)事件通知XTerm進(jìn)程,然后XTerm會(huì)發(fā)送數(shù)據(jù)報(bào),請(qǐng)求Remmina “在坐標(biāo)(X,Y)處顯示一個(gè)字母S;在后面顯示一個(gè)矩形作為光標(biāo)?!边@樣你的XTerm窗口里就會(huì)多顯示一個(gè)字母。
(這下如果還不懂的話那我也沒(méi)法了呀)
(憤鳥(niǎo)同學(xué)表示她他基本上懂了)
(wtf…怎么字?jǐn)?shù)又過(guò)千了)
那我們?cè)僦v一點(diǎn)DE(Desktop Environment)的事情。
問(wèn)題:Gnome、KDE、Xfce或者DDE是什么?
某童鞋:窗口管理器啊,這還要說(shuō)什么?
我:What?那這么久真是給你白講了==
是沒(méi)錯(cuò),WM(Window Manager)可以翻譯成窗口管理器。但Gnome是WM么?當(dāng)然,這總比把WM說(shuō)成是XWindow的小傻瓜們要好一點(diǎn)

Gnome、DDE之流是一種很多程序和函數(shù)庫(kù)的集合,其設(shè)計(jì)目的是提供一致方便的操作方式來(lái)滿(mǎn)足普通用戶(hù)的需要,所以我們不妨稱(chēng)之為“桌面環(huán)境”。它們不但包含窗口管理器,還有很多實(shí)用程序。歷史上,Gnome使用過(guò)的窗口管理器包括Enlightenment, Metacity等等。KDE的窗口管理器,那就是KWin了。
(當(dāng)然,這個(gè)專(zhuān)欄后期會(huì)詳盡地為大家介紹相關(guān)DE&WM的事情。)
或許有人問(wèn):知道這么一回事又有什么用呢?我不是有GDM、LightDM、SDDM+Xfce、Gnome、KDE為我搞定一切嘛?
話說(shuō)回來(lái),Gnome、KDE那種傻瓜式操作要我教嗎?(這些極為用戶(hù)友好的桌面環(huán)境,隨手點(diǎn)點(diǎn)就該會(huì)啊~)
那學(xué)Linux的趣味在哪呢?云時(shí)代,你用什么系統(tǒng)并不重要,因?yàn)槟阏谧龅氖虑槠渌到y(tǒng)應(yīng)該也能做吧。
當(dāng)你在Terminal里面敲上一句命令的時(shí)候,懂得其機(jī)理不該是最美妙的事嗎?
好啦,今天關(guān)于XWindow的介紹就告一段落了。照例,留個(gè)問(wèn)題:
你了解Windows,macOS,Linux的應(yīng)用分發(fā)模式嗎?試分析其區(qū)別。
References:?https://www.x.org/wiki/
本文首發(fā)于淀粉月刊:https://dfkan.com
原作者:無(wú)用掛件
發(fā)布時(shí)間:2018年7月26日