Windows wsl2支持systemd
背景
很多Linux发行版都是使用systemd来管理程序进程,但是在WSL中默认是用init来管理进程的。
为了符合长久的使用习惯,且省去不必要的学习成本,就在WSL的发行版(我这里安装的是Ubuntu20.04)中支持systemd,也就可以使用systemctl命令来启停进程。
相关知识
能够支持使用systemctl命令,提供完整 systemd 的项目有很多:
- diddledani/one-script-wsl2-systemd: The one-script variant of the systemd hack for WSL2 (github.com)
- ubuntu-wsl2-systemd-script
- wsl2-hacks
- genie
- subsystemd
- Angea
这些项目的核心原理并无大异,无非是细节处理的好坏和附加功能的多少,但最重要的一点可能是工作层次不同。

前三个脚本都工作在图中的** shell **层,要依赖外置命令执行系统调用。
genie 工作在应用程序层,它使用 C# 编写,通过 shell 执行系统调用,比前三个还多了一层。
最后两个虽然也是应用程序,但它们由 Rust 编写,不经 shell,而直接由 C system call wrapper 执行系统调用,依赖最少,动态链接编译后只有几百 K。
systemd
在较新的Linux系统上,都使用systemd 管理进程,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。
systemd为系统启动和管理提供了完整的解决方案。它提供了一组命令。字母d是守护进程(daemon)的缩写。
init
WSL2 的发行版均拥有微软提供的 init,它是一种 systemd 的替代方案,不支持 systemctl 命令,
WSL2 本身是由 Windows 负责运行的,因此使用 tree 或 ps 命令时会看到根进程不是 systemd,这将导致无法启动 Linux 系统服务的守护进程 (deamon)。
当我们执行 systemctl 命令的时候,会显示出我们的 init system (PID 1) 并非 systemd,而是微软提供的 init。
systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
安装
首先,需要确认使用的是WSL2版本,可以在PowerShell中执行如下命令查看:
wsl -l -v
如果显示为1,可以使用如下命令进行配置,其中修改成2即可:
wsl --set-default-version <Version>
还可以使用如下方式设置默认的Linux发行版,其中替换为要配置的Linux发行版名称。
例如,wsl --set-version Ubuntu-20.04 会将Ubuntu20.04发行版设置为使用WSL2:
wsl --set-version <distro name>
在网上找到很多种支持的方法,最简单的就是微软官方提供的方法,仅需要添加一个配置文件即可。
1、打开PowerShell命令行,更新WSL。
wsl --update
2、打开Ubuntu 22.04,在 /etc目录新建wsl.conf文件,添加如下内容:
[boot]
systemd=true
3、关闭Ubuntu窗口。
4、打开PowerShell命令行,重启WSL。
wsl --shutdown
5、重新在Windows Terminal中打开Ubuntu发行版,输入如下命令检查是否成功:
systemctl

出现上述的结果则代表支持systemd成功。
参考
Systemd support is now available in WSL!
版本
Windows 10 专业版 22H2
Ubuntu 20.04
Windows wsl2支持systemd的更多相关文章
- 装python package 时,conda提示会升级python2到python3,那可能是你的windows不支持py2env下的此包。
装python package 时,conda提示会升级python2到python3, 那可能是你的windows不支持py2env下的此包.比如:win 下,tensorflow就不支持py2的环 ...
- Windows CMD 支持ls命令
/********************************************************************** * Windows CMD 支持ls命令 * 说明: * ...
- 解决Sqlserver 2008 R2在创建登录名出错"此版本的 Microsoft Windows 不支持 MUST_CHANGE 选项。 (Microsoft SQL Server,错误: 15195)"
错误信息: 执行 Transact-SQL 语句或批处理时发生了异常. (Microsoft.SqlServer.ConnectionInfo) 此版本的 Microsoft Windows ...
- Docker学习笔记-Windows系统支持(一)
Docker对windows的支持情况: 一.Docker for Windows ServerDocker Enterprise Edition for Windows Server 2016htt ...
- IE Edge 下载文件的时候,文件名不能有windows不支持的特殊字符
IE Edge 下载文件的时候,文件名不能有windows不支持的特殊字符,比如:等. 马了个批的,其他浏览器包括IE就可以自动转换,比如:会自动变为_.
- C++ windows客户端支持SSL双向认证
C++ windows客户端支持SSL双向认证,服务端是JAVA开发的,使用的证书是jks格式的.C++并不支持JKS格式的证书,所以要用openssl进行转换下. 1. 需要先把jks转成.p12文 ...
- Kube-OVN v1.10.0:新增Windows节点支持,用户自定义子网ACL等10+硬核功能
在Kube-OVN社区小伙伴的共同努力下,Kube-OVN v1.10.0于五月份正式发布.Kube-OVN v1.10.0版本中,我们一如既往地对Kube-OVN 的功能.性能.稳定性和易用性进行了 ...
- Windows(WSL2) Linux子系统搭建Docker环境
摘要:本文主要介绍了如何再Windows(WSL2)中启用Linux系统中,并搭建Docker环境. WSL是适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux ...
- Windows Azure支持七层负载均衡--Application Gateway
一直以来Windows Azure的负载均衡(Loadbalancer)功能一直被客户诟病,无法其竞争对手(特别是国内的云厂商)匹敌. Windows Azure的负载均衡器是四层的,前期的版本不支持 ...
- Windows Phone 支持中国移动官方支付
今天在这里与大家分享一个好消息,Windows Phone 官方支付支持中国移动(MO Payment),在此之前无论是 Windows Phone 的用户还是开发者,都知道在Windows Phon ...
随机推荐
- 【防忘笔记】一个例子理解Pytorch中一维卷积nn.Conv1d
一维卷积层的各项参数如下 torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1 ...
- Vue3学习(二十)- 富文本插件wangeditor的使用
写在前面 学习.写作.工作.生活,都跟心情有很大关系,甚至有时候我更喜欢一个人独处,戴上耳机coding的感觉. 明显现在的心情,比中午和上午好多了,心情超棒的,靠自己解决了两个问题: 新增的时候点击 ...
- 使用矩池云 Docker 虚拟机安装VNC、Conda、Python及CUDA
矩池云虚拟机支持 Docker 使用,但是由于虚拟机目前不支持启动时传递环境变量来设置VNC.Jupyterlab 连接密码,所以我们没有创建相关基础镜像(设置固定密码容易泄漏),下面给大家介绍手动安 ...
- 【Azure 服务总线】Spring Cloud 的应用 使用Service Bus 引起 org.springframework.beans.BeanInstantiationException 异常,无法启动
问题描述 Spring Cloud 的应用原本正常运行,但是重新发布了一次应用后,发现使用 Service Bus 服务的应用都无法启动并报 BeanInstantiationException 异 ...
- Java 类的成员之四: 代码块(或初始化块)
1 package com.bytezreo.block; 2 3 /** 4 * 5 * @Description 类的成员之四: 代码块(或初始化块) 6 * @author Bytezero·z ...
- gyroflow.xyz - 视频防抖 支持相机 gopro 不支持手机视频 - 软件推荐
gyroflow.xyz - 视频防抖 支持相机 gopro 不支持手机视频 - 软件推荐 https://gyroflow.xyz/ https://github.com/gyroflow/gyro ...
- stm32 boot0硬件接法导致的概率性启动失败问题总结和反思
概要 问题概要,板子在稳压电源上工作很好,可一旦接了电池,stm32就会出现概率性的无法启动.加上项目比较急,这个问题阻塞一直无法量产.真是非常的要命啊. 思路分析 既然是不同的电源会导致这个问题 ...
- stm32文件系统读写操作调试总结
一 问题 最近使用到了文件系统的读写,中间遇到了一些问题值得深思. 二 源码解析 创建文件: FRESULT res; do { sprintf(filename,"/sensor_si ...
- yum总纲
yum总纲 yum源搭建 首先本文档讲解两种搭建方式,第一有网络环境和第二种无网络环境. 第一种:有网络环境 首先 进入系统执行:以下命令,获取网络源 wget -O /etc/yum.repos.d ...
- 记录--你真的能区分JavaScript的各种导入导出方式吗?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 我们在无论是在查阅别人的代码,还是在实际项目开发的过程中,肯定都会使用导入导出的功能,有时候我们会搞混这几种方式到底有什么区别,今天 ...