Skip to content

Commit 948589a

Browse files
committed
v0.11.0
- **Disk Mount**: Added disk mounting support for physical disks and VHD/VHDX images, with custom name, partition, filesystem type, mount options, and bare mount mode; automatically filters out USB flash drives, SD card readers, and system disks; supports auto-starting the default distro to probe mount point status; supports automatic restart of WSL and retry on mount failure; added "Mount Disk" entry in the sidebar with independent visibility control; - **Terminal Compatibility Fix**: Rolled back distro terminal launch logic to the legacy implementation, fixing issues where the terminal failed to start on certain WSL versions; - **WSL Version Detection Enhancement**: Expanded version check from closed interval only to three configurable modes (≥, ≤, closed interval); unsupported versions trigger a prompt; - **UI Polish**: Distro cards now show a "Boot" label to indicate distros that auto-start with Windows; improved USB device card Auto/Boot label and icon alignment; scheduled task status fix; - **Installer & Uninstaller Optimization**: All additional components are selected by default during installation; the `task_scheduler.ps1` script is automatically removed during uninstallation; - **Scheduled Task Optimization**: Added error status tracking logic for scheduled tasks; fixed the issue where the PowerShell scheduled script process persists after Windows startup;
1 parent 19017a3 commit 948589a

174 files changed

Lines changed: 6450 additions & 672 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/winget.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ jobs:
8383
Invoke-WebRequest -Uri "https://aka.ms/wingetcreate/latest" -OutFile $wingetcreatePath
8484
8585
Write-Host "Submitting manifests from: $manifestDir"
86-
& $wingetcreatePath submit $manifestDir --token "${{ secrets.WINGET_GITHUB_TOKEN }}"
86+
& $wingetcreatePath submit $manifestDir --token "${{ secrets.WINGET_GITHUB_TOKEN }}" --prtitle "New version: Owu.WSLDashboard version $version"
8787
8888
if ($LASTEXITCODE -ne 0) {
8989
Write-Error "wingetcreate submission failed!"

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "wsldashboard"
33
# version: 0.10.0-alpha.1 , 0.10.0-beta.1 , 0.10.0-rc.1
4-
version = "0.10.0"
4+
version = "0.11.0"
55
edition = "2024"
66
rust-version = "1.92"
77
description = "A modern, high-performance, lightweight, and low-memory WSL (Windows Subsystem for Linux) instance management dashboard."

README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ I18N : English | [简体中文](./manual/README_zh_CN.md) | [繁體中文](./ma
4040
- [💻 System Requirements](#-system-requirements)
4141
- [📦 Installation](#-installation)
4242
- [🛠️ Tech Stack & Performance](#️-tech-stack--performance)
43+
- [📢 Official Community Groups](#-official-community-groups)
4344
- [🤝 Community Support](#-community-support)
4445
- [❤️ Support this project](#️-support-this-project)
4546
- [⭐️ Labor of love](#️-labor-of-love)
@@ -110,8 +111,10 @@ English, Simplified Chinese, Traditional Chinese, Hindi, Spanish, French, Arabic
110111
- **Modern Native UI**: Intuitive GUI with Dark/Light mode support, smooth animations, and high-performance rendering powered by **Skia**.
111112
- **System Tray Integration**: Full support for system tray minimizing (~10MB RAM usage), double-click to toggle, and a functional right-click menu.
112113
- **Intelligent Startup**: Configure the dashboard to start with Windows, minimize to tray (silent mode with `/silent`), and auto-shutdown distributions on exit.
114+
- **Task Scheduler**: Flexible task scheduler management, supporting automatic execution of scripts and commands in WSL instances at specified times or intervals for automated operations.
113115
- **Comprehensive Instance Control**: One-click Start, Stop, Terminate, and Unregister. Real-time status monitoring and detailed insights into disk usage and file locations.
114116
- **Distro Management**: Set as default, migration (Move VHDX to other drives), and export/clone to `.tar` or `.tar.gz` archives.
117+
- **Disk Mount**: Directly mount and manage WSL instance VHDX virtual disks, supporting mount, unmount, and disk management operations, making it easy to transfer files between the host and WSL.
115118
- **Quick Integration**: Instant launch into Terminal, VS Code, or File Explorer with customizable working directories and startup script hooks.
116119
- **Distro Installation**: Install Linux distributions via Microsoft Store, GitHub, local files (RootFS/VHDX), or Online Mirrors (with auto speed-test to pick the fastest mirror and built-in RootFS download helper).
117120
- **Global Safety**: Mutex locks for safe concurrent migration/backup operations and automatic Appx cleanup on removal.
@@ -178,6 +181,18 @@ Log files are written to the configured log directory and can be attached when r
178181
<img src="assets/screenshot/donate.png" width="48%" />
179182
</p>
180183

184+
### Disk Mount
185+
<p align="center">
186+
<img src="assets/screenshot/mount.png" width="48%" />
187+
<img src="assets/screenshot/mount-add.png" width="48%" />
188+
</p>
189+
190+
### Task Scheduler
191+
<p align="center">
192+
<img src="assets/screenshot/task.png" width="48%" />
193+
<img src="assets/screenshot/task-add.png" width="48%" />
194+
</p>
195+
181196
## 🎬 Operation Demo
182197

183198
[Help us improve! Watch our intro video and share your thoughts.](https://github.com/owu/wsl-dashboard/discussions/9)
@@ -266,6 +281,18 @@ Ensure you have the Rust toolchain (Rust 1.92+ or newer) installed.
266281
- **Portability**: Optimized release build produces a single compact executable.
267282
268283
284+
## 📢 Official Community Groups
285+
286+
Welcome to the official WSL UI community groups! Join our channels to discuss usage tips, report issues, get the latest updates, and connect with the developers and other users.
287+
288+
| Global Group (Telegram) | Chinese Group (WeChat) |
289+
| :---: | :---: |
290+
| <img src="https://cdn1.wslui.com/static/images/group/group-telegram.png" width="240" alt="Telegram Group QR Code" /> | <img src="https://cdn1.wslui.com/static/images/group/group-wechat.png" width="240" alt="WeChat Group QR Code" /> |
291+
| Scan to join | Scan to join |
292+
293+
---
294+
295+
269296
## 🤝 Community Support
270297
271298
A big thank you to the following communities for their support:

assets/font/icons.ttf

1.67 KB
Binary file not shown.

assets/i18n/am.toml

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ add = "ምሳሌ መጨመር"
77
usb = "USB መሣሪያዎች"
88
network = "ኔትወርክ"
99
scheduler = "የተግባር መርሐግብር አውጪ"
10+
mount = "ዲስክ አሰካ"
1011
settings = "ቅንብሮች"
1112
about = "ስለ"
1213
donate = "ልገሳ"
@@ -67,6 +68,8 @@ tab_advanced = "የላቀ"
6768
tab_interface = "ተይይዞ"
6869
sparse_vhd = "በነባሪ ቀጭን VHD ማብቂያ"
6970
sparse_vhd_desc = "የሚፈጠር አዲስ ማንኛውም VHD ቀጭን ሆኖ በራስ-ሰር ይዘጋጃል።"
71+
mount_auto_probe = "የዲስክ መጫኛ ሁኔታን ለመፈተሽ ስርጭትን በራስ-ሰር አስጀምር"
72+
mount_auto_probe_desc = "ምንም ስርጭት በማይሰራበት ጊዜ የመጫኛ ነጥቦችን ለማግኘት ነባሪውን በራስ-ሰር ያስጀምሩ። ስርጭት እየሰራ ከሆነ ችላ ይባላል።"
7073
sidebar_features = "የጎን አሞሌ ባህሪያት"
7174
language = "የሶፍትዌር ቋንቋ"
7275
save = "ማስቀመጥ"
@@ -167,6 +170,7 @@ monthly = "በየወሩ"
167170

168171
[dialog]
169172
confirm = "ማረጋገጥ"
173+
restart = "ዳግም ማስጀመሪያ"
170174
save = "ማስቀመጥ"
171175
add = "መጨመር"
172176
cancel = "መሰረዝ"
@@ -253,7 +257,7 @@ dir_not_empty = "ስህተት፦ ዒላማ ማውጫ ባዶ አይደለም!"
253257
path_is_not_dir = "ስህተት፦ ዒላማ መንገድ አለ ግን ማውጫ አይደለም"
254258
mkdir_failed = "ማውጫ መፍጠር አልተሳካም፦ {0}"
255259
select_target_dir = "እባክዎ ዒላማ ማውጫ ይምረጡ"
256-
name_required = "የምሳሌ ስም ያስፈልጋል"
260+
name_required = "ስም ያስፈልጋል"
257261
install_name_invalid = "ስም ከ 25 ቁምፊዎች ያልበለይ መሆን አለበት እና A-Z, 0-9, -, _, . ብቻ መያዝ አለበት"
258262
install_name_exists = "ስም '{0}' አስቀድሞ አለ። አዲስ ስም ይጠቁማል።"
259263
info_failed = "መረጃ ማግኘት አልተሳካም፦ {0}"
@@ -277,7 +281,7 @@ sparse_success = "ለ '{0}' ቀጭን VHD በተሳካ ሁኔታ ተብቂዋል
277281
sparse_failed = "ቀጭን VHD ማብቂያ አልተሳካም፦ {0}"
278282
sparse_sharing_violation_hint = "WSL ለማጥፋት ሞክረን ቢሆንም VHDX በተከታታይ የተቆለፈ ነው። እባክዎ 'wsl --shutdown' በእጅ ማስኬድ ይሞክሩ፣ እና ሌላ ሂደት VHDX ፋይሉን እየተጠቀመ እንዳለ ያረጋግጡ።"
279283
wsl_compat_title = "ተኳነኝ ማስጠንቀቂያ"
280-
wsl_compat_msg1 = "የእርስዎ WSL ስሪት ({0}) በዚህ ሶፍትዌር ተኳነኝ ክልል [{1}, {2}] ውስጥ የለም"
284+
wsl_compat_msg1 = "የእርስዎ WSL ስሪት ({0}) በዚህ ሶፍትዌር ተኳነኝ ክልል {1} ውስጥ የለም"
281285
wsl_compat_msg2 = "ያልተደገፈ ስሪት የተኳነኝ ችግሮች ሊኖሩት ይችላል፣ አንዳንድ ባህሪዎች ዳታ ጥፋትን ሊያስከትሉ ይችላሉ፤"
282286
wsl_compat_msg3 = "WSL ወደ የተደገፈ ስሪት እንደገና እንዲያስቀምጡ ጠንክረው ይመከራሉ።"
283287
wsl_compat_issues_hint = "ተጨማሪ መረጃ ለማግኘት፣ የፕሮጀክቱን ይጎብኙ"
@@ -382,6 +386,8 @@ copy_wallet = "የቋሌት አድራሻ ቅዳ"
382386
copy_email = "የኢሜይል አድራሻ ቅዳ"
383387
scan_qr = "QR ኮድ ስ캔"
384388
visit_link = "አገናኝ ይጎብኙ"
389+
donation_note = "በእርስዎ ምክንያት፣ ፕሮጀክቱ የበለጠ ሊራመድ ይችላል"
390+
donation_record = "የልገሳ መዝገቦችን ይመልከቱ"
385391
loading = "በመጫን ላይ..."
386392

387393
[add]
@@ -572,3 +578,35 @@ task_deleted = "ተግባር በተሳካ ሁኔታ ተሰርዟል"
572578
task_updated = "ተግባር በተሳካ ሁኔታ ተዘምኗል"
573579
task_toggled = "የተግባር ሁኔታ ተቀይሯል"
574580
task_started = "ተግባር ተጀምሯል"
581+
582+
[mount_disk]
583+
mount_btn = "ዲስክ አሰካ"
584+
no_mounted = "ምንም የተሰኩ ዲስኮች የሉም"
585+
refresh = "አድስ"
586+
dialog_title = "ዲስክ አሰካ"
587+
tab_physical = "አካላዊ ዲስክ"
588+
tab_vhd = "VHD ምስል"
589+
no_disks_found = "ሊሰኩ የሚችሉ ዲስኮች አልተገኙም (USB ፍላሽ አንጻፊዎች፣ SD አንባቢዎች እና የስርዓት ዲስክ አይጨምርም)"
590+
bare_mode = "ባዶ ማሰኪያ (አባሪ ብቻ፣ አያሰካም)"
591+
custom_name = "ብጁ ስም"
592+
partition = "ክፍልፍል"
593+
filesystem_type = "የፋይል ስርዓት አይነት"
594+
mount_options = "የማሰኪያ አማራጮች"
595+
browse = "አስስ"
596+
mount = "አስቀምጥ"
597+
unmount = "አውርድ"
598+
delete = "ሰርዝ"
599+
delete_title = "ማሰኪያ ሰርዝ"
600+
delete_confirm_msg = "ይህ የማሰኪያ ውቅርን ያስወግዳል ነገር ግን በዲስክ ወይም VHDX ፋይል ላይ ያለ ማንኛውንም ውሂብ አይሰርዝም"
601+
vhd_path = "እባክዎ የ VHD ፋይል ይምረጡ"
602+
error_unmount_failed = "ዲስክ ማውረድ አልተሳካም"
603+
error_invalid_filesystem = "ልክ ያልሆነ የፋይል ስርዓት አይነት። የሚፈቀዱ: ext4፣ xfs፣ btrfs፣ vfat፣ ntfs"
604+
error_invalid_partition = "ልክ ያልሆነ የክፍልፍል ቁጥር። አዎንታዊ ኢንቲጀር መሆን አለበት (1-9999)"
605+
error_invalid_options = "ልክ ያልሆኑ የማሰኪያ አማራጮች። በነጠላ ሰረዝ የተለዩ አማራጮችን ይጠቀሙ፣ ለምሳሌ ro፣noatime ወይም data=ordered"
606+
querying_data = "ዲስኮችን በመጠየቅ ላይ፣ እባክዎ ይጠብቁ..."
607+
mount_success = "ዲስክ በተሳካ ሁኔታ ተሰክቷል"
608+
unmount_success = "ዲስክ በተሳካ ሁኔታ ተወርዷል"
609+
error_restart_wsl = "ድጋሚ ማያያዝ አልተሳካም። እባክዎ ዲስኩ በዊንዶውስ ጥቅም ላይ መዋሉን ያረጋግጡ።"
610+
error_already_mounted = "ዲስክ አስቀድሞ ተገጥሟል"
611+
error_name_duplicate = "የማውንት ስም '{0}' አስቀድሞ አለ"
612+
restart_confirm_msg = "ማውንት አልተሳካም። የWSL ማውንት ሁኔታ መታደስ ሊያስፈልገው ይችላል። WSL ን ለማስጀመር እና ማውንቱን በራስ-ሰር እንደገና ለመሞከር እንደገና አስጀምር የሚለውን ጠቅ ያድርጉ።"

assets/i18n/ar.toml

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ add = "إضافة مثيل"
77
usb = "أجهزة USB"
88
network = "الشبكة"
99
scheduler = "جدولة المهام"
10+
mount = "تثبيت القرص"
1011
settings = "الإعدادات"
1112
about = "حول"
1213
donate = "تبرع"
@@ -67,6 +68,8 @@ tab_advanced = "متقدم"
6768
tab_interface = "واجهة"
6869
sparse_vhd = "تمكين VHD المتفرق افتراضيًا"
6970
sparse_vhd_desc = "عند التمكين، سيتم تعيين أي VHD تم إنشاؤه حديثًا على متفرق تلقائيًا."
71+
mount_auto_probe = "بدء التوزيع تلقائيًا لفحص حالة تركيب القرص"
72+
mount_auto_probe_desc = "عند عدم تشغيل أي توزيع، سيتم بدء التوزيع الافتراضي تلقائيًا للكشف عن نقاط التثبيت. يتم تجاهله عند وجود توزيع قيد التشغيل."
7073
sidebar_features = "ميزات الشريط الجانبي"
7174
language = "لغة البرمجيات"
7275
save = "حفظ"
@@ -167,6 +170,7 @@ monthly = "كل شهر"
167170

168171
[dialog]
169172
confirm = "تأكيد"
173+
restart = "إعادة تشغيل"
170174
save = "حفظ"
171175
add = "إضافة"
172176
cancel = "إلغاء"
@@ -253,7 +257,7 @@ dir_not_empty = "خطأ: الدليل المستهدف ليس فارغًا!"
253257
path_is_not_dir = "خطأ: المسار المستهدف موجود ولكنه ليس دليلًا"
254258
mkdir_failed = "فشل إنشاء دليل: {0}"
255259
select_target_dir = "يرجى تحديد دليل مستهدف"
256-
name_required = "اسم المثيل مطلوب"
260+
name_required = "الاسم مطلوب"
257261
install_name_invalid = "يجب أن يكون الاسم <= 25 حرفًا ويحتوي فقط على A-Z و 0-9 و - و _ و."
258262
install_name_exists = "الاسم '{0}' موجود بالفعل. تم اقتراح اسم جديد."
259263
info_failed = "فشل الحصول على المعلومات: {0}"
@@ -277,7 +281,7 @@ sparse_success = "تم تمكين VHD المتفرقة بنجاح لـ '{0}'"
277281
sparse_failed = "فشل في تمكين VHD المتفرقة: {0}"
278282
sparse_sharing_violation_hint = "يظل VHDX مقفلاً بشكل مستمر حتى بعد محاولة إيقاف WSL. يرجى محاولة تشغيل 'wsl --shutdown' يدويًا والتأكد من عدم استخدام أي عملية أخرى لملف VHDX."
279283
wsl_compat_title = "تحذير التوافق"
280-
wsl_compat_msg1 = "إصدار WSL الخاص بك ({0}) ليس ضمن نطاق التوافق لهذا البرنامج [{1}، {2}]؛"
284+
wsl_compat_msg1 = "إصدار WSL الخاص بك ({0}) ليس ضمن نطاق التوافق لهذا البرنامج {1}"
281285
wsl_compat_msg2 = "قد تحتوي الإصدارات غير المدعومة على مشاكل توافق، وقد تؤدي بعض الميزات حتى إلى تلف البيانات؛"
282286
wsl_compat_msg3 = "يُوصى بشدة بإعادة تثبيت WSL إلى إصدار متوافق."
283287
wsl_compat_issues_hint = "لمزيد من المعلومات، يرجى زيارة صفحة"
@@ -382,6 +386,8 @@ copy_wallet = "نسخ عنوان المحفظة"
382386
copy_email = "نسخ عنوان البريد الإلكتروني"
383387
scan_qr = "مسح رمز الاستجابة السريعة"
384388
visit_link = "زيارة الرابط"
389+
donation_note = "بفضلك، يمكن للمشروع أن يمضي قدمًا"
390+
donation_record = "عرض سجلات التبرعات"
385391
loading = "جاري التحميل..."
386392

387393
[add]
@@ -572,3 +578,35 @@ task_deleted = "تم حذف المهمة بنجاح"
572578
task_updated = "تم تحديث المهمة بنجاح"
573579
task_toggled = "تم تغيير حالة المهمة"
574580
task_started = "تم بدء المهمة"
581+
582+
[mount_disk]
583+
mount_btn = "تثبيت القرص"
584+
no_mounted = "لا توجد أقراص مثبتة"
585+
refresh = "تحديث"
586+
dialog_title = "تثبيت القرص"
587+
tab_physical = "قرص فعلي"
588+
tab_vhd = "صورة VHD"
589+
no_disks_found = "لم يتم العثور على أقراص قابلة للتثبيت (باستثناء محركات أقراص USB وقارئات SD وقرص النظام)"
590+
bare_mode = "تثبيت بسيط (إرفاق فقط، لا تقم بالتثبيت)"
591+
custom_name = "اسم مخصص"
592+
partition = "قسم"
593+
filesystem_type = "نوع نظام الملفات"
594+
mount_options = "خيارات التثبيت"
595+
browse = "تصفح"
596+
mount = "تثبيت"
597+
unmount = "إلغاء التثبيت"
598+
delete = "حذف"
599+
delete_title = "حذف التثبيت"
600+
delete_confirm_msg = "سيؤدي هذا إلى إلغاء تثبيت وإزالة تكوين التثبيت، ولكنه لن يحذف أي بيانات على القرص أو ملف VHDX"
601+
vhd_path = "يرجى تحديد ملف VHD"
602+
error_unmount_failed = "فشل إلغاء تثبيت القرص"
603+
error_invalid_filesystem = "نوع نظام ملفات غير صالح. المسموح به: ext4، xfs، btrfs، vfat، ntfs"
604+
error_invalid_partition = "رقم قسم غير صالح. يجب أن يكون عددًا صحيحًا موجبًا (1-9999)"
605+
error_invalid_options = "خيارات تثبيت غير صالحة. استخدم خيارات مفصولة بفواصل، مثل ro,noatime أو data=ordered"
606+
querying_data = "جارٍ الاستعلام عن الأقراص، يرجى الانتظار..."
607+
mount_success = "تم تثبيت القرص بنجاح"
608+
unmount_success = "تم إلغاء تثبيت القرص بنجاح"
609+
error_restart_wsl = "فشلت إعادة التثبيت. يرجى التحقق مما إذا كان القرص قيد الاستخدام بواسطة Windows."
610+
error_already_mounted = "القرص مثبت بالفعل"
611+
error_name_duplicate = "اسم التحميل '{0}' موجود بالفعل"
612+
restart_confirm_msg = "فشل التحميل. قد تحتاج حالة تحميل WSL إلى التحديث. انقر فوق إعادة التشغيل لإعادة تعيين WSL وإعادة محاولة التحميل تلقائياً."

0 commit comments

Comments
 (0)