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