Windows 内置Linux子系统的配置(From WSL1 to WSL2)

本文讲述了作者从WSL1升级到WSL2的过程,包括解决systemctl问题、配置阿里云下载源、SSH设置以及优雅使用Windows/Linux子系统的技巧,重点介绍了WSL1与WSL2的区别和升级步骤。

目录

我是如何从WSL1转到WSL2的?

WSL1与WSL2的功能区别:

配置下载源

SSH配置

优雅使用windows的Linux子系统


我是如何从WSL1转到WSL2的?

        第一次安装的子系统是WSL1的,因为不能使用systemctl ,以及因为WSL1没有完整的Linux内核,所以使得WSL1很多命令是无效的,比如lsmod等等.

于是试着解决systemctl的问题.

参考解决方案

(20 封私信) 如何解决win10 子系统用wsl安装ubuntu22.04不能用systemctl? - 知乎 (zhihu.com)

可能是因为当时是WSL1升到wsl2版本的原因,启用Distrod 成功后关闭bash终端导致子系统崩溃了,表现为启动终端就直接闪退.

用Mobaxterm 报错 Network error: Connection refused.

试了一些方法无效后于是重新安装. 卸载原来的子系统,在应用商店中重新安装.

在控制面板中设置 

1 适用用Linux的Windwos子系统

2.虚拟机平台

查看当前WSL的版本?

wsl --status

 

上面的那个wsl --status 判断不准确,

最准确判断版本的方法

wsl --list --verbose

 我这边就经历过wsl --status 显示是2,实际是1.

可以用通过功能判断,也可以通过 wsl --list --verbose判断,这个更加准确.

WSL1与WSL2的功能区别:

引用自Microsoft Learn

具体直接差异的有WSL2 比起WSL1 ip地址不共享, WSL2有完整的Linux内核,支持更多功能.比如docker等等.WSL2可以支持自己的驱动程序的加载.

WSL2 查看磁盘使用情况

发现多了与snap相关的,而snap 就依赖与systemd 程序.其他盘的文件如(c,d)依然是挂载在 /mnt目录下.

df -h

ubantu 子系统的根目录

查看单曲子系统版本?

lsb_release -a

这里需要注意的是两点,一个是ubantu的版本,一个是Codename.

在配置下载源时会用到Codename.

配置下载源

修改 /etc/apt/sources.list

先备份

sudo   /etc/apt/sources.list   etc/apt/sources.list.bak

sudo chmod 777  /etc/apt/sources.list (为了方便把读写权限一并赋予了)

修改

#阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

把  bioic 修改成自己当前系统对应的 ,就是上文所提到的Codename.

查看源

更新源

sudo apt-get update

SSH配置

sudo su  #切换到root用户,下载相关 都要切换到 root
apt-get install openssh-server  #下载服务端
apt-get install openssh-client 	#下载客户端

 ssh配置,通过sshd_config文件进行配置.

启动ssh服务

 sudo  /etc/init.d/ssh start

优雅使用windows的Linux子系统

  • 使用Mobaxterm 可选择WSL或SSH连接.推荐WSL.

这里甚至可以直接编辑文件.

  •  VSCODE SSH连接子系统.
你提出的问题非常关键: > ✅ **如何配置前端(Vite)和后端(Python AI 助手)的端口,使得它们能在 WSL 和原生 Linux 系统上正常通信?** 这涉及到: - 前端开发服务器(Vite) - 后端 API 服务(Flask/FastAPI) - Tauri 桌面应用 - WSLWindows 主机之间的网络互通 --- ## 🎯 目标:确保前后端在 WSL/Linux 上可以互相访问 | 组件 | 要求 | |------|------| | 前端 (Vite) | 可被 `http://localhost:1573` 或局域网 IP 访问 | | 后端 (Python API) | 可被前端调用 `http://<host>:5000/api/state` | | Tauri 应用 | 开发时连接到 Vite dev server,打包后加载本地静态资源 | --- ## ✅ 第一步:Vite 端口配置(开发模式) 你的 `package.json` 中已经设置了: ```json "dev": "vite --host 0.0.0.0 --port 1573" ``` ### 🔍 解释: - `--host 0.0.0.0`:绑定所有网络接口 → 允许外部访问(包括从 Windows 访问 WSL) - `--port 1573`:指定端口为 1573 ✅ 这是正确的!但要注意以下几点。 --- ### ✅ 验证 Vite 是否可访问 #### 在 WSL 中启动: ```bash npm run dev ``` 输出类似: ``` vite v5.x ready in 123ms ➜ Local: http://localhost:1573/ ➜ Network: http://172.19.123.45:1573/ ``` #### 从 Windows 浏览器访问: 打开浏览器输入: ``` http://172.19.123.45:1573 ``` 或 ``` http://localhost:1573 ← 如果启用了 WSL localhost forwarding ``` 📌 **必须能打开页面**,否则 Tauri 也无法连接。 --- ### 💡 提示:WSL 的网络模型 | 地址 | 说明 | |------|------| | `localhost:1573` on Windows | 自动转发到 WSL 中的服务(Windows 10/11 默认开启) | | `http://<IP>:1573` | 使用 WSL 分配的内网 IP(如 `172.19.x.x`),更稳定 | | `0.0.0.0` 绑定 | 必须设置,否则只能本机访问 | > ⚠️ 若无法访问,请检查防火墙或运行: > ```bash > sudo ufw allow 1573 > ``` --- ## ✅ 第二步:Python 后端 API 端口配置 假设你使用 Flask 提供 `/api/state` 接口。 ### 正确启动方式(允许跨 IP 访问): ```python app.run(host="0.0.0.0", port=5000, threaded=True) ``` 而不是: ```python app.run(host="127.0.0.1") # ❌ 外部无法访问 ``` --- ### 示例:`api_server.py` ```python from flask import Flask, jsonify, request app = Flask(__name__) @app.route("/api/state", methods=["GET"]) def get_state(): return jsonify({ "is_listening": False, "current_input_text": "Hello", "current_reply_text": "Hi there!" }) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000, debug=False) ``` 然后在 WSL 中运行: ```bash python api_server.py ``` 即可通过: - `http://localhost:5000/api/state` (Windows 浏览器) - `http://172.19.123.45:5000/api/state` (推荐) 访问后端 API。 --- ## ✅ 第三步:Tauri 配置 —— `tauri.conf.json` 你现在有: ```json "build": { "frontendDist": "../build", "devUrl": "http://172.19.123.45:1573", "beforeDevCommand": "npm run dev" } ``` ### ✅ 分析: | 字段 | 是否合理 | 说明 | |------|----------|------| | `devUrl` | ✅ 正确 | 使用 WSL 内部 IP,确保 Tauri(运行在 Windows)能访问 Vite | | `beforeDevCommand` | ✅ 正确 | 自动启动前端 | | `frontendDist` | ✅ 正确 | 打包时使用构建产物 | > 🚨 注意:如果你把 `devUrl` 写成 `http://localhost:1573`,可能会失败,因为: > > - Tauri 运行在 Windows > - Vite 运行在 WSL > - `localhost` 不自动穿透(虽然新版 WSL 支持,但不稳定) ✅ 所以使用 **WSL 的实际 IP** 更可靠! --- ### 💡 如何获取 WSL 的 IP 地址? ```bash hostname -I | awk '{print $1}' ``` 或者写一个脚本自动注入: #### `scripts/start-dev.sh` ```bash #!/bin/bash IP=$(hostname -I | awk '{print $1}') echo "Starting Vite on http://$IP:1573" # 替换 tauri.conf.json 中的 devUrl(可选自动化) sed -i "s|\"devUrl\": \".*\"|\"devUrl\": \"http://$IP:1573\"|" src-tauri/tauri.conf.json npm run dev ``` 再配合 `"beforeDevCommand": "./scripts/start-dev.sh"` --- ## ✅ 第四步:前端请求后端 API(CORS + 跨域) 你在 React 中请求 Python 后端: ```ts fetch("http://172.19.123.45:5000/api/state") ``` ### 必须解决的问题:CORS 即使同属局域网,不同端口 = 跨域。 #### 安装并启用 Flask-CORS: ```bash pip install flask-cors ``` ```python from flask_cors import CORS app = Flask(__name__) CORS(app) # 允许所有来源(开发阶段安全) ``` > ⚠️ 生产环境应限制 origin,例如只允许 `http://localhost:1573` --- ## ✅ 第五步:生产打包后的通信方式 开发时: ``` [Windows Tauri App] → 请求 → [WSL:172.19.x.x:1573] (Vite Dev Server) → 请求 → [WSL:172.19.x.x:5000] (Python API) ``` 打包后(Tauri 构建完成): ``` [打包的 Tauri App] → 加载内置 HTML/CSS/JS(来自 ../build) → 请求 → [本地 Python 后端:5000] ``` 所以你需要: ### 方案一:用户手动启动 Python 后端 - 文档说明:“请先运行 `python main.py`” - 简单直接,适合开发者 ### 方案二:Tauri 自动启动 Python 子进程(推荐) ```rust // src-tauri/src/main.rs use std::process::Command; fn start_backend() { std::thread::spawn(|| { // 假设你已将 Python 打包为可执行文件或脚本 let mut child = Command::new("python") .arg("ai_assistant.py") .spawn() .expect("Failed to start Python backend"); let _ = child.wait(); // 保持运行 }); } #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { tauri::Builder::default() .setup(|_| { start_backend(); Ok(()) }) .run(tauri::generate_context!()) .expect("error while running tauri application"); } ``` > ⚠️ 注意路径问题:需将 Python 脚本或 `.exe` 放入 `src-tauri/target/release/bundle/` 并正确引用 --- ## ✅ 最终架构图(WSL + Windows) ``` +-----------------------------------------------------+ | Windows | | | | [Tauri App] | | ↓ (loads UI from remote or local) | | → Dev: http://172.19.x.x:1573 | | → Prod: file:///dist/index.html | | ↓ (HTTP 请求) | | → http://172.19.x.x:5000/api/state | +-----------------------------------------------------+ ↑ | (网络) ↓ +-----------------------------------------------------+ | WSL 2 | | | | [Vite Dev Server] [Python API Server] | | Port: 1573 Port: 5000 | | Host: 0.0.0.0 Host: 0.0.0.0 | | Path: /build Provides: /api/* | +-----------------------------------------------------+ ``` --- ## ✅ 总结:确保运行的关键点 | 条件 | 配置要求 | |------|----------| | ✅ Vite 可访问 | `vite --host 0.0.0.0 --port 1573` | | ✅ 后端可访问 | `app.run(host="0.0.0.0", port=5000)` | | ✅ Tauri 能连前端 | `devUrl: http://<wsl-ip>:1573` | | ✅ 前端能连后端 | `fetch('http://<wsl-ip>:5000/api/...')` | | ✅ 解决跨域 | 使用 `flask-cors` | | ✅ 生产部署 | Tauri 内嵌 UI,连接本地后端 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值