linux DISPLAY 環境變數

2021-06-16 03:53:51 字數 4866 閱讀 5825

linux下新手基本操作及技巧看圖上路

您總是可以通過登出當前使用者標識,然後以新的使用者標識登入來切換到另乙個使用者標識。但是如果您只需要以另乙個使用者身份執行幾個快捷的命令,那要怎麼 辦呢? linux 以 su(替代使用者,substitute user)命令的形式向您提供了解決方案,該命令允許您暫時以另乙個使用者身份執行命令。這經常用於需要 root 訪問權的任務。實際上,如果您使用終端程式(如 telnet)遠端連線乙個系統,那麼許多 linux 發行版本會阻止您以 root 使用者身份登入。這是良好的安全性做法,我們建議您不要嘗試繞開這種限制。相反,您應該以非特權使用者身份登入,然後使用 su 命令成為 root。

那麼,讓我們假定您已經登入並正在使用終端視窗,而且您不是 root 使用者,但需要以 root 使用者身份執行一條命令。用於這種情形的兩種最常見的su形式是:

su

su -

清單 3. 切換到 root 使用者

ian3@echidna:~> su

password:

echidna:/home/ian3 #pwd

/home/ian3

ian3@echidna:~> su -

password:

echidna:~ # pwd

/root

您會注意到必須提供口令以切換到 root 使用者,這一點都不足為奇。您還可以使用su命令切換到其他非 root 使用者。例如:

su - db2inst1
如果您已經是 root 使用者,則無需提供口令,但如果您不是 root 使用者,那麼必須提供正確的口令。

如果您正在使用 bash shell(它是大多數 linux 系統上的預設 shell),要返回前乙個標識,只要按ctrl-d或輸入exit並按enter

以另乙個使用者身份使用 gui 應用程式

您可能注意到了,我們在 前一節 中討論su命令時,只執行了在終端視窗中顯示輸出的命令。要能夠執行 gui 應用程式,您可能必須採取一些額外的步驟,具體步驟因 linux 發行版本而異。 linux 上的 gui 應用程式使用 x window 系統(x window system),它旨在允許多個使用者使用視窗化的應用程式通過網路訪問計算機。

x 顯示器是通過 hostname:displaynumber.screennumber 這種形式的名稱知曉的。執行在工作站(如 pc)上的 linux 通常只有乙個帶有單個螢幕的顯示器。在這種情況下,displayname 可以(並且通常會)被省略,所以顯示器稱為 :0.0。我們假設您在閱讀本文時是使用圖形方式登入的,因此您的啟動已經為您設定了display環境變數。但是,當您使用su切換到不同使用者時,不會設定這個變數。清單 4 展示了如何使用echo命令來顯示 display 環境變數,然後切換到另乙個使用者並嘗試啟動 xclock 應用程式,最初 display 環境變數是空的,然後將其值設定為 :0.0。這是 suse sles9 系統中的示例。在 red hat 系統上有所不同,後面我們將會提到。

清單 4. 嘗試啟動 xclock

ian@lyrebird:~> whoami

ianian@lyrebird:~> echo $display

:0.0

ian@lyrebird:~> su -

password:

lyrebird:~ # echo $display

lyrebird:~ # xclock

error: can't open display:

lyrebird:~ # export display=:0.0

lyrebird:~ # echo $display

:0.0

lyrebird:~ # xclock

xlib: connection to ":0.0" refused by server

xlib: no protocol specified

error: can't open display: :0.0

lyrebird:~ # export xauthority=~ian/.xauthority

lyrebird:~ # xclock

lyrebird:~ # ls -l ~ian/.xauthority

-rw------- 1 ian users 206 feb 18 16:20 /home/ian/.xauthority

讓我們研究一下這裡發生的情況。在本例中,使用者 ian 登入到系統,並且正如我們所期望的那樣,其display環境變數被設定為 :0.0。當 ian 切換成使用者 root 時,不會去設定display環境變數,並且因為xclock應用程式不能開啟顯示器,所以啟動 xclock 的嘗試失敗了。

因此,替代使用者 root 設定了display環境變數,並將它匯出,以便它可用於可能從該終端視窗啟動的其他 shell。請注意,設定和匯出環境變數時不使用 $ 字首符號,但顯示和用其他方法使用該值時則使用 $ 作為字首。也要注意,如果su命令省略了 -(減號)符號,那麼display環境就已經如使用者 ian 那樣被設定。可是,即使設定了環境變數,但xclock啟動還是失敗了。

第二次失敗的原因在於 x 的客戶機/伺服器本質。儘管 root 執行在該系統惟一乙個顯示器上的視窗中,但該顯示器實際上由最初登入的使用者(在本例中是 ian)所擁有。對於 linux 系統中的本地顯示器,認證通常是依賴於所謂的mit-magic-cookie-1,每次 x 伺服器重新啟動時它都會重新生成。使用者可以從他的(或她的)目錄中的 .xauthority 將 magic cookie 匯出 (使用xauth extract命令),並把它提供給另乙個使用者,那個使用者可以使用xauth merge將其 融合 到自己的 .xauthority 檔案。作為另一種選擇,使用者可以通過xhost +local:命令來授權其他使用者對本地系統的訪問。

有另乙個可選方法,即將 xauthority 環境變數設定為包含正確 mit-magic-cookie-1 的檔案的位置。當切換到 root 時,這樣做很容易,因為 root 可以讀取其他使用者所擁有的檔案。實際上,在清單 4 中我們就是這樣做的,所以,在設定並將 xauthority 匯出到 ~ian/.xauthority 檔案後,root 現在就可以在桌面上開啟圖形視窗。我們說過將會提及 red hat 系統的不同之處,那就是在 red hat 系統上使用 su 切換到 root 與 suse 系統稍有不同,它會為您自動完成顯示器的設定。

那麼,如果是切換到另乙個非 root 使用者時會怎樣呢?在清單 4 中,您會注意到,使用者 ian 的 .xauthority 檔案只允許所有者進行讀寫訪問。甚至是同組的成員也不能讀取它,這正是您所希望的,除非您樂意讓某人開啟乙個接管您的螢幕並禁止您做任務事情的應用程式! 所以,如果您從 .xauthority 檔案中匯出了乙個 mit-magic-cookie-1,那麼必須要找到某個安全的方式來將它交給您信任的非 root 使用者。由於這方面的困難,您可能會發現,對單使用者的 linux 系統來說,xhost 更好用,儘管 xauth 方法通常比 xhost 命令用得更多。不過,要謹記 x windows 系統的網路傳統,以便您不會偶然地授予他人不在計畫之內的許可權,從而開放您的系統,讓任意網路使用者都可以在您的桌面上開啟視窗。

使用者 ian 可以使用xhost來賦與所有本地使用者在顯示器(:0.0)上開啟應用程式的許可權。在您的桌面上開啟另乙個終端視窗並輸入這條命令:

xhost +local:
請注意末尾的冒號(:)。這樣將允許同一系統上的其他使用者連線到 x 伺服器並開啟視窗。由於您使用的是乙個單使用者系統,這就意味著您可以 su 到乙個任意的非 root 使用者,而且現在可以啟動xclock或其他 x 應用程式了。

有關使用xauthxhost命令的更多詳細資訊,可以根據需要使用命令info xauthman xauthinfo xhost或者man xhost來檢視聯機手冊頁。如果您對 x 連線的安全**興趣,可以從 xsecure 的手冊頁入手。

p.s.

~/.xauthority中每乙個記錄有三個字段

第1個.display name.

第2個.這個display name 使用的協議,常用的為mit-magic-cookie-1

第3個.隨機16進製制的串,是用來認證的magic code,可以使用命令列mcookie產生這個隨機串

工作原理如下所寫:

xserver 啟動時,讀檔案~/.xauthority,讀入對應其display的記錄.當乙個需要顯示的客戶程式啟動呼叫xopendisplay()也讀這個文 件,並把找到的magic code 傳送給xserver.當xserver驗證這個magic code正確以後,就同意連線啦.

觀察startx指令碼也可以看到,每次startx執行,都在呼叫xinit以前使用了xauth的add命令新增了乙個新的記錄到~/.xauthority,用來這次執行x使用認證

ServerVariables集合環境變數列表

語法 request.servervariables server environment variable 引數伺服器環境變數,指定要檢索的伺服器環境變數名。可以使用下面列出的值 變數說明path info轉換後的版本,該變數獲取路徑並進行必要的由虛擬至物理的對映。query string查詢ht...

時間在變,環境在變,我們的思想在變嗎

從前,有兩個飢餓的人得到了一位長者的恩賜 一根魚竿和一簍鮮活碩大的魚。其中,乙個人要了一簍魚,另乙個人要了一根魚竿,於是他們分道揚鑣了。得到魚的人原地就用乾柴搭起篝火煮起了魚,他狼吞虎嚥,還沒有品出鮮魚的肉香,轉瞬間,連魚帶湯就被他吃了個精光,不久,他便餓死在空空的魚簍旁。另乙個人則提著魚竿繼續忍飢...

macOS配置Android SDK 環境變數

1 啟動終端,可以在spotlight中搜尋 終端 2 進入當前使用者的home目錄 cd home3 建立 bash profile 檔案 當該檔案不存在時 如果檔案已存在,直接開啟檔案即可 touch bash profile4 開啟.bash profile檔案,對其內容進行編輯 open e...