从终端启动和打开之间的 OpenOffice 行为差异 - 都在 chroot 中

Posted

技术标签:

【中文标题】从终端启动和打开之间的 OpenOffice 行为差异 - 都在 chroot 中【英文标题】:Discrepacy in OpenOffice behaviour between starting from terminal and with popen - both in chroot 【发布时间】:2014-04-25 11:57:31 【问题描述】:

我有一个很简单的bash 脚本:

#!/bin/bash

OPENOFFICE_CMD="/opt/openoffice4/program/soffice"
CHROOT_DIR="/opt/openoffice_chroot"
BIND_DIRS=(bin dev etc home lib lib64 media opt proc root run sbin selinux srv sys tmp usr var)

for BIND_DIR in $BIND_DIRS[*]
do
    CHROOT_BIND_DIR=$CHROOT_DIR/$BIND_DIR
    mkdir -p $CHROOT_BIND_DIR
    mount -o bind /$BIND_DIR $CHROOT_BIND_DIR
done
mkdir $CHROOT_DIR/mnt

xhost +
chroot --userspec=user2:user2 $CHROOT_DIR $OPENOFFICE_CMD -DISPLAY=:0.0

rm -rf $CHROOT_DIR/mnt
for BIND_DIR in $BIND_DIRS[*]
do
    CHROOT_BIND_DIR=$CHROOT_DIR/$BIND_DIR
    umount $CHROOT_BIND_DIR
    rm -rf $CHROOT_BIND_DIR
done

直接从终端调用时:

sudo /opt/scripts/openoffice_chroot.sh

一切都按预期进行。 但是当它像这样以 Python 的 popen 启动时:

subprocess.Popen(['sudo', '/opt/scripts/openoffice_chroot.sh'])

我在 stderr 上收到错误消息:

javaldx failed!

伴随着一个对话框说访问配置有问题,应用程序将被终止。您可以想象在此对话框中单击“确定”会终止 OpenOffice。 在这两种情况下,user2 都被模拟了 - 我在终端中以 user2 身份登录,Python 进程也以 user2 身份运行。 我被困在这里了。

背景信息:在后台运行的 Python 进程应该启动此脚本以响应用户单击 GUI 中的按钮。它可以工作并且脚本已启动,因此不相关。我正在制作这个虚拟的chroot 环境,因为OpenOffice 不应该访问/mnt 的内容(它应该将其视为一个空目录),而以同一用户身份运行的其他进程应该可以完全访问/mnt。我有一个内部装有保险丝的远程后端,其他应用程序应该可以处理远程文件,但要求是 OpenOffice 只能用于本地文件。

我可以接受解决我所面临的确切问题的答案,以及描述从背景信息部分实现目标的更好方法的答案。

【问题讨论】:

【参考方案1】:

javaldx failed! 消息出现在弹出窗口中,user2 doesn't have access to the /home/user2/.config directory。

我会要求您将脚本中的 chroot 语句更改为 bash -i 而不是 OO,并从命令行和 python 脚本中检查该目录的可访问性、所有权和权限。这应该会给你一个线索。

如果做不到这一点,任何人都可以猜测问题可能是什么。由于您在整个工作正常时以 user2 身份登录,因此我会尝试从 Python 的登录 shell 运行该进程:

subprocess.Popen(['/bin/bash', '--login', '-c', 'sudo /opt/scripts/openoffice_chroot.sh'])

这应该设置与从终端登录时相同的环境。

【讨论】:

谢谢!这行得通。经过实验,我们意识到这样做就足够了export HOME_DIR="/home/user2",因为它指向/root。但是您的解决方案肯定更好,因为它解决了更广泛的类似问题。我会给你这个 +100 的赏金,但 SO 说我可以在 19 小时内完成。

以上是关于从终端启动和打开之间的 OpenOffice 行为差异 - 都在 chroot 中的主要内容,如果未能解决你的问题,请参考以下文章

从后面的代码启动 OpenOffice 作为服务不起作用

从 Writer 宏打开 OpenOffice 电子表格

excel 和 openoffice calc 的宏

从 JAVA 使用 LibreOffice/OpenOffice 转换文件格式

计算文档之间的 openoffice 页面

openoffice能打开word文件么?