gpt4 book ai didi

python - 从终端启动和使用 popen 启动之间的 OpenOffice 行为差异 - 均在 chroot 中

转载 作者:行者123 更新时间:2023-11-30 23:24:45 27 4
gpt4 key购买 nike

我有一个非常简单的 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 内容的完全访问权限。我有一个安装有内部 fuse 的远程后端,其他应用程序应该可以处理远程文件,但要求是 OpenOffice 只能用于本地文件。

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

最佳答案

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'])

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

关于python - 从终端启动和使用 popen 启动之间的 OpenOffice 行为差异 - 均在 chroot 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23292456/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com