新浪網

  新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(49):進入X Window
 


FreeBSD連載(49):進入X Window

http://www.sina.com.cn 1999年12月21日 16:20 王波

進入X Window

  X服務器的執行程序位于/usr/X11R6/bin目錄中,并且使用一個符號 聯接 “X” ,指向具體的執行程序,如XF86_VGA16或XF86_S3V等。因此直接輸 入X命令就能啟動設置好的X服務器,系統將進入圖形狀態,并出現一個可以 移動的X形鼠標指針,但并沒有其他反應。這是因為X服務器只負責處理輸入 和顯示,具體對使用者的輸入進行處理則由其他X客戶負責,而直接啟動X服 務器沒有啟動任何X客戶,因而不能處理用戶的任何輸入。

  • 手工啟動X Window

  因此為了利用圖形界面的處理能力,在啟動X服務器的同時還應該啟 動X客戶程序來負責回應用戶的輸入。這個任務可以通過shell程序startx或 xinit來作到,這兩個程序能在啟動X的同時,啟動X Window的窗口管理程序 和其他X程序。

  startx和xinit缺省查看使用者個人目錄下的.xinitrc文件,在這個 文件內應該包含啟動各個X客戶程序的命令。最簡單的.xinitrc可能只包含 一個命令來啟動一個仿真終端xterm,也可以包含一系列命令來啟動多個程 序,創建出漂亮的X環境。想自己定制X Window操作環境的使用者可以手工 創建和修改這個文件,以得到不同的用戶界面。

xmodmap -e 'keysym Alt_L = Meta_L Meta_L'
xterm &
xearth &
twm

  在這個例子中執行了 xmodmap用于修改X的鍵盤定義,然后在后台執 行xterm提供一個仿真終端,執行xearth設置X Window的背景,最后在前台執 行一個簡單的窗口管理器twm。窗口管理器被放到前台執行,這樣當退出窗口 管理器時將退出整個X服務器的執行。

  缺省情況下,用戶并沒有創建這個.xinitrc文件,這樣xinit命令就 只能啟動一個xterm終端仿真程序,而沒有執行任何其他的X程序,也沒有執 行窗口管理器。因此,直接使用xinit啟動的X Window僅僅具備一個終端窗 口,將鼠標移動到它上面之后,才能輸入命令執行其他操作。用戶如果想要 啟動窗口管理器或其他程序,必須在終端窗口中輸入相應的命令。

  由于X Window中存在多個窗口,但只有一個稱為 “焦點” 的窗口才能 接收輸入。X Window缺省使用鼠標的位置來選擇輸入焦點窗口,當然另一些窗 口管理器也可以通過鍵盤來切換輸入焦點窗口。

  但是即使不存在.xinitrc文件,使用startx也能啟動窗口管理器和几個 X客戶程序,這是由于startx發現用戶個人目錄下不存在.xinitrc文件之后,就 使用系統中的/usr/X11R6/lib/X11/xinit/xinitrc作為xinit程序的啟動文件 (startx只是調用xinit的一個shell腳本)。因此更改系統的xinitrc文件,就 能使所有沒有創建.xinitrc的用戶仍然享有啟動文件來啟動X Window系統。由 于FreeBSD是一個多用戶系統,這樣配置啟動文件就能簡化每個用戶的初始配置 任務。在用戶對X Window的了解加深之后,就能進一步配置自己的啟動文件來 定制自己使用的X Window風格。

  • XDM系統登錄方式

  startx或xinit必須先在控制台下登錄之后,輸入相應命令才能進入X Window 環境。另一種方法為預先啟動X Window系統,在X Window下登錄進系統。這種 方式是使用xdm來實現的。

  以root用戶登錄之后,在命令行輸入xdm,則系統立即啟動X服務器,并 啟動相應的登錄管理程序,在X Window上出現一個登錄窗口,允許各個用戶登 錄入系統。

  在用戶通過登錄認証之后,xdm就需要為用戶啟動登錄會話。xdm就以用 戶身份執行/usr/X11R6/lib/X11/xdm/Xsession文件,然后再執行用戶個人目錄 下的.xsession文件。個人目錄下的.xsession文件與.xinitrc文件類似,也是一 個標准shell腳本,以下是一個例子。

PATH=/usr/bin:/usr/sbin/:/usr/X11R6/bin:/usr/local/bin
xrdb -load .Xdefaults 
xterm &
xearth &
twm

  這個文件與.xinitrc文件的不同之處在于,由于.xinitrc是在用戶登錄之 后由xinit使用的,因此包括PATH在內的環境變量都已經在用戶的.profile等文件 中設置正確了,而通過xdm登錄的用戶并沒有執行.profile等設置文件,因此必須 在.xsession中設置PATH等環境變量,才能正確找到各個執行文件,否則就必須使 用絕對路徑來啟動應用程序。

  另一個不同之處在于,個人目錄下的.xsession文件必須存在,用戶才能 通過XDM正常進入X Window,否則登錄過程就會發生錯誤。而對于xinit來講,.xinitrc 不是必需的如果.xsession的執行有問題,用戶就不能從xdm的登錄界面上登錄進系 統。此時可以檢查相應用戶目錄下的.xsession-errors文件,這個文件中將包含執 行.xsession的錯誤信息。

  在FreeBSD 3.1-RELEASE中存在一個小問題,.xsession必須具備有可執行 屬性,否則就不能正確執行,這個問題在3.2-RELEASE中已經修正。可以從.xsession-errors 中的錯誤信息中來發現這個錯誤。

  先使用root登錄系統,再手工執行xdm顯然只是一個調試時的執行方式, 如果要真正使用xdm讓用戶登錄系統,應該在系統啟動時自動執行xdm,最簡單的 方法是在/usr/X11R6/etc/rc.d目錄下增加一個可執行的文件,例如命名為xdm.sh, 并使用chmod +x xdm.sh使其可以被執行,最簡單的xdm.sh可以為以下的形式:

#! /bin/sh
echo “Enter xdm”
/usr/X11R6/bin/xdm

  這樣系統將在啟動后直接啟動xdm,進入X Window并展示一個登錄界面等待 用戶登錄。xdm以一種守護進程的方式運行在后台,每次用戶退出之后會自動重新 啟動另一個登錄界面,允許用戶登錄。

  當然也可以將xdm命令放入rc.local文件中,然而使用單獨的啟動文件使得 啟動文件更為整齊、清晰。

  啟動Xdm的另一種方式是更改/etc/ttys中的設置,系統會根據ttys文件中 的配置在相應終端上啟動相應的程序,因此可以在一個空余的控制台終端上,通常 是第四個虛擬控制台ttyv3,啟動xdm。

ttyv3     "/usr/X11R6/bin/xdm -nodaemon"       xterm    on secure

  ttys中指定的進程具備再產生的特性,每個進程退出之后立即被重新執行。 因此可以不必使用xdm本身的守護進程功能,而讓系統來維護Xdm自動執行。就需要使 用-nodaemon參數,使xdm以普通進程的方式運行。

  • 遠程啟動X客戶程序:

  X Window本身的X協議支持網絡,是一種分布式的體系結構。如果使用者的 FreeBSD與其他Unix通過網絡相連接,就能在一個計算機上運行X客戶程序,而將窗 口顯示在另一個運行X服務器的計算機上。

  由于一台計算機上可以運行多個X服務器,每個服務器會支持多個顯示屏, 那么X客戶程序必須確認在計算機上的某一個服務器的某一個顯示屏上進行顯示,因 此必須包括計算機地址、X服務器序號和顯示屏號來唯一確定一個顯示資源的位置, 例如xserver:0.0,通常一台計算機中并沒有過多的X服務器,該X服務器也不具備多 個顯示屏,因此就可以對顯示資源的位置進行簡化,一般使用xserver:0的表示方式。

  這種表示方式就可以標志遠程X服務器的顯示位置,當執行X客戶程序時, 就需要在命令行上使用display選項,來告訴X客戶程序這個顯示位置的參數。

xclient $ xterm -display xserver:0&

  或者通過設置DISPLAY環境變量來達到同樣的目的。

xclient $ DISPLAY=xserver:0; export DISPLAY
xclient $ xterm &

  這兩種方法都向名為xserver的計算機上的X服務器發出了請求,但能否正 常開出窗口還必須得到這個X服務器的許可。缺省情況下X服務器具備訪問控制能力 ,標准訪問控制方法使得只有具備訪問許可的X客戶,及其子程序才能訪問X服務器 的資源,而其他X客戶程序不能使用X服務器資源。當使用者使用startx和xinit啟動 X服務器時,或者通過xdm登錄進系統時,其后啟動的X客戶程序就繼承了原有的訪問 權限。然而通過網絡啟動的X客戶程序,使用X服務器資源就受到了這個訪問控制的 限制,不能正常啟動。

  控制X服務器的訪問控制能力的命令為xhost,為了使得xserver的顯示資源 能被xclient上的X客戶程序所使用,就必須在已經具備X服務器訪問能力的X仿真終 端下執行以下指令:

xserver $ xhost xclient

  上面的xhost命令允許xclient計算機上的X客戶程序使用這個X服務器,也可 以執行使用+作為xhost的參數,這將允許任意X客戶程序訪問X服務器,因此就存在 一定的安全性問題。如果通過網絡使用X服務器的情況比較多,就可以將相應的xhost 指令放入.xinitrc或.xsession中,自動進行設置。

xserver $ rsh xclient /usr/X11R6/bin/xterm -display xserver:0
wb’s password: 

  上面是一個使用rsh在一個遠程計算機上執行X程序,而將窗口開回X服務器上 的例子,在執行這個命令之前應該執行了xhost client以打開訪問權限。

未完,待續。。。  



 
  新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(49):進入X Window


網站簡介 | 網站導航 | 廣告服務 | 中文閱讀 | 聯系方式 | 招聘信息 | 幫助信息

Copyright(C) 1999 SINA.com, Stone Rich Sight. All Rights Reserved

版權所有  四通利方 新浪網