所以我正在制作一个批处理文件。通过使用它,我在命令行(具体来说是 WSL)中打开了一个程序。该程序接受一些输入。对于一个特定的示例-我正在制作一个批处理文件,该文件在该虚拟机上运行wsl --distribution kali-linux
然后自动运行sudo service xrdp start
,以便我可以连接到它的桌面。但是当批处理文件运行 kali-linux 时,cmd 会:
┌──(user㉿DESKTOP-6SNGSF1)-[/mnt/c/Users/Saaransh Garg]
└─$
我想知道如何将sudo service xrdp start
命令发送给虚拟机?我认为这类似于为程序提供输入。
另外,我尝试过这样做:wsl -- sudo service xrdp start
但是,当我尝试连接到 VM 时,它显示“发生了内部错误”。我正在考虑,因为 WSL 仍在开发中,这只是一个错误。所以我别无选择,只能通过 .bat 文件向 WSL 提供输入
至于设置,我按照NetworkChuck 的方式配置了 Kali,然后通过David Bombal 的视频将端口更改为 3390。简而言之,我所做的是 -
- 从 microsoft store 安装 kali,更新和升级 kali,安装 xfce 和 XRDP
- 跟随 8:50 提到的视频中的 David Bombal 并使用此处提到的命令将端口更改为 3390
我想要的是制作一个批处理文件,这样每当我运行它时,Kali linux 就会连接到 RD。我的尝试:-
wsl --user root --distribution kali-linux --exec sh -c "service xrdp start"
mstsc /v:localhost:3390 /g:RDP
笔记:
- 我正在使用 WSL v2
注意:这回答了最初提出的问题——如何将输入传递给 WSL 命令。但是,随后对该问题进行了编辑,以将此答案添加到问题中并提出新问题。出于历史目的将其留在这里。
尝试以下方式:
那应该行得通。它以 root 身份运行发行版(以避免在 上使用密码
sudo
),并sh
使用service xrdp start
.您还可以考虑:
它将首先检查它是否在启动之前运行。
来自 CMD 的替代调用:
但是引用规则开始变得更加棘手,恕我直言。
具体来说
xrdp
,尝试:虽然 a
wsl -u root -e sh -c "command"
适用于大多数命令(甚至大多数服务),但init.d
for 的脚本xrdp
似乎对此存在问题。我相信这是由于时间问题,shell(拥有进程)在xrdp
有机会分叉之前终止。nohup
只是确保完整的xrdp
初始化脚本有机会在此之前运行。这真的不是 WSL 问题——如果你对
exec sh -c "sudo service xrdp start"
.