终端下调用X11桌面执行程序

2013年7月24日 发表评论 阅读评论

有些程序在设计之初就设计成了需要桌面环境下执行。最近公司就遇到了这样的问题。公司的盒子会调用第三方的office的jar包,该包的功能就是将doc、docx、ppt、pptx之类的文件转化成html 。但该包有一个苛刻的要求,就是需要在linux 桌面环境下调用,如果找不到桌面环境就会失败退出。

由于最初的调试是在gnome环境下进行的,所以tomcat没有图形调用的问题。不过一部署到现网服务器上,tomcat在调用office的转换时就报“Can't connect to X11 window server” 。网上有人提出在java调用时加上以下参数。

-Djava.awt.headless=true

经测试,上面的方法根本行不通,因为office的jar包必须要桌面环境,这不是tomcat决定的 。如果每次启动tomcat在VNC环境下启动不会有问题,但这是linux服务器,总不能每次都在VNC下运行程序 。

后来想下可以在启动脚本里加上X11所需要的桌面环境变量,就可以在终端下执行X11程序了。测试方法是在一台测试机上先将启动级别调为5 ,通过ctrl+Alt+F1 回到终端下。执行下面的脚本:

#!/bin/bash
PATH="/usr/X11R6/bin":$PATH
export PATH
DISPLAY=:0.0
export DISPLAY
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/etc/X11/xinit/.Xresources
sysmodmap=/etc/X11/xinit/.Xmodmap
# merge in defaults and keymaps
if [ -f $sysresources ]; then
    xrdb -merge $sysresources
fi
if [ -f $sysmodmap ]; then
    xmodmap $sysmodmap
fi
if [ -f $userresources ]; then
    xrdb -merge $userresources
fi
if [ -f $usermodmap ]; then
    xmodmap $usermodmap
fi
# start the window manager
#exec quartz-wm &
# if bash shell execute /etc/profile
if [ "$SHELL" = "/bin/bash" ]
then
    . /etc/profile
fi
xterm &

将该脚本保存后,在终端下执行 。执行完了以后再ctrl +Alt+F7切到桌面下看是不是启了一个xterm程序了。经验证果然启了一个xterm程序 。

注:默认情况下,linux DISPLAY的桌面号是:0.0 ,如果是在VNC下有可能就不是这个了。需要VNC登陆后,通过echo $DISPLAY 命令查看 。

在正常将系统在5级别启动时,DISPLAY环境变量哪段设置也可以省略,可以省略的内容如下:

PATH="/usr/X11R6/bin":$PATH
export PATH
DISPLAY=:0.0
export DISPLAY

事情到了这里就简单了,想执行什么就把后面的xterm &换成你要执行的内容就行了。如所需的是换成了:

office_home=$1
$1/Jre/bin/java -classpath :$office_home/Yozo_Office.jar:$office_home/tool.jar: EIOfficeUtils $2 $3 $4




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: Linux/unix/mac 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.