顯示image問題 - Linux

Tracy avatar
By Tracy
at 2014-10-21T00:58

Table of Contents

※ 引述《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執行都可以
: 不知道是否有人知道原因


--
Tags: Linux

All Comments

Belly avatar
By Belly
at 2014-10-21T07:24
推這篇 蠻清楚的
Jacky avatar
By Jacky
at 2014-10-24T19:50
太強大啦
Candice avatar
By Candice
at 2014-10-28T10:49
學習學習~
Belly avatar
By Belly
at 2014-11-01T20:17
好強呀,明天馬上測試看看
Skylar Davis avatar
By Skylar Davis
at 2014-11-03T01:35
真的可行,謝謝

怎麼連VM(CentOS7)內的 Oracle?

Kama avatar
By Kama
at 2014-10-20T13:04
※ [本文轉錄自 Database 看板 #1KH9I2YS ] 作者: sabreur (無奈) 看板: Database 標題: [討論] 怎麼連VM(CentOS7)內的 Oracle? 時間: Mon Oct 20 12:50:07 2014 各位先進好 在下參考了下面兩篇文章 在Cent ...

HackingThursday 固定聚會 (2014-10-23)

Anonymous avatar
By Anonymous
at 2014-10-20T12:11
通告網址: [http://www.hackingthursday.org/][1] * * * * 時間: 每週四晚上 19:30 至 22:00 ( 熱食供應至 20:00 ) * 地點: 伯朗咖啡 ( 建國店 ) * 地址: 台北市大安區建國南路一段 166 號 2 樓 * 鄰 ...

EmbeddedLinux核心

Agatha avatar
By Agatha
at 2014-10-20T04:04
先做個自我狀況概述... 我是個初初初初初學者 使用的開發端的作業系統為and#34;Ubunutu14.04and#34; 使用的開發板所使用的CPU為and#34;Cortex-A9and#34; 我會使用minicom與開發板溝通 我會撰寫C程式來控制GPIO 接著想學習linux核心的編輯與編譯... ...

ubuntu ssh root登入

Brianna avatar
By Brianna
at 2014-10-19T22:35
※ 引述《ireullin (raison detre)》之銘言: : 雖然我知道大家都不建議用root登入ssh : 但是由於工作上有需要用到 : 所以還是來跟大家請教一下 : 小弟使用的是ubuntu 12.04 server : /etc/ssh/sshd_config 中的 PermitRootLog ...

雙系統WIN8 CENTOS7無開機選單

Emily avatar
By Emily
at 2014-10-18T23:34
狀況:單硬碟 有W8然後騰出空間灌CENTOS7後重開機 沒看到任何開機選單 直入w8..無法進入CENTOS7 用CD進入安裝再一次分割硬碟的時候有看到其實系統有裝成功了 因此其實問題就是沒選單 BOOT MODE:uefi, legacy 兩個都試過 就是沒選單.... 對於這種新硬碟的新系統搞 ...