祝大家阳光明媚! :D,
我有一个问题要问你们。我有以下python“脚本”:
import os
os.system('ubuntu.exe')
这会打开在我的 WSL 上运行的 Ubuntu。现在,当 Ubuntu 终端出现时:我想执行以下命令:须藤/etc/init.d/dbus 启动 和 须藤/etc/init.d/xrdp 开始 使用我的 python 脚本(只是自动执行)。但是,当我运行上述命令之一时,终端会请求我的密码:
所以脚本应该也能输入密码。
有什么办法,怎么办?
亲切的问候,
D.
最佳答案
而question/answers评论中的链接很好读(尤其是 sudoers
),WSL 有更好的方法。而不是使用 ubuntu.exe
, 使用较新的 wsl.exe
替代品。 wsl
命令提供了对启动的更多控制,包括能够更改用户:
import os
os.system('wsl ~ -u root -e sh -c "nohup service xrdp start"')
os.system('wsl -u root service dbus start')
nohup
需要,因为这似乎是一个时间问题。通过 WSL 命令启动时,shell(拥有进程)将在 xrdp
之前终止有机会 fork 。 nohup
只需确保完整的 xrdp
init 脚本有机会在此之前运行。本质上,这确实不是 WSL 问题。如果你用 exec sh -c "sudo service xrdp start"
做类似的事情,它也可以被复制。 .其他一些笔记。首先,这不需要密码,因为 WSL 没有“登录”的概念。
/init
进程(WSL 的 PID1 和初始化)负责为每个 session 设置拥有用户。这不被视为安全风险,因为即使是根 WSL 用户也以不超过 Windows 用户的权限运行。另请注意,根据我的经验,没有必要开始
dbus
对于 xrdp
访问,即使我已经看到说明是这样的。最终这将取决于你想在 xrdp
中运行什么。 session ,当然。
关于python - 使用 Python 运行外部应用程序并在内部调用它们的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69607990/