开机自启Windows子系统WSL的守护进程

说明

Windows的WSL子系统极大的方便了Linux软件在windows下的开发。但其有一个极大的缺陷,即几乎没有Init操作,不会启动后台守护进程(至少到文章编写时)。而有时编写软件时又需要用到一些后台进程,如Rsyslog,虽然可以通过手动执行/etc/init.d下的脚本来启动守护进程,但仍然不方便。

操作系统版本

Microsoft Windows [版本 10.0.19042.685]

WSL

ubuntu focal 20.04

具体思路

通过注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 运行一个WSL下的程序,再由该程序完成以下操作:

  1. 提权。(提升到Root权限)
  2. 依次执行/etc/rc3.d/下的文件

注意:此程序在下称为WslInitMutilUser。

程序代码及安装

编译环境

需要安装build-essential软件包

代码

#include "stdio.h"
#include "unistd.h"
#include "stdlib.h"

int main(int argc ,char *argv[])
{
        if(setuid(0) !=0 || setgid(0) != 0)
        {
                printf("Please Run:\n sudo chown 0:0 %s \n sudo chmod +s %s\n\r",argv[0],argv[0]);
                return -1;
        }
        system("bash -c \'for i in `find /etc/rc3.d/`; do bash -c \"$i restart\"; done\'");
        return 0;

}

编译安装

注意:所有sudo安装操作可能需要输入密码。

编译

 gcc WslInitMutilUser.c  -o WslInitMutilUser

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DwW8mJu5-1609562829655)(image-20210102120150180.png)]

安装WSL程序

将程序文件复制到/usr/local/bin/,并赋予setuid权限。

sudo cp WslInitMutilUser /usr/local/bin/
sudo chown 0:0 /usr/local/bin/WslInitMutilUser
sudo chmod +s /usr/local/bin/WslInitMutilUser

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wzD4A1W9-1609562829663)(image-20210102120559938.png)]

测试WSL程序

在windows下的cmd.exe执行观察是否能正常工作(主要是测试能否正常启动WslInitMuilUser)。

wsl WslInitMutilUser

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-emzFvXMJ-1609562829665)(image-20210102121050395.png)]

写入注册表自启

名字自定义,内容如下:

wsl.exe   /usr/local/bin/WslInitMutilUser

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4hHEM85n-1609562829667)(image-20210102123848353.png)]

最终效果

开机登陆后会自动启动后台守护进程(一个黑框一闪而逝)。后台进程均自动启动。可在WSL下使用update-rc.d命令管理守护进程的自启。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kOk3FbQn-1609562829669)(image-20210102123710630.png)]

注意事项

有的后台进程(如openssh-server)可能由于WSL本身的初始根文件系统问题不能自启,卸载相关软件包再重新安装即可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值