在Linux/Unix类操作系统上, DISPLAY用来设置将图形显示到何处. 直接登陆图形界面或者登陆命令行界面后使用startx启动图形, DISPLAY环境变量将自动设置为:0:0, 此时可以打开终端, 输出图形程序的名称(比如xclock)来启动程序, 图形将显示在本地窗口上, 在终端上输入printenv查看当前环境变量, 输出结果中有如下内容:
bash$ printenv | grep DIS
DISPLAY=:0.0
使用xdpyinfo可以查看到当前显示的更详细的信息.
bash$ xdpyinfo
name of display: :0.0
version number: 11.0
vendor string: The X.Org Foundation
vendor release number: 70101000
X.Org version: 7.1.1
maximum request size: 16777212 bytes
motion buffer size: 256
bitmap unit, bit order, padding: 32, LSBFirst, 32
image byte order: LSBFirst
number of supported pixmap formats: 7
....
DISPLAY环境变量格式如下
host:NumA.NumB
host指Xserver所在的主机主机名或者ip地址, 图形将显示在这一机器上, 可以是启动了图形界面的Linux/Unix机器, 也可以是安装了Exceed, X-Deep/32等Windows平台运行的Xserver的Windows机器.
如果Host为空, 则表示Xserver运行于本机, 并且图形程序(Xclient)使用unix socket方式连接到Xserver, 而不是TCP方式.
使用TCP方式连接时, NumA为连接的端口减去6000的值, 如果NumA为0, 则表示连接到6000端口;
使用unix socket方式连接时则表示连接的unix socket的路径, 如果为0, 则表示连接到/tmp/.X11-unix/X0 . NumB则几乎总是0.
应用:
1。 当你要在crontab中定时运行一些图形化工具,你会发现它没有正常运行。这时候你就需要在你的脚本中加入: export DISPLAY=:0.0
最终这个图形工具会显示在当前所在的图形终端上
2。 当你希望一些图形工具在某个用户的vnc中运行,而不是在当前窗口运行 ,这时你要做的就是以这个用户去执行一个带
export DISPLAY=:[vnc-session port].0
的脚本,当然这个脚本中有你启图形工具的部分。这个脚本也可用于这个用户的crontab定时任务。
Note:
当你在crontab中加入图形作业,想让其在vnc中运行,你会发现,以命令行可以启动的图形的作业在crontab中远行不起来了。
例如:
*/1 * * * * DISPLAY=localhost:2 xclock
它表示每分钟,在vnc :2 中启一个xclock, 如果你把 DISPLAY=localhost:2 xclock 放在命令行中运行。
它是没问题的,但放在crontab中就不行了。
这主要是vnc权限的问题。在~/.vnc/xstartup 加入: xhost + 就可以了。
bash$ cat .vnc/xstartup
#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
#[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
#[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
#xsetroot -solid grey
#vncconfig -iconic &
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
xhost +
gnome-session &
#scim -d
DISPLAY环境变量
最新推荐文章于 2022-01-07 12:03:29 发布