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

有些程序在设计之初就设计成了需要桌面环境下执行。最近公司就遇到了这样的问题。公司的盒子会调用第三方的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 [ -fsysresources ]; then
    xrdb -merge sysresources
fi
if [ -fsysmodmap ]; then
    xmodmap sysmodmap
fi
if [ -fuserresources ]; then
    xrdb -merge userresources
fi
if [ -fusermodmap ]; 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=11/Jre/bin/java -classpath :office_home/Yozo_Office.jar:office_home/tool.jar: EIOfficeUtils 23 $4

发表评论

您的电子邮箱地址不会被公开。