终端下调用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 回到终端下。执行下面的脚本:
1#!/bin/bash
2PATH="/usr/X11R6/bin":$PATH
3export PATH
4DISPLAY=:0.0
5export DISPLAY
6userresources=$HOME/.Xresources
7usermodmap=$HOME/.Xmodmap
8sysresources=/etc/X11/xinit/.Xresources
9sysmodmap=/etc/X11/xinit/.Xmodmap
10# merge in defaults and keymaps
11if [ -f $sysresources ]; then
12 xrdb -merge $sysresources
13fi
14if [ -f $sysmodmap ]; then
15 xmodmap $sysmodmap
16fi
17if [ -f $userresources ]; then
18 xrdb -merge $userresources
19fi
20if [ -f $usermodmap ]; then
21 xmodmap $usermodmap
22fi
23# start the window manager
24#exec quartz-wm &
25# if bash shell execute /etc/profile
26if [ "$SHELL" = "/bin/bash" ]
27then
28 . /etc/profile
29fi
30xterm &
将该脚本保存后,在终端下执行 。执行完了以后再ctrl +Alt+F7切到桌面下看是不是启了一个xterm程序了。经验证果然启了一个xterm程序 。
注:默认情况下,linux DISPLAY的桌面号是:0.0 ,如果是在VNC下有可能就不是这个了。需要VNC登陆后,通过echo $DISPLAY 命令查看 。
在正常将系统在5级别启动时,DISPLAY环境变量哪段设置也可以省略,可以省略的内容如下:
1PATH="/usr/X11R6/bin":$PATH
2export PATH
3DISPLAY=:0.0
4export DISPLAY
事情到了这里就简单了,想执行什么就把后面的xterm &换成你要执行的内容就行了。如所需的是换成了:
1office_home=$1
2$1/Jre/bin/java -classpath :$office_home/Yozo_Office.jar:$office_home/tool.jar: EIOfficeUtils $2 $3 $4
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/term-x11/2652.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.