在Linux/Unix類作業系統上, DISPLAY用來設定将圖形顯示到何處. 直接登陸圖形界面或者登陸指令行界面後使用startx啟動圖形, DISPLAY環境變量将自動設定為:0:0, 此時可以打開終端, 輸出圖形程式的名稱(比如xclock)來啟動程式, 圖形将顯示在本地視窗上, 在終端上輸入printenv檢視目前環境變量, 輸出結果中有如下内容: DISPLAY=:0.0 使用xdpyinfo可以檢視到目前顯示的更詳細的資訊. DISPLAY 環境變量格式如下hostname: displaynumber.screennumber,我們需要知道,在某些機器上,可能有多個顯示裝置共享使用同一套輸入裝置,例如在一台PC上連接配接兩台CRT顯示器,但是它們隻共享使用一個鍵盤和一個滑鼠。這一組顯示裝置就擁有一個共同的displaynumber,而這組顯示裝置中的每個單獨的裝置則擁有自己單獨的 screennumber。displaynumber和screennumber都是從零開始的數字。這樣,對于我們普通使用者來說, displaynumber、screennumber就都是0。 hostname指Xserver所在的主機主機名或者ip位址, 圖形将顯示在這一機器上, 可以是啟動了圖形界面的Linux/Unix機器, 也可以是安裝了Exceed, X-Deep/32等Windows平台運作的Xserver的Windows機器. 如果Host為空, 則表示Xserver運作于本機, 并且圖形程式(Xclient)使用unix socket方式連接配接到Xserver, 而不是TCP方式. 使用TCP方式連接配接時, displaynumber為連接配接的端口減去6000的值, 如果displaynumber為0, 則表示連接配接到6000端口; 使用unix socket方式連接配接時則表示連接配接的unix socket的路徑, 如果displaynumber為0, 則表示連接配接到/tmp/.X11-unix/X0 . screennumber則幾乎總是0. 如果使用su username或者su - username切換到别的使用者, 并且使用指令 export DISPLAY=:0.0 設定DISPLAY環境變量, 運作圖形程式(如xclock)時會收到如下錯誤: Xlib: connection to ":0.0" refused by server Xlib: No protocol specified Error: Can't open display: :0.0 這是因為Xserver預設情況下不允許别的使用者的圖形程式的圖形顯示在目前螢幕上. 如果需要别的使用者的圖形顯示在目前螢幕上, 則應以目前登陸的使用者, 也就是切換身份前的使用者執行如下指令 xhost + 這個指令将允許别的使用者啟動的圖形程式将圖形顯示在目前螢幕上. 在2台Linux機器之間, 如果設定伺服器端配置檔案/etc/ssh/sshd_config中包含 X11Forwarding no 用戶端配置檔案/etc/ssh/ssh_config包含 ForwardX11 yes 則從用戶端ssh到伺服器端後會自動設定DISPLAY環境變量, 允許在伺服器端執行的圖形程式将圖形顯示在用戶端上. 在伺服器上檢視環境變量顯示如下(這個結果不同的時候并不相同) DISPLAY=localhost:10.0 在客戶機上用netstat -lnp可以看到有程式監聽了6010端口 tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 4827/1 如果希望允許遠端機器上的圖形程式将圖形顯示在本地機器的Xserver上, 除了要設定遠端機器的DISPLAY環境變量以外, 還需要設定本地機器的Xserver監聽相應的TCP端口. 而現在的Linux系統出于安全的考慮, 預設情況下不再監聽TCP端口. 可通過修改/etc/X11/xinit/xserverrc檔案, 将 exec /usr/bin/X11/X -dpi 100 -nolisten tcp 修改為 exec /usr/bin/X11/X -dpi 100 允許在直接使用startx啟動圖形時啟動對TCP端口的監聽. 修改/etc/kde3/kdm/kdmrc, 将 ServerArgsLocal=-nolisten tcp 修改為 ServerArgsLocal= 允許kdm作為顯示管理器時, 啟動會話時監聽相應的TCP端口. 修改/etc/gdm/gdm.conf, 在[Security]一節增加 DisallowTCP=false 或者在登陸視窗選擇"Options" -> "Configure Login Manager..."的Security頁面, 取消"Deny TCP connections to Xserver", 允許gdm作為顯示管理器時, 啟動會話時監聽相應的TCP端口. ================================================================== xhost 是用來控制X server通路權限的。 通常當你從hostA登陸到hostB上運作hostB上的應用程式時, 做為應用程式來說,hostA是client,但是作為圖形來說, 是在hostA上顯示的,需要使用hostA的Xserver,是以hostA是 server.是以在登陸到hostB前,需要在hostA上運作xhost + 來使其它使用者能夠通路hostA的Xserver. xhost + 是使所有使用者都能通路Xserver. xhost + ip使ip上的使用者能夠通路Xserver. xhost + nis:[email protected]使domain上的nis使用者user能夠通路 xhost + inet:[email protected]使domain上的inet使用者能夠通路。 還有一些option,還是仔細看一下manual吧。 |