<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 11.3 最原始圖形接口: Xdmcp 服務的啟用 考慮一個情況,如果你的 Linux 主機主要是用來作為圖形處理時,而且同時有多人需要用到那個功能, 那么一部 Linux 是否一次僅能提供一個人處理那個軟件呢?嘿嘿!那可不一定喔!因為 Linux 有相當優秀的 X Window System 啊!現在就來談談第一個圖形接口的遠程聯機服務器吧! * * * ### 11.3.1 X Window 的 Server/Client 架構與各組件 由于我們 Linux 使用的圖形接口是所謂的 X-Window System 的東西,這玩意兒是能夠跨平臺的,目前在 Linux 上頭開發的圖形接口軟件,幾乎都是使用這個 X 的架構來處理,所以啰,你就不能夠不知道 X Window 啦! 我們在基礎篇第三版的二十四章已經講過 [X Window](http://linux.vbird.org/linux_basic/0590xwindow.php) 啦, 因此這里只會作個簡單的介紹,以方便大家來了解為何我們的軟件是這么安裝與設定喔! X Window System 在運作的過程中,又因控制的數據不同而分為 X Server 與 X Client 兩種程序,雖然說是 X Server/Client , 但是他的作用卻與網絡主機的 Server/Client 架構大異其趣喔~先來說說 X Server/Client 這兩種程序所負責的任務先: * X Server: 這組程序主要負責的是屏幕畫面的繪制與顯示。 X Server 可以接收來自 X client 的數據,將這些數據繪制呈現為圖面在屏幕上。 此外,我們移動鼠標、點擊數據、由鍵盤輸入數據等等,也會透過 X Server 來傳達到 X Client 端,而由 X Client 來加以運算出應繪制的數據; * X Client: 這組程序主要負責的是數據的運算。 X Client 在接受到 X Server 傳來的數據后 (例如移動鼠標、點擊 icon 等動作),會經由本身的運算而得到鼠標應該要如何移動、 點擊的結果應該要出現什么樣的數據、鍵盤輸入的結果應該要如何呈現等等,然后將這些結果告知 X Server ,讓他自行去繪制到屏幕上。 **Tips:** 鳥哥常常開玩笑的說, X server 就是畫布,而 X client 就是手拿畫筆的畫家。你得要先有畫布 (管理好所有可顯示的硬件后) 之后畫家的想法 (計算出來的繪圖數據) 才能夠繪制到畫布上! ![](https://box.kancloud.cn/2016-05-13_5735736501917.gif) 由于每一支 X client 都是獨立存在的程序,因此在圖形顯示會發生一些迭圖的問題 (想象一下每一個 X client 都是一個很自我的畫家, 每個畫家都不承認對方的存在,都自顧自的在畫布上面作畫,最后的結果會是如何?)。因此,后來就有一組特殊的 X client 在進行管理所有的其他 X client 程序,這個總管的咚咚就是 Window Manager! * Window Manager (WM):是一組控制所有 X client 的管理程序,并同時提供例如任務欄、 背景桌面、虛擬桌面、窗口大小、窗口移動與重迭顯示等任務。Window manager 主要由一些大型的計劃案所開發而來,常見的有 GNOME, KDE, XFCE 等 既然 X Window System 是 Linux 上面的一組程序,那么它如何啟動的呢?早期的用戶在登入系統后,必須要自己先啟動 X server 程序,然后再啟動個別的 Window manager ,若有其他需求,再啟動其他額外的 X client 就是了。這么麻煩!所以為了簡化啟動個人圖形接口的步驟,后來還有所謂的 Display Manager (DM) 這玩意喔! * Display Manager (DM):提供使用者登入的畫面以讓用戶可以藉由圖形接口登入。 在使用者登入后,可透過 display manager 的功能去呼叫其他的 Window manager ,讓用戶在圖形接口的登入過程變得更簡單。 由于 DM 也是啟動一個等待輸入賬號密碼的圖形數據,因此 DM 會主動去喚醒一個 X Server 然后在上頭加載等待輸入的畫面就是了。 在目前新釋出的 Linux distributions 中,通常啟動圖形接口讓用戶登入的方式中,都是先執行 Display Manager 程序, 該程序會主動加載一個 X Server 程序,然后再提供一個等待輸入賬號密碼的接口程序,之后再根據用戶的選擇去啟動所需要的 Window Manager 程序,最后就由用戶直接操作 WM 來玩圖形接口啰。 例題:在 CentOS 6.x 當中,若預設為 init 5 的情況下,那么最終啟動圖形接口的是哪一只程序?答:分析 /etc/init/* 當中的檔案,會發現有個檔案的內容是這樣: ``` [root@www ~]# cat /etc/init/prefdm.conf start on stopped rc RUNLEVEL=5 stop on starting rc RUNLEVEL=[!5] console output respawn respawn limit 10 120 exec /etc/X11/prefdm -nodaemon ``` 你可以分析 /etc/X11/prefdm 的內容,就能夠發現其實該行啟動的就是一個 X display manager 程序了喔! 例題:登入 init 5 的 CentOS 6.x 之前,先到 tty1 去查閱一下 X server 是由哪一支程序所喚醒的?答:我們可以透過 pstree 來觀察程序間的相關性喔!同時注意,預設的 CentOS 6.x 的 X server 程序名稱為 Xorg 的哩。 ``` [root@www ~]# pstree -p init(1)-+-NetworkManager(1086) ....(中間省略).... &#124;-gdm-binary(2642)---gdm-simple-slav(2661)-+-Xorg(2663) &#124; &#124;-gdm-session-wor(2746) ....(后面省略).... ``` 由上述的數據來看,gdm-binary 可以喚醒 Xorg 喔!同理,我們也會知道提供認證的圖形畫面應該是由 gdm-session 所提供的喔! * X Window System 用在網絡上的方式: XDMCP 當 X server, X client 都在同一部主機上面的時候,你可以很輕松的啟動一個完整的 X Window System。 但是如果你想要透過這個機制在網絡上面啟動 X 呢?此時你得先在客戶端啟動一個 X server 將圖形接口繪圖所需要的硬件裝置配置好, 并且啟動一個 X server 常見的接收埠口 (通常是 port 6000),然后再由服務器端的 X client 取得繪圖數據,再將數據繪制成圖啰。 透過這個機制,你可以在任何一部啟動 X server 登入服務器喔!而且不管你的操作系統是啥呢!意義就像下圖, 如此一來,你就可以取得服務器所提供的圖形接口環境啦! ![](https://box.kancloud.cn/2016-05-13_5735da6d6255c.png) 圖 11.3-1、X server/client 的架構 但是如果你是使用最笨的方法在客戶端自己啟動 X server ,然后在告訴服務器將 X client 程序一個一個的加載回來, 那就太累人了吧!我們之前上面不是提到過可以用 display manager 來管理使用者的登入與啟動 X 嗎?那服務器能不能提供一個類似的服務, 那我們直接透過服務器的 display manager 就能夠提供我們登入的認證與加載自己選擇的 window manager 的話,這樣就太棒了! 能夠達到嗎?當然可以啊!那就是透過 Xdmcp (X display manager control protocol) ([注3](#ps3)) 啦! Xdmcp 啟動后會在服務器的 udp 177 開始監聽,然后當客戶端的 X server 聯機到服務器的 port 177 之后, 我們的 Xdmcp 就會在客戶端的 X server 放上用戶輸入賬密的圖形接口程序啰!那你就能透過這個 Xdmcp 去加載服務器所提供的類似 Window Manager 的相關 X client 啰!那你就能夠取得圖形接口的遠程聯機服務器哩!贊吧! 那么什么時候會出現多使用者連入服務器取得 X 的情況呢?以鳥哥的例子來說,鳥哥實驗室有一組 Linux 在進行數值模擬, 他輸出的結果是 NetCDF 檔案,我們必須使用 PAVE 這一套軟件去處理這些數據。但是我們有兩三個人同時都會使用到那個功能, 偏偏 Linux 主機是放在機架柜里面的,要我們擠在那個小小的空間前面『站著』操作計算機,可真是討人厭啊~ 這個時候,我們就會架設圖形接口的遠程登錄服務器,讓我們可以『多人同時以圖形接口登入 Linux 主機』來操作我們自己的程序!很棒,不是嗎! * * * ### 11.3.2 設定 gdm 的 XDMCP 服務 既然是所謂的 Xdmcp 協議,那么是否意味著與 X display manager 有關呢?沒錯啦! Xdmcp 協議是由 DM 程序所提供的。 我們的 CentOS 預設的 DM 為 GNOME 這個計劃所提供的 gdm 哩!因此,你想要啟動 Xdmcp 服務,那就得要針對 gdm 這個程序來設定啰。 這個 gdm 的設定數據都放置在 /etc/gdm/ 目錄下,而我們所要修改的配置文件其實僅是一個 /etc/gdm/custom.conf ([注4](#ps4)) 檔案而已。 **Tips:** X11 提供的 display manager 為 xdm ,而著名的 KDE 與 GNOME 也都有自己的 display manager 管理程序,分別是 kdm 與 gdm 。你可以透過三者中任何一者的 display manager 的配置文件來啟動 xdmcp 這個協定呢~ ![](https://box.kancloud.cn/2016-05-13_5735736501917.gif) 不過,因為我們安裝的基準是『Basic server』,所以很多圖形接口軟件并沒有被安裝起來。因此,在實作 Xdmcp 之前,我們得先安裝圖形接口才行喔!使用 yum groupinstall 來安裝吧! ``` # 先檢查看看與 X 相關的軟件群組有哪些? [root@www ~]# yum grouplist Desktop Desktop Platform X Window System # 這三個算是最重要的項目了!得要安裝起來才行喔!gdm 是在 Destop 中! [root@www ~]# yum groupinstall "Desktop" "Desktop Platform" \ &gt; "X Window System" ``` 上面進行完畢后,現在才能開始搞定 custom.conf 啦!來試玩看看! ``` [root@www ~]# vim /etc/gdm/custom.conf [security] &lt;==在與資安方面有關的信息,大多指登錄相關事宜 AllowRemoteRoot=yes &lt;==xdmcp 預設不許 root 登入,得用這個項目才能以 root 登入 DisallowTCP=false &lt;==這個項目在允許客戶端使用 TCP 的方式聯機到 xdmcp [xdmcp] &lt;==就是這個小節的重點之一啰! Enable=true &lt;==啟動 xdmcp 的最重要項目啰! # 上述特殊字體的部份就是你得要自己新增的內容啰! [root@www ~]# init 5 # 上述這個指令會切換到 X 圖形畫面,如果確定要使用 gdm,runlevel 得調整到 5 才好 # 果真如此的話,那就得要調整 /etc/inittab 啰! [root@www ~]# netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 4557/Xorg tcp 0 0 :::6000 :::* LISTEN 4557/Xorg udp 0 0 0.0.0.0:177 0.0.0.0:* 4536/gdm-binary # 上述的 port 6000 是由 DisallowTCP=false 項目啟動的,port 177 才是我們要的 ``` 上述的動作鳥哥是在 runlevel 3 底下啟動的,如果你是在 runlevel 5 底下時,因此你也可以利用『 init 3 && init 5 』來重新啟動圖形接口。但如果你是在 runlevel 3 底下并且不希望變更成為 runlevel 5 呢?那又該如何啟動 port 177 啊?如果是這樣的話,那么你可以這樣啟動 xdmcp 啦: ``` [root@www ~]# init 3 [root@www ~]# runlevel 5 3 &lt;==左邊的是前一個 runlevel,右邊的是目前的,因此目前是 runlevel 3 [root@www ~]# gdm &lt;==這樣就啟動 xdmcp 啰! [root@www ~]# vim /etc/rc.d/rc.local /usr/sbin/gdm ``` 現在你知道如何在不同的 runlevel 啟動 xdmcp 了吧?如果是 runlevel 5 ,因為在 /etc/inittab 就已經有自動啟動 gdm 了, 所以你只要順利啟動 runlevel 5 即可。但如果你是在 runlevel 3 的話,因為這樣 gdm 就不會被系統的啟動流程啟動, 那你只好自己在 /etc/rc.d/rc.local 里面指定啟動他啰!這樣了解呼?不過,既然你都要使用 xdmcp 了,所以建議您直接啟動在 runlevel 5 即可!接下來,你得要開放客戶端對你的 port 177 聯機才行! 請自行修改你的防火墻規則,開放 udp port 177 吧!鳥哥這里假設你使用鳥哥的防火墻腳本,那你這樣作就好了: ``` [root@www ~]# vim /usr/local/virus/iptables/iptables.rule iptables -A INPUT -p UDP -i $EXTIF --dport 177 --sport 1024:65534 \ -s 192.168.100.0/24 -j ACCEPT #xdmcp # 注意喔!特點是使用 UDP 埠口以及加入來源端 IP 網域的控管! [root@www ~]# /usr/local/virus/iptables/iptables.rule [root@www ~]# iptables-save &#124; grep 177 -A INPUT -s 192.168.100.0/24 -i eth0 -p udp -m udp --sport 1024:65534 --dport 177 -j ACCEPT # 確實有開放 port 177 ,而且是 udp 的埠口喔!要注意這兩個項目。 ``` * * * ### 11.3.3 用戶系統為 Linux 的登入方式 由于 Linux 本身的窗口就是由 X server 提供來的,因此使用 Linux 登入遠程的圖形服務器是很簡單的啦! 但是因為啟動 X 的方式不同而已數種啟動方式,底下我們就講講兩個常見的啟動方式: * 在不同的 X 環境下啟動聯機: 直接用 X 如果你的客戶端已經在 runlevel 5 了,因此其實你已經有一個 X 窗口的環境,這個環境的顯示終端機就稱為『 :0 』。 在 CentOS 6.x 的環境中,如果原本就是 runlevel 5 的環境,那么這個圖形接口的 :0 是在 tty1 終端機啦!如果是由 runlevel 3 啟動圖形接口,那就是在 tty7 喔!由于已經有一個 X 了,因此你必須要在另外的終端機啟動另一個 X 才行!那個新的 X 就稱為 :1 接口,其實通常就在 tty7 或 tty8 啦!但因為 X server 要接受 X client 必須要有授權才行, 所以你得先在窗口接口開放接受來自服務器的 X client 數據。 此外,雖然你在客戶端是以主動的方式連接到服務器的 udp port 177 ,但是服務器的 X client 卻會主動的連接到你客戶端的 X server,因此,你必須要開放來自服務器端主動對你的 TCP port 6001 (因為是 :1 界面) 的防火墻聯機才行喔!那就來實做看看: ``` # 1\. 放行 X client 傳來的資料:在 X Window 的畫面當中啟用 shell 輸入: [root@clientlinux ~]# xhost + 192.168.100.254 192.168.100.254 being added to access control list # 注意!你是客戶端!且假設我剛剛那部 Linux 主機的 IP 為 192.168.100.254 # 2\. 開始放行防火墻,因為我們啟動 port 6001 ,所以你在客戶端這樣作: [root@clientlinux ~]# vim /usr/local/virus/iptables/iptables.allow iptables -A INPUT -i $EXTIF -s 192.168.100.0/24 -p tcp --dport 6001 -j ACCEPT [root@clientlinux ~]# /usr/local/virus/iptables/iptables.rule [root@clientlinux ~]# iptables-save -A INPUT -s 192.168.100.0/24 -p tcp -m tcp --dport 6001 -j ACCEPT # 要能看到上面這一行才行呦! # 3\. 在文字接口 (例如 tty1) 下輸入如下的指令: [root@clientlinux ~]# X -query 192.168.100.254 :1 # 進入 X Window 啰! ``` 如果一切順利的話,那么你在 clientlinux.centos.vbird 就會看到如下的畫面(注意主機名): ![](https://box.kancloud.cn/2016-05-13_5735da6d803fe.gif) 圖 11.3-2、在客戶端連上 Xdmcp 成功的畫面 在上圖中輸入正確的賬號與密碼之后,你在 tty8 (:1) 就會有個窗口接口啰!那你如果想要回到本機的窗口接口, 就回到 tty7 (:0) 即可切換成功!(在 runlevel 5 時,:0 在 tty1 ,而 :1 在 tty7 喔!)那想要關閉 tty8 該如何是好?你不能夠在 tty8 注銷啦,因為注銷后,系統會重新開一個等待登入的畫面,你還是沒辦法關閉的。你得要回到剛剛啟動 X 的 tty1 然后按下 [ctrl]-c 中斷聯機即可! * 在同一個 X 底下啟動另一個 X: 使用 Xnest 如果常常在 tty7, tty8 切換來去的話,偶而會忘記到底在哪個界面了,尤其是當你的桌面都一模一樣時, 那就更難判斷了。有沒有辦法直接在 tty7 啟動另一個窗口來加載遠程服務器的圖形接口呢?可以的,那就透過 Xnest 吧! 這指令需要在 X 的環境下使用喔!它的簡單用法如下: ``` [root@www ~]# Xnest -query 主機名 -geometry 分辨率 :1 選項與參數: -query :后面接 xdmcp 服務器的主機名或 IP 啰 -geometry :后面接畫面的分辨率,例如 1024x768 或 800x600 等之類的分辨率 # 根據上述數據,使用 800x600 連上 192.168.100.254 那部主機: [root@www ~]# yum install xorg-x11-server-Xnest [root@www ~]# Xnest -query 192.168.100.254 -geometry 640x480 :1 ``` 如果一切順利的話,那你就會在 tty7 的本機 X 環境下看到如下的畫面 (底下的畫面是已經登入的情況!) ![](https://box.kancloud.cn/2016-05-13_5735da6da198f.gif) 圖 11.3-3、在客戶端的 X 順利連上 Xdmcp 的畫面 一開始的圖示會與[圖 11.3-2](#fig11.3-2) 一樣,就是出現輸入賬密的畫面,如果輸入正確的帳密后, 就會出現上述的圖示了。仔細看一下畫面當中的終端機標頭,你就會發現確實是兩部主機的桌面呢!這樣有沒有更棒棒? ^_^! 要關閉這個 X 就簡單多了!直接按下關閉,或者是中斷那個 Xnest 的程序即可。 * * * ### 11.3.4 用戶系統為 Windows 的登入方式: Xming 由于 Windows 本身并沒有提供預設的 X server ,因此我們得要自行安裝 X server 在 Windows 上面才行。 目前常見的 X server 有底下這幾個: * [X-Win32 (http://www.xwin32.tw/)](http://www.xwin32.tw/) * [Exceed (http://www.hummingbird.com/products/nc/exceed/index.html?cks=y)](http://www.hummingbird.com/products/nc/exceed/index.html?cks=y) * [Xming (http://sourceforge.net/projects/xming/)](http://sourceforge.net/projects/xming/) 其中 X-Win32 與 Exceed 都屬于商業軟件,而 Xming 則屬于輕量級的自由軟件,說是輕量級并非說它不好, 而是因為 Xming 的檔案真的很小,而該有的功能都有了,所以算是很不賴的一個軟件喔!因此底下鳥哥是以 Xming ([注5](#ps5)) 作范例來介紹的。 1. 安裝:你可以使用預設的方法,一直下一步的安裝下去,就能夠順利的安裝好 Xming 這套 X server 的軟件啰。 2. 啟動:請在『開始』--&gt;『程序集』--&gt;『Xming』--&gt;『XLaunch』開啟設定聯機到 xdmcp 的方式。底下我們會使用區網內的廣播 (broadcast) 來找到 xdmcp 服務器的方式。啟動 XLaunch 之后會出現如下的圖示: ![](https://box.kancloud.cn/2016-05-13_5735da6debbac.gif) 圖 11.3-4、Xming 的 Xdmcp 連接方式示意圖 記得上面的圖示要選擇 One window 或 Fullscreen 或 One window without titlebar 才能夠使用 XDMCP 喔!選擇完畢后按『下一步』 就會出現如下的畫面: ![](https://box.kancloud.cn/2016-05-13_5735da6e0c2b6.gif) 圖 11.3-5、Xming 的 Xdmcp 連接方式示意圖 上述的圖示當中共有三種傳遞 X client 的方法,在這個小節當中我們要連到 xdmcp ,所以你得要選擇第三個喔!之后再下一步會出現下圖: ![](https://box.kancloud.cn/2016-05-13_5735da6e3ab55.gif) 圖 11.3-6、Xming 的 Xdmcp 連接方式示意圖 這里當然就是連接到你想要連上去的 xdmcp 服務器啰!將他的 IP 填上去吧!之后再下一步去: ![](https://box.kancloud.cn/2016-05-13_5735da6e51f56.gif) 圖 11.3-7、Xming 的 Xdmcp 連接方式示意圖 上圖的項目與數據的互相復制貼上有關,保留默認值即可。按下下一步吧! ![](https://box.kancloud.cn/2016-05-13_5735da6e667f0.gif) 圖 11.3-8、Xming 的 Xdmcp 連接方式示意圖 出現上圖就是設定完畢了,給它按下『完成』之后,你就會發現如同[圖 11.3-2](#fig11.3-2) 的畫面出現,你就能夠開始在 Windows 底下連上圖形接口的 Linux Server 啰!很輕松吧! * 重點在 Server 與 Client 的防火墻上 其實從上面的設定當中你會發現, XDMCP 不論是在 Server 還是 Client 的設定上面都很簡單!但是有時候你就是會發現, 明明所有的動作都做完了,但是就是沒有辦法連上 Xdmcp 服務器!最容易發生錯誤的其實就是防火墻啦!因為雖然我們客戶端啟動 X server 后,會主動聯機到服務器端的 Xdmcp (port 177),但是,接下來卻是服務器主動聯機到我們客戶端的 X server (可能是 port 6000~6010)。 因此,如果你只是設定了服務器的防火墻而已,那么很可能出現問題的應該就是客戶端的防火墻忘記打開提供服務器主動聯機的規則啰! 這點是必須要跟大家說明的喔! * * *
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看