diff --git a/gui/runner.py b/gui/runner.py index 84bc26d..8cf38f1 100644 --- a/gui/runner.py +++ b/gui/runner.py @@ -1,7 +1,27 @@ #!/usr/bin/env python3 +import os import sys import PyQt5.QtWidgets as QtWidgets +def RunProgram(): + window.hide() + if os.system("which gx-env-run"): + QtWidgets.QMessageBox.critical(window, "错误", "gx-env-run 不存在!") + return + if runProgramWithRoot.isChecked(): + if os.getenv("HOME") + "/.config/gx-env/bwrap": + envDist = os.environ + envSet = "DISPLAY=$DISPLAY " + for i in envDist: + envSet += "{}=${} ".format(i, i) + os.system("pkexec env " + envSet + " gx-env-run " + programPath.text()) + return + else: + os.system("gx-env-run-root " + programPath.text()) + return + os.system("gx-env-run " + programPath.text()) + sys.exit(0) + app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QMainWindow() widget = QtWidgets.QWidget() @@ -18,6 +38,7 @@ layout.addWidget(programPath, 1, 1, 1, 3) controlLayout = QtWidgets.QHBoxLayout() cancelButton = QtWidgets.QPushButton("取消") okButton = QtWidgets.QPushButton("确定") +okButton.clicked.connect(RunProgram) controlLayout.addWidget(runProgramWithRoot) controlLayout.addWidget(browser) controlLayout.addWidget(cancelButton) diff --git a/gx-env-run b/gx-env-run index 51d568a..baffb5f 100755 --- a/gx-env-run +++ b/gx-env-run @@ -16,6 +16,6 @@ if [[ ! -f $chrootEnvPath/tmp/env-$USER.txt ]]; then fi command="$@" #echo $command -pkexec env DISPLAY=$DISPLAY chroot $chrootEnvPath sudo -u $USER bash -c "$command" +pkexec env `printenv` chroot $chrootEnvPath sudo -u $USER bash -c "$command" #echo $@ pkexec gx-env-load-desktop \ No newline at end of file diff --git a/gx-env-run-root b/gx-env-run-root index 8d9e494..76ad6dd 100755 --- a/gx-env-run-root +++ b/gx-env-run-root @@ -4,6 +4,15 @@ chrootEnvPath=/opt/new-system-env # echo 请使用 root 权限运行 # exit 1 #fi +if [[ -f ~/.config/gx-env/bwrap ]]; then + if [[ `whoami` != "root" ]]; then + echo 请使用 root 权限运行 + exit 1 + fi + bwrap --dev-bind / / --dev-bind $chrootEnvPath/etc /etc --dev-bind $chrootEnvPath/opt /opt --dev-bind $chrootEnvPath/usr /usr --dev-bind $chrootEnvPath/var /var --dev-bind $chrootEnvPath/bin /bin --dev-bind $chrootEnvPath/boot /boot --dev-bind $chrootEnvPath/lib /lib --dev-bind $chrootEnvPath/lib32 /lib32 --dev-bind $chrootEnvPath/lib64 /lib64 --dev-bind $chrootEnvPath/libx32 /libx32 --dev-bind $chrootEnvPath/gx-env /gx-env "$@" + pkexec gx-env-load-desktop + exit +fi echo aa > /tmp/env-$USER.txt if [[ ! -f $chrootEnvPath/tmp/env-$USER.txt ]]; then echo 未挂载目录,立即挂载