用途
通過 XDMCP 支持來管理 X 顯示器集合
語法
xdm [ -config ConfigurationFile] [ -debug DebugLevel ] [ -nodaemon ] [ -error ErrorLogFile ] [ -resources ResourceFile ] [ -server ServerEntry ] [ -udpPort PortNumber ] [ -session SessionProgram ] [ -xrm ResourceSpecification ]
描述
xdm(X Display Manager,X 顯示器管理器)命令管理 X 顯示器集合,這些顯示器可能在本地主機上,也可能在遠程伺服器上。xdm 命令設計是按照 X 終端以及 X 聯盟標準 XDMCP(X Display Manager Control Protocol,X 顯示器管理器控制協定)的要求進行的。xdm 命令提供類似於字元終端上的 init、getty 及 login 命令所提供的服務:提示輸入登錄名和密碼、認證用戶以及運行會話。
會話由特定進程的生命期定義;在傳統的基於字元的終端範疇中,會話就是用戶的登錄 shell。在 xdm 上下文中,它是任意的會話管理器。這是因為在視窗環境中,用戶的登錄 shell 進程並不需要任何類似終端的界面來進行連線。如果不能使用真正的會話管理器,那么視窗管理器或終端仿真器一般作為會話管理器使用,這就意味著終止進程就會終止用戶會話。
當會話結束時,xdm 復位 X 伺服器並(可選)重新啟動整個進程。
當 xdm 命令通過 XDMCP 方式接收 Indirect 查詢時,它可以運行 chooser 進程來為顯示器執行 XDMCP BroadcastQuery(或對指定主機的 XDMCP 查詢),並提供可能提供 XDMCP 顯示器管理的主機的選單。這種功能在本身不提供主機選單的 X 終端中非常有用。
因為 xdm 命令要提供用戶可見的第一個界面,所以它被設計為簡單易用,容易按照特定站點的需求進行定製。
典型用法
xdm 命令被設計為在多種環境中運行。
首先,請設定 xdm 配置檔案。創建一個目錄(通常為 /usr/lib/X11/xdm)以存儲所有相關檔案。下面是一個合理的配置檔案,它可以被命名為 xdm-config:
DisplayManager.servers: /usr/lib/X11/xdm/Xservers
DisplayManager.errorLogFile: /usr/lib/X11/xdm/xdm-errors
DisplayManager*resources: /usr/lib/X11/xdm/Xresources
DisplayManager*startup: /usr/lib/X11/xdm/Xstartup
DisplayManager*session: /usr/lib/X11/xdm/Xsession
DisplayManager.pidFile: /usr/lib/X11/xdm/xdm-pid
DisplayManager._0.authorize: true
DisplayManager*authorize: false
該檔案包含對其它檔案的引用。某些資源用一個 *(星號)註明,表示組件被分開。這些資源可以指定為專門用於某個顯示器,方法是用顯示器名替換 *(星號),不過通常這都沒什麼用。請參閱下一頁上的參考資料部分,那裡有完整的論述。
第一個檔案(/usr/lib/X11/xdm/Xservers)包含要管理的,而且沒有使用 XDMCP 的顯示器的列表。多數工作站只有一個顯示器,標號為 0(零),這樣檔案看起來就和下面的差不多:
:0 Local local /usr/bin/X11/X -force
這將使 /usr/bin/X11/X 一直運行在這個顯示器上,並管理一個連續運行的會話周期。
/usr/lib/X11/xdm/xdm-errors 檔案包含來自 xdm 的錯誤訊息以及由 Xsetup、Xstartup、Xsession 或 Xreset 腳本輸出到標準錯誤的任何信息。如果在啟動 xdm 命令時遇到了任何問題,請檢查 /usr/lib/X11/xdm/xdm-errors 檔案,檢查 xdm 命令是否與問題有任何關係。
下一個配置條目 /usr/lib/X11/xdm/Xresources 使用 xrdb 命令作為資源資料庫裝入到顯示器上。由於認證小視窗在啟動前讀取該資料庫,它通常會包含該小視窗的各項參數。
標誌
所有選項(除 -config 之外)指定的值都可以在配置檔案中作為資源指定。
-config ConfigurationFile 命名配置檔案,該檔案指定控制 xdm 命令行為的資源。/usr/lib/X11/xdm/xdm-config 檔案為預設值。
-debug DebugLevel 指定 DisplayManager.debugLevel 資源的數值。非零值使 xdm 在終端上列印調試語句,並禁用 DisplayManager.daemonMode 資源,強制 xdm 同步運行。這些錯誤訊息可能並不清楚。要解釋這些訊息,請查看 xdm 命令的 X11R4 原始碼。
-nodaemon 指定 DisplayManager.daemonMode 資源的值為 False。這將禁用通常的守護進程行為(在該行為中,xdm 命令關閉所有檔案描述符,解除它與控制終端的關聯,並在它第一次啟動時將其自身置於後台)。
-error ErrorLogFile 指定 DisplayManager.errorLogFile 資源的值。該檔案包含來自 xdm 的錯誤訊息,以及由會話過程中運行的各種腳本和程式寫入標準錯誤的任何信息。
-resources ResourceFile 指定 DisplayManager*resources 資源的值。該檔案使用 xrdb 命令裝入,指定認證小視窗的配置參數。
-server ServerEntry 指定 DisplayManager.servers 資源的值。請參閱伺服器規範一節,獲取對該資源的描述。
-udpPort PortNumber 指定 DisplayManager.requestPort 資源的值。它將設定 xdm 命令監控 XDMCP 請求時使用的連線埠號。XDMCP 使用已註冊的眾所周知的 UDP 連線埠 177。除非在調試時,否則請不要更改這項資源。
-session SessionProgram 指定 DisplayManager*session 資源的值。這表明在用戶登錄後作為會話運行程式。
-xrm ResourceSpecification 允許指定任意一個資源,就像在多數 X 工具箱應用程式中一樣。
資源
在很多階段中,xdm 的操作都可以通過使用其配置檔案(在 X 資源格式中)來控制。某些資源修改所有顯示器上 xdm 的行為,而其它資源只修改一個顯示器上 xdm 的行為。當操作與特定顯示器有關係時,顯示器名稱就會被插入到“DisplayManager”和最終的資源名段之間的資源名中。例如,DisplayManager.expo_0.startup 是定義“expo:0”顯示器上的啟動 shell 檔案的資源名。由於資源管理器使用冒號來分隔資源名稱和它的值,並使用點號來分隔資源名稱的各部分,所以 xdm 在生成資源名稱時會用下劃線來替換點號和冒號。
DisplayManager.servers 指定一個由伺服器項組成的檔案名稱,每項一行(如果值由斜槓開頭),或一個單獨的伺服器項。請參閱伺服器規範一節獲取詳細信息。
DisplayManager.requestPort 表明 xdm 命令用來偵聽輸入的 XDMCP 請求的 UDP 連線埠號。除非需要調試系統,否則請將這個值保留為預設的 177。
DisplayManager.errorLogFile 將錯誤訊息重定向到指定的檔案,而不是到控制台。該檔案亦包含由 Xsetup、Xstartup、 Xsession 和 Xreset 檔案定向到標準錯誤的任何輸出,所以它也將包含在這些腳本中問題的描述。
DisplayManager.debugLevel 如果該資源的整數值大於 0(零),那么 xdm 命令就會輸出大量的調試信息。它還會禁用守護進程方式,而守護進程方式將丟棄上面的信息並允許非 root 用戶運行 xdm 命令,通常這個命令都沒什麼用。
DisplayManager.daemonMode xdm 命令試圖將自己插入到一個與任何終端都無關的守護進程進程中。這是通過派生父進程並任其退出,然後關閉檔案描述符並釋放控制終端來實現的。在某些環境中,這不是我們所期望的(特別是在調試時)。可以通過將該資源設定為 False 來禁用這個功能。
DisplayManager.pidFile 創建指定的檔案名稱,從而包含 xdm 主進程的進程標識的 ASCII 表示形式。xdm 命令還使用該檔案上的檔案鎖定來試圖清除在同一台機器上運行的多個守護進程,這會產生不可預測的後果。
DisplayManager.lockPidFile 控制 xdm 命令是否使用檔案鎖定來防止多個顯示器管理器同時運行。
DisplayManager.authDir 命名一個目錄,xdm 命令會在初始化會話時在該目錄中存儲授權檔案。預設值為 /usr/lib/X11/xdm。
DisplayManager.autoRescan 布爾值,它控制會話結束而且檔案被更改後 xdm 命令是否重新掃描配置、伺服器、訪問控制和認證密鑰檔案。預設值為 True。可以向主進程傳送一個 SIGHUP 信號,強制 xdm 守護進程重新讀取這些檔案。
DisplayManager.removeDomainname 在為 XDMCP 客戶機計算顯示器名稱時,名稱解析程式一般會為終端創建一個全限定主機名。因為這有時會令人困惑,當設定了這個變數時,如果主機名的域名部分與本地主機的域名相同,xdm 命令就刪除主機名的域名部分。預設值為 True。
DisplayManager.keyFile XDM-AUTHENTICATION-1 樣式 XDMCP 認證要求在 xdm 守護進程和終端之間共享專用密鑰。該資源指定包含這些值的檔案。檔案中的每個條目都由一個顯示器名稱和共享密鑰組成。預設情況下,xdm 命令不包括對 XDM-AUTHENTICATION-1 的支持,因為它需要數據加密方法(data encryption method,DES),而由於美國出口限制的約束,DES 一般是不允許分發的。
DisplayManager.accessFile 為了防止出現未授權的 XDMCP 服務和允許 XDMCP IndirectQuery 請求的轉發,該檔案包含一個主機名的資料庫(該資料庫中的主機允許對本機器進行直接訪問),或包含一個主機列表(其內容為查詢應該轉發到的主機)。該檔案的格式在『XDMCP 訪問控制』一節中描述。
DisplayManager.exportList 一個用空白分隔的附加環境變數的列表,將傳輸到 Xsetup、Xstartup、Xsession 和 Xreset 程式。
DisplayManager.randomFile 一個將進行校驗和的檔案,生成授權密鑰的種子值。該檔案應當是經常更改的檔案。預設值為 /dev/mem。
DisplayManager.choiceTimeout 用戶從選擇器選擇了主機後要等待顯示器回響的秒數。如果顯示器在此期間傳送一條 XDMCP IndirectQuery 訊息,那么請求就會被轉發到所選擇的主機。否則,就會假定它來自新的會話並再次提供選擇器。預設值為 15。
DisplayManager.DISPLAY.resources 指定 xrdb 命令要裝入的檔案的名稱作為顯示器的螢幕 0 根視窗上的資源資料庫。登錄小視窗 Xsetup 和 chooser 程式使用該檔案中設定的資源。該資源資料庫剛好在認證過程開始前裝入,所以它能夠控制登錄視窗的外觀。請參閱認證客戶機一節,其中描述了適合放在該檔案中的各種資源。對該資源來說沒有預設值,不過通常都用 /usr/lib/X11/xdm/Xresources 作為名稱。
DisplayManager.DISPLAY.chooser 指定程式運行以提供一個主機選單,包含重定向到特殊的主機名 CHOOSER 的間接查詢。/usr/lib/X11/xdm/chooser 為預設值。請參閱『XDMCP 控制訪問』和『選擇器』一節。
DisplayManager.DISPLAY.xrdb 指定用於裝入資源的程式。預設情況下,xdm 命令使用 /usr/bin/X11/xrdb。
DisplayManager.DISPLAY.cpp 指定由 xrdb 命令使用的 C 預處理器的名稱。
DisplayManager.DISPLAY.setup 指定提供登錄視窗前運行(作為 root 用戶)的程式。該資源可以用於更改登錄視窗周圍的螢幕外觀,或打開其它視窗(例如,在這裡可能希望運行 xconsole)。預設情況下不運行任何程式。在這裡使用的檔案名稱一般為 Xsetup。請參閱設定程式一節。
DisplayManager.DISPLAY.startup 指定在認證過程成功後運行(作為 root 用戶)的程式。預設情況下不運行任何程式。這裡使用的檔案名稱一般為 Xstartup。請參閱啟動程式一節。
DisplayManager.DISPLAY.session 指定要運行的會話(在不作為 root 用戶運行時)。預設情況下將運行 /usr/bin/X11/xterm。名稱一般為 Xsession 腳本。請參閱會話程式一節。
DisplayManager.DISPLAY.reset 指定在會話結束後運行(作為 root 用戶)的程式。預設情況下不運行任何程式。名稱一般為 Xreset 腳本。請參閱重新設定程式一節。
DisplayManager.DISPLAY.openDelay 通過指定連續兩個請求之間相隔的時間長度(按秒計算),在試圖打開非讓步伺服器時控制 xdm 命令的行為。
DisplayManager.DISPLAY.openRepeat 通過指定要發出請求的次數,在試圖打開非讓步伺服器時控制 xdm 命令的行為。
DisplayManager.DISPLAY.openTimeout 通過指定在真正請求打開時要等待的秒數(即 connect(2) 系統調用占用的最長時間),在試圖打開非讓步伺服器時控制 xdm 命令的行為。
DisplayManager.DISPLAY.startAttempts 通過指定在放棄訪問伺服器之前整個過程要完成的次數,在試圖打開非讓步伺服器時控制 xdm 命令的行為。在設定顯示器管理器 openRepeat 資源指定的嘗試次數後,或者如果顯示器管理器 openTimeout 資源指定的秒數在任何特定的請求中耗盡,xdm 命令就會結束並重新啟動伺服器,試圖重新連線。該過程會重複 startAttempts 次,直到顯示器被聲明為非活動或被禁用。儘管這種行為看起來可能具有任意性,但人們對它的開發已經頗具經驗,而它對多數系統也非常適用。預設情況下,openDelay 值為 5、openRepeat 值為 5、openTimeout 值為 30、startAttempts 值為 4。
DisplayManager.DISPLAY.pingInterval 要了解遠程顯示器何時消失,可以使用 xdm 命令定期地 ping 它們,方法是使用 X 連線和 XSync 調用。該資源指定兩次嘗試 ping 之間的時間(按分鐘計)。預設情況下,它的設定為 5 分鐘。如果頻繁地使用 X 終端,而這些終端可能會變為與管理主機分離,則可以增加這個值。
注:
在終端被意外地禁用之後,AIXwindows會話可能會繼續存在。xdm 命令不 ping 本地顯示器。如果伺服器為 NFS 服務掛起而且不回響 ping 操作,那么工作站會話可能會結束。
DisplayManager.DISPLAY.pingTimeout 要了解遠程顯示器何時消失,可以使用 xdm 命令定期地 ping 它們,方法是使用 X 連線和 XSync 調用。該資源指定等待終端對請求作出回響的最長時間(按分鐘計)。如果終端不回響,那么會話就會被聲明為不活動的並結束。預設情況下,它的設定為 5 分鐘。如果頻繁地使用 X 終端,而這些終端可能會變為與管理主機分離,則可以增加這個值。
注:
在終端被意外地禁用之後,AIXwindows會話可能會繼續存在。xdm 命令不 ping 本地顯示器。如果伺服器為 NFS 服務掛起而且不回響 ping 操作,那么工作站會話可能會結束。
DisplayManager.DISPLAY.terminateServer 指定在會話結束後是否應該取消 X 伺服器(而不是重新設定它)。如果伺服器可能會隨著時間變化持續增長而無約束,該選項可以用於限制伺服器運行的時間。預設值為 False。
DisplayManager.DISPLAY.userPath xdm 命令將會話的 PATH 環境變數設定為該值。它應該為一個由冒號分隔的目錄列表;請參閱《AIX 5L V5.2 命令參考大全》中的 sh 命令,了解完整的描述。:/bin:/usr/bin:/usr/bin/X11:/usr/ucb 是常用的設定。可以在構建時在AIXwindows系統配置檔案中用 DefaultUserPath 資源指定預設值。
DisplayManager.DISPLAY.systemPath xdm 命令會將啟動及重新設定腳本的 PATH 環境變數設定為該資源的值。可以在構建時用系統配置檔案中的 DefaultSystemPath 資源條目來指定該資源的預設值;通常可以選擇使用 /etc:/bin:/usr/bin:/usr/bin/X11:/usr/ucb。注意:該條目中省略了 .(句號)(當前目錄)。這對於 root 用戶來說是一個很好的做法;它可以避免很多常見的“特洛伊木馬(Trojan Horse)”系統侵入方式。
DisplayManager.DISPLAY.systemShell xdm 命令會將啟動及重新設定腳本的 SHELL 環境變數設定為該資源的值。預設值為 /bin/sh。
DisplayManager.DISPLAY.failsafeClient 如果預設會話沒有能夠運行,xdm 命令將返回到該程式。該程式的運行不需要參數,它使用會話可能使用的相同環境變數(請參閱『會話程式』一節)。預設情況下將使用 /usr/bin/X11/xterm。
DisplayManager.DISPLAY.grabServer
DisplayManager.DISPLAY.grabTimeout
為了加強安全性,xdm 命令在讀取登錄名和密碼時將抓取伺服器和鍵盤。grabServer 資源將指定伺服器在讀取名稱/密碼的持續時間內是否應該被控制。如果設定為 False,那么在成功地獲得鍵盤訪問權後就會放棄伺服器訪問權,否則伺服器訪問權直到會話開始前才會被放棄。預設值為 False。grabTimeout 資源指定 xdm 命令在訪問權成功獲取前要等待的最長時間。如果某個其它的客戶機獲取了伺服器的訪問權,抓取就會失敗,這也可能歸咎於網路延遲太嚴重。該資源的預設值為 3 秒;提高該值時要非常小心,因為用戶在顯示器看到一個類似的視窗時可能會非常迷惑。如果獲取訪問權失敗,xdm 命令就會變為不活動的,並重新啟動伺服器(如果可能)和會話。
DisplayManager.DISPLAY.authorize
DisplayManager.DISPLAY.authName
authorize 是一個布爾資源,它控制 xdm 命令是否為本地伺服器連線生成並使用授權。如果使用了授權,那么 xdm 命令就使用由空白分隔的列表表明的授權機製作為 authName 資源的值。XDMCP 連線動態地指定支持哪種授權機制,所以在這種情況下 authName 資源會被忽略。如果 authorize 資源被設定給一個顯示器,而授權不可用,那么用戶就會看到 Login 小視窗中顯示另一條訊息。預設情況下,authorize 資源為 True;authName 為 MIT-MAGIC-COOKIE-1。
DisplayManager.DISPLAY.authFile 表明檔案是用於將來自 xdm 命令的授權數據傳輸到伺服器(使用 -auth 伺服器命令行選項)。應該將其保存在一個目錄中並限制寫訪問權(因為它可以被輕易地刪除),結果就會禁用伺服器中的授權機制。
DisplayManager.DISPLAY.authComplain 如果該值設定為 False,就會禁用登錄視窗中的 unsecureGreeting。請參閱認證客戶機一節。預設值為 True。
DisplayManager.DISPLAY.resetSignal xdm 命令為使伺服器復位而傳送的信號數。請參閱控制伺服器一節。預設值為 1(SIGHUP)。
DisplayManager.DISPLAY.termSignal xdm 命令為結束伺服器而傳送的信號數。請參閱控制伺服器一節。預設值為 15(SIGTERM)。
DisplayManager.DISPLAY.resetForAuth 使 xdm 命令在設定了授權檔案後傳送 SIGHUP 到伺服器,這樣會在讀取新的授權信息期間發生另一次伺服器復位。預設值為 False,這對所有 AIXwindows 伺服器都適用。
DisplayManager.DISPLAY.userAuthDir 當 xdm 命令不能對通常的用戶授權檔案($HOME/.Xauthority)進行寫操作時,它會在該目錄中創建一個唯一的檔案名稱並將 XAUTHORITY 環境變數設定為所創建的檔案的名稱。它的預設值為 /tmp。
XDMCP 訪問控制
由 DisplayManager.accessFile 資源指定的資料庫檔案提供 xdm 命令用來控制來自請求 XDMCP 服務的顯示器的訪問。該檔案包含三種類型的條目:
* 控制對 Direct 以及 Broadcast 查詢的回響的條目。
* 控制對Indirect 查詢的回響的條目。
* 宏定義。
Direct 查詢條目包含一個主機名或模式(它通過包含一個或多個模式匹配字元,從而與主機名區分開來)。*(星號)匹配 0(零)或多個字元的任何序列,而 ?(問號)匹配任何單個字元。這些字元與顯示器設備的主機名進行對比。如果條目為主機名,那么所有比較都是使用網路地址進行的,以便可以使用任何轉換為正確的網路地址的名稱。至於模式,在比較中只使用真正的主機名,所以確保不要去匹配別名。如果在主機名或模式前面加上了 !(感嘆號)會導致與條目匹配的主機被排除在外。
Indirect 條目也包含主機名或模式,不過其後跟有一個主機名或宏的列表,indirect 查詢應當傳送到這個列表。
宏定義包含一個宏名稱、主機名列表以及該宏擴展到的其它宏。為了區別宏和主機名,宏名稱前以 %(百分號)字元開頭。宏可以嵌套。
Indirect 條目也可以指定為讓 xdm 命令運行 chooser 命令來提供要連線的主機的選單。請參閱下一頁的選擇器一節。
在檢查特定顯示器主機的訪問時,每個條目都要被依次掃描,第一個匹配的條目確定回響。例如,Direct 查詢條目在掃描尋找 Indirect 條目時會被忽略。Broadcast 查詢條目在掃描尋找 Direct 條目時會被忽略。
空行將被忽略。# 字元作為注釋定界符,該行的剩餘部分將會被忽略,行末的 \ (反斜槓) 將使其後的換行符被忽略,這使得間接主機列表可以跨越多行。
下面是一個示例 Xaccess 檔案:
#
# Xaccess - XDMCP access control file
#
#
# Direct/Broadcast query entries
#
!xtra.lcs.mit. edu # disallow direct/broadcast service for xtra
bambi.ogi. edu # allow access from this particular display
*.lcs.mit. edu # allow access from any display in LCS
#
# Indirect query entries
#
%HOSTS expo.lcs.mit. edu xenon.lcs.mit. edu \\
excess.lcs.mit. edu kanga.lcs.mit. edu
extract.lcs.mit. edu xenon.lcs.mit. edu #force extract to contact xenon
!xtra.lcs.mit. edu dummy #disallow indirect access
*.lcs.mit. edu %HOSTS #all others get to choose
選擇器
對於不提供主機選單以使用 Broadcast 或 Indirect 查詢的 X 終端來講,chooser 程式可以為它們實現這一點。在 Xaccess 檔案中,請指定 CHOOSER 作為 Indirect 主機列表中第一個條目。chooser 程式傳送一條 Query 請求到列表中的每個剩餘的主機名,並提供一個包含所有回響該請求主機的選單。
該列表可以包含 BROADCAST 一詞,這樣 chooser 就可以改為傳送 Broadcast 查詢,也可再次提供所有回響請求的主機的選單。
下面是一個使用 chooser 的示例 Xaccess 檔案:
extract.lcs.mit. edu CHOOSER %HOSTS #offer a menu of these hosts
xtra.lcs.mit. edu CHOOSER BROADCAST #offer a menu of all hosts
chooser 使用的程式由 DisplayManager.DISPLAY.chooser 資源指定。該程式的資源可以放在由 DisplayManager.DISPLAY.resources 資源命名的檔案中。
chooser 使用 Motif SelectionBoxWidget 實現。請參閱 XmSelectionBoxWidget Class 文檔,獲取對資源和小視窗或配件名稱的描述。
伺服器規範
DisplayManager.servers 資源提供一份伺服器規範,如果值以 /(斜槓)開頭,則提供一個包含伺服器規範(每行一個)的檔案的名稱。
每個規範表明一個應該一直受管而且不使用 XDMCP 的顯示器。每個規範至少由三部分組成:
* 顯示器名稱
* 顯示類
* 顯示器類型
* 對於本地伺服器來說,用於啟動伺服器的命令行。
0 號本地顯示器的典型條目為:
:0 IBM-GT local /usr/bin/X11/X :0
顯示器類型為:
local 本地顯示器:\fIxdm\fP 必須運行伺服器
foreign 遠程顯示器:\fIxdm\fP 對運行的伺服器打開一個 X 連線
顯示器名稱必須是可以在 -display 選項中傳輸到 X 程式的名稱。該字元串用於生成特定於顯示器的資源名稱,所以在匹配名稱時要注意(例如,如果其它資源被指定為“DisplayManager._0.session”,則使用“:0 local /usr/bin/X11/X :0”,而不是“`localhost:0 local /usr/bin/X11/X :0”。顯示器類部分還用於特定於顯示器的資源中作為資源的類。如果集合了很多的類似顯示器(如一個 X 終端聚集),而且希望為這些顯示器組設定資源,這非常有用。在使用 XDMCP 時,需要為顯示器指定顯示器類,因此,特定 X 終端的手冊應該記錄設備的顯示器類字元串。如果沒有,可以在調試方式中運行 xdm 命令,然後尋找它為該設備生成的資源字元串,其中將包括類字元串。
設定程式
Xsetup 檔案在伺服器復位後、但在登錄視窗出現之前運行。該檔案通常為 shell 腳本。它是作為 root 用戶運行的,所以要注意安全性。這是修改 root 用戶後台或激活應該在螢幕上與 Login 小視窗一同顯示的其它視窗的地方。由於 xdm 占用了鍵盤的訪問權,其它視窗將不能接收鍵盤輸入。不過,它們可以使用滑鼠進行互動;在這裡要注意可能存在的安全性漏洞。如果設定了 DisplayManager.DISPLAY.grabServer,Xsetup 將根本無法連線到顯示器。該程式的資源可以放在 DisplayManager.DISPLAY.resources 指定的檔案中。
除了由 DisplayManager.exportList 指定的任何變數,還可以傳輸下列環境變數:
DISPLAY 指定相關的顯示器名稱。
PATH 指定 DisplayManager.DISPLAY.systemPath 的值。
SHELL 指定 DisplayManager.DISPLAY.systemShell 的值。
XAUTHORITY 指定它可以設定為一個許可權檔案。
認證客戶機
MIT 認證小視窗已經被一個由標準的 Motif 視窗組成的認證客戶機取代。下面是一個小視窗名(及其小視窗類)的列表:
outframe(xmFrameWidget)
inframe(xmFrameWidget)
inframe(xmFrameWidget)
main(XmFormWidget)
tframe(xmFrameWidget)
greeting(xmLabelGadget)
logoline(xmFormWidget)
dpyname(xmLabelWidget)
userline(xmRowColumnWidget)
userlabel(xmLabelWidget)
username(xmTextWidget)
passlabel(xmLabelWidget)
password(xmTextWidget)
failsafeline(xmFormWidget)
failsafe(xmToggleButtonWidget)
cancelline(xmFormWidget)
cancel(xmPushButtonWidget)
message(xmLabelWidget)
認證客戶機從鍵盤讀取名稱/密碼對。將該客戶機的資源放在 DisplayManager.DISPLAY.resources 指定的檔案中。這些都具有合理的預設值,所以沒有必要指定它們中的任何一個。請查看 /usr/lib/X11/xdm/Xresources 以了解關於認證客戶機資源的預設值以及合適的小視窗類文檔的更多信息。認證客戶機還支持下列資源:
Xlogin*foreground 指定前景使用的顏色。
Xlogin*background 指定背景使用的顏色。
Xlogin*greeting 指定標識該視窗的字元串。預設值為 AIXwindows 環境。
Xlogin*greetFont 指定用於顯示歡迎信息的字型。
Xlogin*frameColor 指定用於顯示歡迎信息的背景顏色。
Xlogin*titleMessage 指定標題中顯示的字元串。預設值為運行認證客戶機的機器的主機名。
Xlogin*titleFont 指定用於顯示標題的字型。
Xlogin*namePrompt 指定在提示輸入用戶名時顯示的字元串。Xrdb 程式將從資源值刪去尾部的空白。請在提示符後用轉義的反斜槓添加空格。預設值為“login:”。
Xlogin*passwdPrompt 指定提示輸入密碼時顯示的字元串。預設值為“password:”。
Xlogin*promptFont 指定用於顯示兩種提示符的字型。
Xlogin*failPrompt 指定用於錯誤處理(failsafe)按鈕的標籤。
Xlogin*failFont 指定用於錯誤處理按鈕的字型。
Xlogin*cancelPrompt 指定用於取消按鈕的標籤。
Xlogin*cancelFont 指定用於取消按鈕的字型。
Xlogin*fail 指定表明認證失敗時顯示的訊息。預設值為“Login was incorrect.”。
Xlogin*messageFontlist 指定用於顯示失敗訊息的字型。
Xlogin*failColor 指定用於顯示失敗訊息的顏色。
Xlogin*failTimeout 指定失敗訊息顯示的秒數。預設值為三十秒。
Xlogin*sessionArgument 指定傳輸到會話程式的自變數。
Xlogin*XmText.translations 它將指定認證客戶機所使用的轉換。請參閱 X Toolkit 文檔,獲取關於轉換的完整論述。預設的轉換表為:
Ctrl<Key>b: backward-character()\n\
Ctrl<Key>a: beginning-of-line()\n\
Ctrl<Key>e: end-of-line()\n\
Ctrl<Key>f: forward-character()\n\
Ctrl<Key>d: kill-next-character()\n\
Ctrl<Key>k: kill-to-end-of-line()\n\
Ctrl<Key>u: kill-to-start-of-line()\n
可以通過按 Xresources 中所定義方式替換 XmText 轉換,將 XDM 設定為使用標準的 XDM 轉換:
注:
由於 Motif 的預設虛擬綁定的緣故,請使用 <Key>osfHelp,而不是 <Key>F1。
Xlogin*XmText.translations: #override\n\
<Key>osfHelp: set-session-argument(failsafe) finish-field()\n\
Ctrl<Key>Return: set-session-argument(failsafe) finish-field()\n\
Ctrl<Key>H: delete-previous-character() \n\
Ctrl<Key>D: delete-character() \n\
Ctrl<Key>B: move-backward-character() \n\
Ctrl<Key>F: move-forward-character() \n\
Ctrl<Key>A: move-to-beginning() \n\
Ctrl<Key>E: move-to-end() \n\
Ctrl<Key>K: erase-to-end-of-line() \n\
Ctrl<Key>U: erase-line() \n\
Ctrl<Key>X: erase-line() \n\
<Key>Return: finish-field() \n
<Key>BackSpace: delete-previous-character() \n\
<Key>Delete: delete-previous-character() \n
除了典型的 XmText 操作之外,客戶機還支持下列操作,以便與標準的 XDM 轉換兼容:
delete-previous-character
刪除游標前的字元。
delete-character
刪除游標後的字元。
move-backward-character
將游標向後移動。
move-forward-character
將游標向前移動。
move-to-beginning
將游標移動到可編輯的文本的最前面。
move-to-end
將游標移動到可編輯的文本的最後面。
erase-to-end-of-line
刪除游標後的所有文本。
erase-line
刪除所有文本。
finish-field
如果游標在名稱欄位,繼續轉到密碼欄位;如果游標在密碼欄位,則檢查當前的名稱/密碼對。如果名稱/密碼對有效,xdm 就啟動會話。否則就會顯示失敗訊息,並再次提示用戶。
insert-char
插入鍵入的字元。
set-session-argument
指定啟動時傳輸到會話的單一單詞參數。請參閱『會話程式』和『典型用法』節。
啟動程式
Xstartup 檔案通常為一個 shell 腳本。因為它是作為 root 用戶運行的,所以在它運行時要注意安全性。它通常包含一些命令,用於向 /etc/utmp 添加條目、從檔案伺服器安裝用戶的主目錄、顯示當天訊息或在不允許登錄時取消會話。
除了由 DisplayManager.exportList 指定的環境變數,還要傳輸下列變數:
DISPLAY 指定相關的顯示名稱。
HOME 指定用戶初始工作目錄。
USER 指定用戶名。
PATH 指定 DisplayManager.DISPLAY.systemPath 的值。
SHELL 指定 DisplayManager.DISPLAY.systemShell 的值。
XAUTHORITY 可以設定為一個許可權檔案。
沒有自變數被傳輸到腳本中。xdm 命令在啟動用戶會話之前一直等待,直到該腳本退出。如果該腳本的出口值為非零值,那么 xdm 命令中斷會話並啟動另一個認證周期。
會話程式
Xsession 程式建立用戶會話的風格。它使用授權用戶的許可權來運行。
除了由 DisplayManager.exportList 指定的任何變數,還可以傳輸下列環境變數:
DISPLAY 指定相關的顯示名稱。
HOME 指定用戶初始工作目錄。
USER 指定用戶名。
PATH 指定 DisplayManager.DISPLAY.userPath 的值。
SHELL 指定用戶的預設 shell(從 getpwnam)。
XAUTHORITY 可以設定為一個非標準的許可權檔案。
在多數安裝中,Xsession 程式應該在用戶的主目錄($HOME)中查找 .xsession 檔案,它包含用戶可能希望作為會話使用的命令。如果不存在用戶指定的會話,Xsession 程式還應該實現一個系統預設會話。請參閱典型用法一節。
可以使用“set-session-argument”操作將自變數從認證小視窗傳輸到本程式。這可以用來選擇會話的不同風格。通常,該功能用來在會話失敗時讓用戶從普通的會話中脫離開來。這使得用戶在失敗時能夠修復自己的 .xsession,而不需要管理員干涉。典型用法一節演示了本功能。
重新設定程式
Xreset 腳本在用戶會話結束後運行。它作為 root 用戶運行,應該包含一些命令用以撤銷 Xstartup 中的命令的作用,方法是從 /etc/utmp 中除去條目或從檔案伺服器卸裝目錄。傳輸到 Xstartup 的環境變數也會被傳輸到 Xreset。該程式與 Xstartup 程式是對稱的。
控制伺服器
xdm 命令使用 POSIX 信號控制本地伺服器。SIGHUP 信號用來將伺服器復位、關閉所有的客戶機連線並執行其它的清理任務。SIGTERM 信號應該會取消伺服器。如果這些信號沒有執行預期的操作,DisplayManager.DISPLAY.resetSignal 和 DisplayManager.DISPLAY.termSignal 資源可以指定備用的信號。
要控制不使用 XDMCP 的遠程終端,xdm 命令將搜尋顯示器上的視窗層次結構,並使用協定請求 KillClient 試圖清理下一個會話的終端。這可能不會真正使所有客戶機處於非活動狀態,因為只有那些曾經創建了視窗的客戶機才會被注意到。XDMCP 提供了一種更有保證的機制;當 xdm 命令關閉其初始連線時,會話結束,且終端被要求關閉所有其它連線。
控制 XDM
xdm 命令對兩種信號作出回響:SIGHUP 和 SIGTERM。當傳送 SIGHUP 之後,xdm 重新讀取配置檔案、訪問控制檔案以及伺服器檔案。對於伺服器檔案,它會查看是否添加或除去了條目。如果添加了新條目,xdm 命令就會在相關的顯示器上啟動一個會話。被除去的條目會立即禁用,這意味著正在進行的任何會話都會被結束而不會得到通知,而且不會啟動新的會話。
當傳送 SIGTERM 之後,xdm 命令將停止正在進行的所有會話並退出。這可以用在關閉系統的時候。
xdm 命令試圖示記各種由 ps 命令《AIX 5L V5.2 命令參考大全》使用的子進程,方法是編輯已有的命令行自變數列表。由於 xdm 命令不能為這項任務分配額外的空間,所以用一個適當的長命令行(使用全路徑名應該就足夠了)來啟動 xdm 命令非常有用。每個供顯示使用的進程都會被標記為 -display。
其它可能性
可以使用 xdm 命令每次運行一個會話,方法是通過在命令行指定伺服器來使用 xinit 命令選項或其它合適的守護進程:
xdm -server ":0 local /usr/bin/X11/X :0 -force"
也可以運行一個檔案伺服器和一組 X 終端。它的配置與前面樣本中的一樣,只是 Xservers 檔案應該類似於下面的內容:
extol:0 VISUAL-19 foreign
exalt:0 NCD-19 foreign
explode:0 NCR-TOWERVIEW3000 foreign
這將使 xdm 命令管理所有這三個終端上的會話。請參閱控制 XDM一節,獲取如何使用信號來啟用或禁用這些終端的描述。
注:
xdm 命令與其它視窗系統不能很好地共存。要在相同的硬體上使用多視窗系統,請使用 xinit 命令。
示例
1. 下面的 xstartup 樣本腳本在檔案 /etc/nologin 存在時防止進行登錄。由於沒有規定要在這裡顯示任何訊息(沒有顯示檔案的核心 X 客 戶機),我們不推薦使用本示例中的設定,因為登錄可能會失敗而不作任何解釋。因此,這不是一個完整的示例,而是一個關於可用的功能的演示。
#!/bin/sh
#
# Xstartup
#
# This program is run as root after the user is verified
#
if [ \-f /etc/nologin ]; then
exit 1
fi
exit 0
2. 這個 Xsession 腳本識別前面的 Xresources 檔案中的轉換所指定的特殊的 failsafe(錯誤處理)方式,從而從一般的會話中脫離出來。
#!/bin/sh
exec > $HOME/.xsession-errors 2>&1
case $# in
1)
case $1 in failsafe)
exec aixterm -geometry 80x24-0-0
;;
esac
esac
startup=$HOME/.xsession
resources=$HOME/.Xresources
if [ -f /usr/bin/X11/startx ]; then
exec /usr/bin/X11/startx -t -wait
elif [ -f $startup]; then
exec $startup
else
if [ -f $resources ]; then
xrdb -load $resources
fi
mwm &
exec aixterm -geometry 80x24+10+10 -ls
fi
3. 要讓 xdm 在系統啟動時運行,以 root 用戶的身份輸入以下命令:
/usr/lib/X11/xdm/xdmconf
4. 要在重新引導時禁用 xdm,以 root 用戶身份輸入以下命令:
/usr/lib/X11/xdm/xdmconf -d
5. 在使用 xdm 管理顯示器時,認證過程保證只有被允許的客戶機才能連線到顯示器。使用 X11 R4 和 X11 R5 庫構建的客戶機能夠理解該協定。使用 X11 R3 或更早的庫構建的客戶機不支持這種認證協定,且不允許連線到 Xserver,除非已授予 xhost 許可權。可以輸入以下命令來連線本地客戶機:
xhost =localhost
或
xhost =machine
其中 machine 是本地客戶機的主機名。
檔案
/usr/lib/X11/xdm/xdm-config 預設的配置檔案。
/usr/lib/X11/xdm/Xaccess 預設的訪問檔案,列出已授權的顯示。
/usr/lib/X11/xdm/Xservers 預設的伺服器檔案,列出了要管理的非 XDMCP 伺服器。
$(HOME)/.Xauthority 用戶授權檔案,其中 xdm 存儲客戶機要讀取的密鑰。
/usr/lib/X11/xdm/chooser 預設的選擇器。
/usr/bin/X11/xrdb 預設的資源資料庫裝入程式。
/usr/bin/X11/X 預設的伺服器。
/usr/bin/X11/xterm 預設的會話程式和錯誤處理客戶機。
/usr/lib/X11/xdm/A<host>\-<suffix> 存儲授權檔案的預設位置。
XQuery數據模型
英文原文: XQuery Data Model