【开发者自荐】WSL Dashboard 一款WSL2的可视化管理工具

我一直把 WSL 当作 Windows 上最“超值”的开发能力:轻量、快速、足够接近原生 Linux。但在日常使用里,WSL 的管理体验却很容易被细碎的命令和流程拖慢:查看状态、切换默认发行版、迁移磁盘、克隆备份、导出归档……它们都能做,但不够直观,也不够适合高频。

于是我做了 WSL Dashboard:一个面向日常工作流的 WSL 管理面板。它的目标并不是把所有命令“包个壳”,而是把最常见、最容易出错、最影响效率的链路做成一套可视化、可恢复、可持续维护的产品化体验。

项目地址:https://github.com/owu/wsl-dashboard

我在做一个什么样的工具

WSL Dashboard 是一个现代原生桌面应用:Rust + Slint + Skia + Tokio(见 Cargo.toml)。它的核心特性是:

  • 现代原生 UI:轻量、响应快、动效自然,支持深色/浅色模式。
  • WSL 一站式管理:启动/停止/重启、默认发行版、迁移/克隆/导出、安装等高频操作聚合在一处。
  • 系统托盘与静默常驻:适合作为“后台面板型工具”长期运行(入口在 main.rs、托盘实现位于 tray.rs)。
  • 国际化与 RTL 适配:界面支持 29 种语言,并对阿拉伯语/乌尔都语/希伯来语等 RTL 语言做了布局适配(i18n 入口位于 i18n/mod.rs,UI 侧位于 theme.slint 与各 Slint 组件)。

如果你把它当作“WSL 的图形化控制台”,你会发现它更像一个为工作流打磨过的产品:减少命令记忆成本,避免在迁移/克隆这类重操作上踩坑,并尽量让系统状态与 UI 状态保持一致。

为什么它能做到“顺滑且不易卡”

WSL Dashboard 的性能策略,核心是把“慢的、不确定的、可能卡死的”事情从 UI 线程里彻底隔离出去,并且对并发与刷新频率做硬约束。

1) 所有 WSL 调用都是异步执行,并且可控地并发

WSL 的底层调用通过 wsl.exe 完成,但我不希望 UI 因为一次耗时命令变得不可用,所以执行层做了几件关键事情(见 executor.rs):

  • Tokio 异步进程:使用 tokio::process::Command 执行 wsl.exe,读取 stdout/stderr,避免阻塞。
  • 超时与取消:对不同类型命令设置不同超时(重操作最长可到 30 分钟),并启用 kill_on_drop(true),保证取消/超时不会留下“僵尸 wsl.exe”。
  • 并发限流:用信号量限制同时在跑的 WSL 命令数量,避免在高频操作下把系统资源打满,连带 UI 受影响。
  • 输出解码与体积上限:输出做解码与截断上限,避免异常输出把内存和日志撑爆。

这套策略的目标不是“跑得更快”,而是“再怎么用也不容易拖垮 UI”。

2) 状态刷新是事件驱动 + 节流的

“卡顿”的另一大来源是刷新逻辑:频繁刷新 = 频繁跑命令 = 频繁改模型 = UI 压力。这里我把刷新做成两条线(见 tasks.rswsl/dashboard/mod.rs):

  • 周期监测:以固定间隔触发,但只在相关 Tab 可见时刷新,减少无效工作。
  • 状态变更通知:当发行版列表发生变化时,用通知机制触发 UI 更新,而不是一股脑轮询。
  • Debounce 节流:对 UI 刷新做最小间隔限制,降低频繁更新导致的内存压力。

同时,WslDashboard 维护了“手动重操作”计数与“重操作锁”,避免迁移/克隆期间系统自动刷新造成的额外负担,并在操作结束后做一次最终同步。

国际化不是“加个翻译表”,而是完整的产品能力

我在 v0.4.0 里把国际化作为一个完整工程来做:从资源组织、构建校验、到 UI 的 RTL/字体策略,都需要闭环。

1) 资源组织与加载:英语兜底 + 语言覆盖

  • 翻译资源位于 assets/i18n/*.toml,运行时由 RustEmbed 内嵌进二进制(见 i18n/mod.rs)。
  • 加载逻辑是“先加载英文,再覆盖目标语言”,从而做到缺失 key 时至少不至于空白。
  • 语言 code 做了归一化处理(例如 zh-Hans/zh_CN 等),减少系统语言差异导致的错配。

2) 编译期完整性校验:缺 key 直接在构建阶段暴露

我不希望 i18n 的质量完全依赖手工检查,所以在构建脚本里加了 i18n 完整性检查(见 build.rs):以 en.toml 为基准,扫描所有语言文件,输出缺失 key 的警告。这样每次发布前,翻译缺失会被尽早发现。

3) RTL 与复杂脚本的 UI 策略

RTL 支持不是“把文字右对齐”就完事了:很多布局需要镜像,控件的 padding、icon 与文字位置、标题栏按钮顺序都要统一策略。项目里通过全局 AppI18n.is-rtl 控制 UI 分支(见 theme.slint 与各 Slint 组件)。

此外,复杂脚本(阿拉伯语/乌尔都语/希伯来语、印地语、孟加拉语等)在可读性上对字号更敏感,因此 UI 侧提供了 font-scale,根据语言自动放大字体,以减少“看得见但读不舒服”的情况(见 theme.slint)。

同时,为了兼容“西方语言系统环境下显示 CJK 大字体”的问题,应用会根据语言选择合适的默认字体,避免出现中文/日文/韩文渲染不友好的情况(见 data.rs)。

迁移/克隆这些重操作,我做了哪些工程化保护

迁移、克隆、导出这些功能,真正麻烦的是“长链路”和“不确定性”:磁盘空间是否足够?临时文件放哪里?操作是否会与其他任务打架?

我在实现上做了两个偏工程化的选择:

  • C 盘空间探测与临时路径策略:在需要临时文件的操作里,会先探测 C 盘剩余空间;当空间不足时,把临时目录放到更合适的位置,降低失败概率(见 system.rsdistro/mod.rs)。
  • 重操作锁与并发约束:对“重操作”路径做锁与限流,避免用户高频点击或批量操作时造成资源争抢,从而把 UI 拖慢或把操作拖死(见 wsl/dashboard/mod.rsexecutor.rs)。

这些“看起来不显眼”的策略,决定了它是否适合长期使用、是否能承受高频场景。

代码结构:我希望它既能跑,也能持续迭代

如果你想快速理解项目结构,从这里开始会很顺:

  • 启动与装配main.rs 负责配置加载、日志、i18n、UI 初始化、事件注册与后台任务启动。
  • WSL 领域层src/wsl/* 是对 wsl.exe 的抽象、解析与操作封装;WslDashboard 负责状态管理与变更通知。
  • UI 层src/ui/app.slint 为根 UI,src/ui/components/src/ui/views/ 组织界面;src/ui/handlers/ 负责把 UI 事件路由到 Rust 逻辑。
  • 配置与持久化config/mod.rs 管理 ~/.wsldashboard/settings.tomlinstances.toml,包含迁移逻辑与目录创建。

我希望它对用户是“即开即用的单文件应用”,对贡献者则是“结构清晰、好定位、好扩展”的 Rust 桌面工程。

我希望你怎么用它 / 怎么加入它

如果你是 WSL 重度用户,它会帮你把日常管理从“命令 + 记忆”变成“面板 + 流程”。如果你是桌面应用开发者,它也可以作为一个 Rust 原生 UI 项目样板:Slint + Skia 的 UI 实践、Tokio 驱动的系统调用、以及 i18n 工程化策略。

我也非常欢迎贡献:

  • 新语言翻译与术语校对(配合构建期校验能更安心地扩展语言)。
  • 更复杂的 WSL 场景支持(例如迁移策略、安装来源、异常恢复)。
  • UI 体验细节(RTL/复杂脚本在更多控件上的一致性、可访问性等)。

如果你愿意一起把 WSL 的体验做得更“像一个现代工具”,那我们就很适合一起做这件事。


新版本v0.5.0 功能预告:USB设备管理(基于usbipd-win将windows系统插入的usb设备,提供给WSL2中的linux使用)


demo

5 个赞

感觉用来装微软商店里没有的发行版还挺有用的,比如Linux mint之类的,如果能获取出rootfs的话

看起来非常符合我日常使用的需求。

不过怎么感觉正文关于技术细节的介绍是让 AI 读完代码后总结的 :thinking:

2 个赞

我倒是好好用过 WSL2 一段时间,最后还是关掉了 Windows 的 Hyper-V 引擎用 VMWare WorkStation 的自带引擎了,VMWare 对网络控制更好,内存占用也更低,控制感也更强,起码它只带一个管理界面,而 WSL2 得装类似你的这个软件的界面才用得舒服

这工具很不错
下载了用下

感谢支持,需要什么功能,可以在这里回帖评论 或者 提交 issue

3. 主要功能特性:

  • 一站式管理: 支持启动、停止、重启 WSL;设置默认发行版;安装、克隆、导出及迁移发行版。
  • 即将推出的新功能(v0.5.0): USB 设备管理(基于 usbipd-win,让 WSL 也能使用 Windows 上的 USB 硬件)。

我感觉切换default、克隆、安装、启停 都是低频操作。。。可能是我 wsl 用的不够深入?

我用 wsl 最大的感觉就是无感使用。

很棒的工作

v0.5.0 更新日志:

1、设置界面增加WSL2全局设置入口(~/.wslconfig)。
2、发行版配置 /etc/wsl.conf 。
3、优化已安装的发新版列表刷新策略(侧边栏选中首页,且非关闭至系统栏托盘,才会定时刷新)。
4、USB设备管理(基于usbipd-win提供Windows系统插入的USB给WSL中的Linux使用;刷新策略与发新版列表一致)。
5、设置界面下拉菜单交互优化。
6、启动流程优化,去除冗余逻辑。

下一个版本初步计划 : 网络 或 Docker


对于我来说wsl就是docker启动器,但是我没用docker desktop按照用的是命令行安装
如果能直接管理docker就好了

docker 的管理,在开发计划中,可以保持关注

WSL Dashboard v0.5.1 开源更新, Bug专场&新功能预告

今天是3月12日植树节,让我们一起为地球添点绿。祝您节日快乐,心想事“橙”!

A、更新日志
1、优化vscode打开发行版的启动方式(VS Code安装WSL插件后,基本上100%能正常打开)。
2、微软商店安装发行版卡顿问题修复。
3、移动,克隆发行版,同时处理厂商图标。

B、功能预告
网络功能开发中,预计三月底—四月底发布(网络功能及交互相对比较复杂,预留足够时间开发测试)

C、新功能提交
有什么新功能诉求,可以在下方评论 或者 提交 issues。

D、重要的事情
项目主页 : GitHub - owu/wsl-dashboard: A GUI manager for WSL. A modern, high-performance, and lightweight WSL instance management dashboard. · GitHub

如果项目对您有帮助,请帮我加一个星标(大佬们,帮我助力一把,争取早日突破一千个星标)。

E、伙伴邀请
如果您对Rust 及 开源 充满兴趣,可以沟通加入一起开发该工具。

1 个赞

卡巴斯基好像会报可疑特征,用之前还是得注意加白

有个疑问。我自己的VSCode已经安装了WSL,并且已经在运行了,但软件没有检测出来。有可能是因为我用的VSCode是scoop里面安装的?不清楚这里检测的原理是什么

开源代码,exe文件由github action 的 workfollow 编译,所以值得信赖。

端口转发功能预览,预计在 4 月中下旬发布

1 个赞

使用vscode打开发行版,需要安装下面的插件

{
"name":" Microsoft WSL(Identifier:ms-vscode-remote.remote-wsl)",
"url":"https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl"
}

点击vscode按钮,会执行下面的命令判定windows安装的vscode是否安装了必须的插件

code --list-extensions | grep "ms-vscode-remote.remote-wsl"
1 个赞

作为一款现代、高性能的 WSL 实例管理工具,WSL Dashboard 一直致力于为开发者提供更便捷、更高效的 WSL 管理体验。近日,我们很高兴地宣布 v0.6.0 版本正式发布,带来了一系列实用功能和体验优化。

网络管理能力全新升级

本次更新的最大亮点是新增了网络管理功能,让 WSL 与 Windows 之间的网络互通更加顺畅:

  • 端口转发管理:直观的界面帮助你轻松配置端口转发规则,无需手动编辑复杂的配置文件

  • 端口防火墙开放:自动处理防火墙规则,确保转发的端口能够正常访问

  • 自动激活:通过 Windows Task Scheduler 实现 Windows 启动时自动激活配置的端口转发,无需手动干预

  • HTTP 代理配置:实现打开终端自动使用 HTTP 代理,解决了开发过程中网络环境切换的痛点

自动化能力显著增强

为了让 WSL 的使用更加智能化,v0.6.0 版本引入了多项自动化功能:

  • 开机启动优化:发行版的开机启动调整为使用 Windows Task scheduler 触发,更加可靠

  • /scheduler 冷启动方式:全新的启动参数,用于实现开机自动启动发行版、端口转发激活、USB 设备自动连接等自动任务

  • USB 设备自动连接:修复了多个 USB 设备自动连接时的 BUG,现在可以更稳定地使用外部设备

用户体验细节优化

除了核心功能的升级,我们还关注了许多用户体验的细节:

  • 侧边栏功能配置:设置页面新增侧边栏功能配置,让你可以根据自己的使用习惯定制界面,拯救强迫症

  • 发行版设置增强:增加脚本钩子帮助链接,让高级用户能够更方便地配置自定义脚本

  • 发行版导出选项:增加是否启用压缩的可选项,满足不同场景的需求

  • 发行版信息查看:增加 IP 显示,让你可以更直观地了解实例的网络状态

  • 安装冲突检测:微软商店安装发行版时,判定为同一个发行版源时会终止安装并告知冲突,推荐直接克隆已安装的发行版

  • 克隆 BUG 修复:修复了发行版克隆时目标目录的 BUG,确保克隆过程更加稳定

  • 界面细节优化:管理员模式盾牌图标替换,视觉效果更加统一

技术架构与性能

WSL Dashboard 基于 Rust 和 Slint 构建,保持了一贯的高性能和低资源占用特性:

  • 极低内存占用:静默启动(系统托盘)仅约 10MB 内存,窗口模式下根据字体复杂度占用约 18MB 到 38MB

  • 现代原生 UI:直观的 GUI,支持深色/浅色模式,流畅的动画,由 Skia 驱动的高性能渲染

  • 系统托盘集成:全方位的托盘支持,支持双击切换显示/隐藏以及功能完整的右键菜单

如何获取

你可以通过以下方式获取 WSL Dashboard v0.6.0:

  1. 前往 GitHub 仓库 页面下载最新版本

  2. 或从源码构建:


git clone https://github.com/owu/wsl-dashboard.git

cd wsl-dashboard

.\build\scripts\build.ps1

WSL Dashboard 是一款开源免费的工具,完全为 WSL 社区打造。如果你觉得它对你有所帮助,欢迎在 GitHub 上给项目点亮一颗星,这将是对我们最大的鼓励。





版本更新日志:

  1. 增加网络(端口转发、端口防火墙开放)管理功能、支持Windows启动时自动激活(实现方案为Windows Task scheduler)配置的端口转发。

  2. 增加HTTP代理配置,实现打开终端自动使用HTTP代理。

  3. 发行版的开机启动,调整为使用Windows Task scheduler触发。

  4. 增加 /scheduler 冷启动方式,用来实现开机自动启动发行版、端口转发激活、USB设备自动连接等自动任务。

  5. 设置页面增加侧边栏功能配置(拯救强迫症)。

  6. 发行版的设置,增加脚本钩子帮助链接

  7. 发行版的导出,增加是否启用压缩的可选项。

  8. 发行版信息查看,增加IP显示。

  9. 微软商店安装发行版,判定为同一个发行版源时终止安装,告知冲突(推荐直接克隆已安装的发行版)。

  10. 发行版克隆时,目标目录的BUG修复。

  11. USB自动连接多个时的BUG修复。

  12. 管理员模式盾牌图标替换、自述文件*.md更新

1 个赞

v0.7.0更新日志
1、发行版设置弹窗,增加是否使用HTTP 代理的勾选框。
2、设置界面增加“色彩模式跟随系统”的勾选框。
3、关于界面优化(新增加入官方交流群、检测更新按钮等)。
4、新增GitHub Issue 内容创建模板。
5、重型操作(导出、移动、克隆、删除或安装等)互斥检测及提示,防止风险操作(例如导出的过程中,某些功能会触发启动发行版)。
6、修复最小化到任务栏时:系统托盘不能激活主窗口及二次启动软件不能显示主窗口的问题。
7、修复部分场景(打开了终端等)退出软件时的卡顿问题。
8、端口转发等表单,输入框优化及限制。
9、“usbipd-win” 安装提示文案优化。