Wish You all beautiful sunny day! :D,
I have a question for You guys. I have following python "script":
import os
os.system('ubuntu.exe')
Which opens Ubuntu running on my WSL. And now, when the Ubuntu terminal appears: I would like to execute following commands: sudo /etc/init.d/dbus start and sudo /etc/init.d/xrdp start using my python script (just do them automatically). However, when I run one of the commands above, terminal requests my password: So the script should be also able to enter the password. Is there any way, how to do it?
Kind regards, D.
CodePudding user response:
While the question/answers linked in the comments is a good read (sudoers
in particular), there's a better method for WSL. Instead of using ubuntu.exe
, use the newer wsl.exe
replacement. The wsl
command offers more control over the startup, including being able to change the user:
import os
os.system('wsl ~ -u root -e sh -c "nohup service xrdp start"')
os.system('wsl -u root service dbus start')
The nohup
is needed because of what seems to be a timing issue. When starting up via the WSL command, the shell (owning process) will terminate before xrdp
gets a chance to fork. nohup
just makes sure that the full xrdp
init script gets a chance to run before that happens. This really isn't a WSL issue, per se. It can also be replicated if you were do something similar with exec sh -c "sudo service xrdp start"
.
A couple of other notes. First, this does not require a password, since WSL doesn't have the concept of "login." The /init
process (WSL's PID1 and initialization) is responsible for setting the owning user for each session. This is not considered a security risk since even the root WSL user runs with no greater than the permissions of the Windows user.
Also note that, in my experience, it's not necessary to start dbus
for xrdp
access, even though I've seen instructions that say it is. Ultimately it will depend on what you want to run within the xrdp
session, of course.