gre*_*man 8 chroot gui java x11
就我而言,Java 应用程序是 JDownloader。我按照此处的说明准备了 chroot 环境:
所以,我安装了java,添加了组和用户,复制了JDownload文件,但是当我尝试运行它时(作为chroot下的普通用户;我以root身份运行chroot,但是一旦我进入chroot,我就切换到chroot普通用户) :
java -Xmx512m -jar JDownloader.jar
Run Code Online (Sandbox Code Playgroud)
我收到了一些积极的信息,比如 JDownloader 加载皮肤
10 4/6/11 2:15:17 PM - FINER [jd.JDClassLoader(<init>)] -> Look and Feel JAR loaded: /mnt/jd/libs/laf/syntheticaSilverMoon.jar
Run Code Online (Sandbox Code Playgroud)
但这就是故事的结局——应用程序没有出现。不管我用chroot运行chroot环境还是openroot,结果都是一样的。
当我以 chroot-root 身份运行 JDownload 时,我得到了更多的输出,但最后发生了异常:
10 4/6/11 2:39:23 PM - FINER [jd.config.DatabaseConnector(<init>)] -> 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)
Run Code Online (Sandbox Code Playgroud)
我在chroot和普通系统中安装了相同的Java,并且我可以在普通系统中运行相同的JDownloader;这里没有问题。
我在这里缺少什么?如何运行 GUI Java 应用程序?
pen*_*359 13
如果您试图让任何 chroot 应用程序显示在 X11 中,您将需要正确设置一些东西。一个是有效的DISPLAY
环境变量,第二个是适当的 Xauthority 文件,第三个也是最重要的,访问 X11/Xorg 使用的套接字。X11 可以使用 TCP 网络套接字或 Unix 域套接字。从 chroot 使用 TCP 套接字将更容易,但大多数现代桌面都关闭了 TCP,-nolisten tcp
或在 X 服务器上设置了类似的设置。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?
Run Code Online (Sandbox Code Playgroud)
mkdir
并且chmod
只需要完成一次,但是需要ln
在每个 X 会话上重新创建套接字文件。如果/tmp
不是在同一个文件系统上,生活会更艰难,你将需要某种技巧,例如/tmp/.X11-unix
建立到 chroot 下相应目录的符号链接。接下来,确保DISPLAY
设置了环境变量并匹配您的终端和其他 X11 应用程序使用的环境变量。最后,要复制.Xauthority
,请使用xauth
. 您需要为您的 X11 会话找到匹配的 cookie,并且每个会话的此 cookie 都不同。使用xauth list $DISPLAY
打印出饼干你DISPLAY
。名称看起来像host:?
或host/unix:?
其中 host 是计算机的主机名,而 ? 是显示编号。显示编号可以用echo $DISPLAY
它来检索,它将是冒号 (:) 后面和任何句点 (.) 之前的编号,要复制 Xauthority,请使用以下内容:
xauth extract /path/to/chroot/.Xauthority host/unix:1
xauth -f /path/to/chroot/.Xauthority list
Run Code Online (Sandbox Code Playgroud)
第二个命令简单地列出复制的条目。如果您在使用 sudo 或其他命令更改用户时需要复制,请尝试以下操作:
xauth extract - host/unix:1 | sudo xauth -f /path/to/chroot/.Xauthority merge -
Run Code Online (Sandbox Code Playgroud)
如果放置.Xauthority
文件的位置不是 chroot 用户的主目录,则必须设置XAUTHORITY
环境变量:
export XAUTHORITY=/path/to/chroot/.Xauthority
Run Code Online (Sandbox Code Playgroud)
正如您可能知道的那样,在 chroot 下运行 GUI 应用程序并不常见。
确保XAUTHORITY
设置了环境变量(通常设置为 /path/to/home/.Xauthority`)。然后,在主机中:
$ xauth list
latitude/unix:0 MIT-MAGIC-COOKIE-1 d4474d13c
Run Code Online (Sandbox Code Playgroud)
现在在chroot 环境中:
# chroot some-debian
# xauth add latitude/unix:0 MIT-MAGIC-COOKIE-1 d4474d13c
# xcalc
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15941 次 |
最近记录: |