从终端启动和打开之间的 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 中的主要内容,如果未能解决你的问题,请参考以下文章