ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

x11 – 如何在chrooted环境中运行GUI Java app?

2019-08-10 03:59:42  阅读:416  来源: 互联网

标签:java x11 gui chroot


就我而言,Java应用程序是JDownloader.我准备了chroot环境,如下所述:

http://www.0x61.com/forum/post5240333.html#p5240333

和这里:

http://interreality.org/~reed/java-chroot.html

和这里:

http://www.elstel.com/openroot/

所以,我安装了java,添加了组和用户,复制了JDownload文件,但是当我尝试运行它时(作为chroot下的普通用户;我以root身份运行chroot,但是一旦我在chroot中,我切换到chroot普通用户) :

java -Xmx512m -jar JDownloader.jar

我得到了一些积极的信息,比如JDownloader加载皮肤

10 4/6/11 2:15:17 PM – FINER [jd.JDClassLoader()] -> Look and Feel JAR loaded: /mnt/jd/libs/laf/syntheticaSilverMoon.jar

但这就是故事的结尾 – 应用程序没有显示出来.无论我是使用chroot来运行chroot环境还是openroot,结果都是一样的.

当我将chownload作为chroot-root运行时,我得到了更多输出,但最后发生异常:

10 4/6/11 2:39:23 PM – FINER [jd.config.DatabaseConnector()] -> Loading database

10 4/6/11 2:39:23 PM – FINER [jd.config.DatabaseConnector(checkDatabaseHeader)] -> Checking database

10 4/6/11 2:39:23 PM – INFO [jd.Main(main)] -> init Splash

———————— Thread: 11 ———————–

11 4/6/11 2:39:25 PM – INFO [jd.gui.swing.laf.LookAndFeelController(setUIManager)] -> Use Look & Feel: de.javasoft.plaf.synthetica.SyntheticaSimple2DLookAndFeel

11 4/6/11 2:39:25 PM – SEVERE [jd.controlling.JDLogger(exception)] -> SEVERE Exception occurred java.lang.reflect.InvocationTargetException

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

我在chroot和普通系统中安装了相同的Jave,我可以在正常系统中运行相同的JDownloader,这里没有问题.

问题 – 我在这里缺少什么?如何运行GUI Java app?

先感谢您.

解决方法:

如果您尝试将任何chrooted应用程序显示在X11中,则需要正确设置一些内容.一个是有效的DISPLAY环境变量,第二个是正确的Xauthority文件,第三个也是最重要的是访问X11 / Xorg使用的套接字. X11可以使用TCP网络套接字或Unix域套接字.从chroot可以更容易地使用TCP套接字,但是大多数现代桌面都使用-nolisten tcp或X服务器上类似设置的TCP关闭TCP. TCP套接字从TCP端口6000开始显示:最后一次显示为0到6063.只要TCP套接字正在侦听,您就不需要再使用套接字执行任何操作.您仍然需要担心DISPLAY和Xauthority. Unix域套接字需要更多的工作,至少在Linux上,它位于/tmp/.X11-unix/X下?哪里?是一个从0到63的数字.如果您的chroot与/ tmp位于同一文件系统上,那么您可以使用硬链接,至少在Linux上.符号链接不会留下chroot.替换?使用正确的显示编号:

mkdir /path/to/chroot/tmp
chmod 1777 /path/to/chroot/tmp
mkdir /path/to/chroot/tmp/.X11-unix
chmod 1777 /path/to/chroot/tmp/.X11-unix
ln -f /tmp/.X11-unix/X? /path/to/chroot/tmp/.X11-unix/X?

mkdir和chmod只需要完成一次,但是需要在每个X会话上使用ln重新创建套接字文件.如果/ tmp不在同一个文件系统上,那么生活就更难了,你需要某种hackery,例如使/tmp/.X11-unix成为chroot下相应目录的符号链接.接下来,确保设置了DISPLAY环境变量,并匹配终端和其他X11应用程序使用的内容.最后,要复制.Xauthority,请使用xauth.您需要为X11会话找到匹配的cookie,并且每个会话的cookie都不同.使用xauth list $DISPLAY打印出DISPLAY的cookie.该名称看起来像主机:?或主机/ unix:?哪个主机是计算机的主机名?是显示号码.可以使用echo $DISPLAY检索显示编号,它将是冒号(:)之后和任何句点之前的数字(.)要复制Xauthority,请使用以下内容:

xauth extract /path/to/chroot/.Xauthority host/unix:1
xauth -f /path/to/chroot/.Xauthority list

第二个命令简单列出复制的条目.如果您需要在使用sudo或其他命令更改用户时进行复制,请尝试以下操作:

xauth extract - host/unix:1 | sudo xauth -f /path/to/chroot/.Xauthority merge -

如果放置.Xauthority文件的位置不是chrooted用户的主目录,则必须设置XAUTHORITY环境变量:

export XAUTHORITY=/path/to/chroot/.Xauthority

您可能已经知道,在chroot下运行GUI应用程序并不常见.

标签:java,x11,gui,chroot
来源: https://codeday.me/bug/20190810/1636056.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有