Re: [問題] 顯示image問題

作者: kenduest (小州)   2014-10-21 00:58:56
※ 引述《zchien (小建)》之銘言:
: 公司的一個server,是灌unix程式
: 我寫了一個script,當觸發時,會pop出某個圖片
: 我發現一個現象,如果在server端的桌面 直接執行script => 可以正常顯示
: 但是透過telnet到server執行script, 會顯示can not display.....
所以你是呼叫了一個 X 的程式,所以在本機執行時候不會有問題。
: 我猜想,應該是因為telnet上面,無法顯示圖片的關係
: 但是我的目的是希望 telnet到server執行script時,
: 可以在server桌面 顯示出某個圖片
這邊可能要先說明一下,X Window 本身 Protocol 是有網路支援的,也就是網路
透通的傳輸概念。X client 相關程式執行時候會去找 DISPLAY 這個變數,這是
告知 X Server 的位置,後續 X client 就可以透過該變數引導的位置與 X Server
進行溝通。一般本機環境通常 DISPLAY 變數內容可能為 ":0"。該變數格式:
<host>:<display>[.<screen>]
本機環境大多 host 省略所以只有 :0 這樣格式,啟動的 display 第一個 通常
也都是 0。
那你的問題點很簡單,你用 telnet 登入時候基本上登入之後環境變數內不會帶有
DISPLAY 這個變數,因為 DISPLAY 是存在於你本機使用 startx or gdm 等這類程式
啟動之後帶入的,環境變數持續繼承所以都可以看到該變數項目,所以 X 相關程式
都可以看到該變數所以很正常執行。telnet 遠端登入並不會有該變數,所以基本上
是看不到,所以執行 X 程式只會出現 can't open display 這類訊息。
若你要登入之後能夠在遠端執行 x 程式軟體,然後畫面顯示於那台遠端的主機
server 的話,那還是可以的。比方你的遠端 server 已經啟動 X Window,目前
X 有登入某個帳號,比方是 peter 帳號好了,那你在其他主機遠端也用 peter 帳號
登入該主機,那就:
export DISPLAY=":0"
gedit
就是指定 DISPLAY 變數為本機那個 X Server,那後續就可以執行 gedit 等命令
啟動文書編輯程式。其中 export 是 bash shell 內建命令,若你用其他 shell 請
適當改改,像是tcsh 應該是 setenv DISPLAY ":0" 這類語法。
再來若你 X server 那邊本身登入帳號是 mary,但是你遠端登入是 peter 帳號,
上面方式會被拒絕,一般大多會顯示 Client reject 錯誤訊息,因為帳號沒有一致所以
不能這樣做.. 這是安全性考量,因為允許任何人遠端登入到該主機就可以跑 X 程式顯示
於不是自己帳號的X Window 內不合理。若有這個需求,mary 可以在 X Window 那
server 上開個終端機執行 xhost + 這個命令,表示接受任何連線來源可以存取該 X server,
那就不會被拒絕了。
: 測試過寫在crontab,也不行
cron 乃是背景服務程式,也是沒有該環境變數帶入的,問題同上。
: 不知道是否有其他方法
: 另外想再請教一個指令, 我寫另外一個script,
: 會使用say這個指令,在server桌面,顯示我要說的話
: 我將這say指令的script放在crontab執行時,無法在server桌面,顯示我要說的話
: 但是在server端執行,或是telnet到server執行都可以
: 不知道是否有人知道原因
作者: scott260202 (Cake)   2014-10-21 03:57:00
推這篇 蠻清楚的
作者: lc85301 (pomelocandy)   2014-10-21 13:14:00
太強大啦
作者: carylorrk (carylorrk)   2014-10-21 14:11:00
學習學習~
作者: zchien (小建)   2014-10-21 23:31:00
好強呀,明天馬上測試看看

Links booklink

Contact Us: admin [ a t ] ucptt.com