wsl2下Ubuntu获得完整桌面体验(WSLg+KDE)

wsl2下Ubuntu获得完整桌面体验(WSLg+KDE)

wsl2下Ubuntu获得完整桌面体验(WSLg+KDE)

不使用Xvnc或Xorg,本教程参考
Full desktop shell in WSL2 using WSLg (XWayland)-github
无需安装其他软件,全程在wsl2中实现

kde
证明

环境

windows10专业版22H2
wsl:2.6.3.0
Ubuntu:24.04.3 LTS
KDE:5(XWayland只支持这个)

前言

很久以前就在想要是能同时操作Windows和Linux而不用双系统就好了,现在通过WSL2实现了体验不错的双桌面系统,至少在我的笔记本上,wsl的体验要比在VBox或者VM强,还有显卡直通,要舒服的多。

参考了Github上的教程,但是他只做了GNOME桌面的教程,由于我的电脑分辨率是非整数倍缩放,而GNOME对于非整数倍缩放的支持异常糟糕,而且打开设置竟然要10秒以上,太臃肿了,所以我换成了KDE,写下这篇文章。

需要注意的是一旦使用了这个教程,WSLg将全权被桌面接管,无法体验Windows与linux那种无缝交互的感觉,即应用直接投影到桌面,但我觉得用任务试图分开Windows和linux也不错。


这个教程是基于XWayland(X11)的,而不是Wayland,会有一些BUG,比如非整数倍缩放时,kde的任务栏不会缩放,但是其他界面正常缩放。分辨率可能会有问题,但可以修复。

另,无法共用剪切板,因为wslg被桌面拦截导致无法拉起剪切板服务,你可能需要一些软件来实现这个功能,比如KDE Connect。可能会在26.04或者下一个wsl版本修复。
又或者你可以选择不将wslg应用拦截在系统桌面,这样体验不完整,不像是一个桌面系统,部分应用,比如在kde中打开火狐会通过wslg投影到windows而非运行在kde,体验差。

WSLg 可能无法如预期般工作,因为 Wayland 套接字对一切程序都禁用了,而且并非所有应用都能支持。但如果你想原生使用 Wayland 应用,可以用命令

exportXDG_RUNTIME_DIR=$HOME/runtime-dir 

启动你的 WSLg 应用。


注意:
KDE登陆器SDDM无法唤起,只有纯Wayland环境下能唤起会话窗口,故本教程更换为lightDM。

纯Wayland教程,Github作者也写了,有一些无法实现的功能,比如无法全屏,没有登陆器,不支持从 Windows 复制粘贴剪贴板

第一步:安装 KDE Plasma + LightDM

sudoaptinstall kubuntu-desktop xwayland lightdm -y
在这里插入图片描述
选择lightDM

第二步:修复 WSLg 的 X11 Unix Socket

WSLg 将 X11 socket 挂载在 /mnt/wslg/.X11-unix/X0,但该路径在 /tmp/.X11-unix/ 下为只读链接。需通过 systemd 服务修复:

sudo systemctl edit --full--force wslg-fix.service 
[Unit]After=wslg.service [Service]Type=oneshot ExecStart=-/usr/bin/umount /tmp/.X11-unix ExecStart=/usr/bin/rm -rf /tmp/.X11-unix ExecStart=/usr/bin/mkdir -m1777 /tmp/.X11-unix ExecStart=/usr/bin/ln -s /mnt/wslg/.X11-unix/X0 /tmp/.X11-unix/X0 ExecStart=/usr/bin/chmod 0666 /mnt/wslg/runtime-dir/wayland-0.lock [Install]WantedBy=multi-user.target 
sudo systemctl enable--now wslg-fix.service 

我们还需要移除所有对 Wayland 的引用,否则一些应用(比如 gnome 终端 )会在桌面壳层外打开(投影到windows中):

sudoln-s /dev/null /etc/systemd/user/wslg-session.service 

第三步:替换 Xorg 为 XWayland 启动脚本

让显示管理器调用 Xwayland 而非传统 Xorg

sudonano /usr/bin/Xorg.Xwayland 
#!/bin/bashfor arg doshiftcase$argin# Xwayland doesn't support vtxx argument. So we convert to ttyxx instead vt*)set -- "$@""${arg//vt/tty}";;# -keeptty is not supported at all by Xwayland -keeptty);;# -novtswitch is not supported at all by Xwayland -novtswitch);;# other arguments are kept intact *)set -- "$@""$arg";;esacdone# Check if the runtime dir is present, and create it if notif[!-d$HOME/runtime-dir ]thenmkdir$HOME/runtime-dir ln-s /mnt/wslg/runtime-dir/wayland-0 /mnt/wslg/runtime-dir/wayland-0.lock $HOME/runtime-dir/ fi# Point the XDG_RUNTIME_DIR variable to $HOME/runtime-direxportXDG_RUNTIME_DIR=$HOME/runtime-dir # Find an available display numberfordisplayNumberin$(seq1100)do[!-e /tmp/.X11-unix/X$displayNumber]&&breakdone# Here you can change or add options to fit your needscommand=("/usr/bin/Xwayland"":${displayNumber}""-geometry""2560x1600""-fullscreen""$@") systemd-cat -t /usr/bin/Xorg echo"Starting Xwayland:""${command[@]}"exec"${command[@]}"
注意分辨率设置
在这里插入图片描述

设置权限并激活替代方案

sudochmod +x /usr/bin/Xorg.Xwayland sudo dpkg-divert --local--add--rename /usr/bin/Xorg sudo update-alternatives --install /usr/bin/Xorg Xorg /usr/bin/Xorg.Xwayland 100

X11 环境:一键写入 .xprofile 固定分辨率

nano ~/.xprofile 

写入保存

xrandr --output XWAYLAND0 --mode 2560x1600 --rate59.99--primary
chmod +x ~/.xprofile source ~/.xprofile 

第四步:配置 LightDM自动登录(可选)

因为wslg默认读取最大分辨率,会显得登录界面小的看不清,lightDM还不和kde绑定读取统一配置文件,倒不如设置成自动登录。如果你喜欢的话可以自己设置美化。

sudonano /etc/lightdm/lightdm.conf 
[Seat:*] autologin-user=your_username user-session=plasma 

第五步:设置默认启动目标

不设置的话,开启wsl一瞬间就会启动登陆器
sudo systemctl set-default multi-user.target 

第六步:启动 KDE Plasma 桌面

sudo systemctl start graphical.target 
在这里插入图片描述


需要自行设置缩放,缩放除了对任务栏不生效,其它均生效(x11应用),运行起来虽然锁定60帧,但流畅程度比虚拟机强太多了,至少我按下键盘他能立马回应我,完全没有迟滞感。

第七步:关闭会话

sudo systemctl stop lightdm 

第八步:修复音频

先清理无效缓存和链接

pulseaudio -k2>/dev/null rm-rf$HOME/runtime-dir/pulse rm-rf ~/.config/pulse 

创建 PulseAudio 客户端配置,指向 WSLg 自带音频服务器

mkdir-p ~/.config/pulse nano ~/.config/pulse/client.conf 
default-server = unix:/mnt/wslg/PulseServer autospawn =yes enable-shm =false daemon-binary = /bin/true 

保存
接下来完善xprofile

nano ~/.xprofile 

新增

exportPULSE_SERVER=unix:/mnt/wslg/PulseServer exportPULSE_COOKIE=/mnt/wslg/PulseCookie chmod666 /mnt/wslg/runtime-dir/pulse/native 2>/dev/null 
在这里插入图片描述


保存退出,确保 .xprofile 执行权限正常

chmod +x ~/.xprofile 

喇叭无红线,没像上面的截图一样被划掉就说明成功了
选择喇叭,勾选显示虚拟设备即可
嫌声音小可勾选提高最大音量,非常流畅舒适。

在这里插入图片描述

额外:显卡直通

手动创建合法的 NVIDIA 环境变量脚本

nano ~/.nvidia-env 

粘贴以下内容

#!/bin/bash# NVIDIA 驱动核心环境变量(固定格式,无需修改)exportNVIDIA_DRIVER_CAPABILITIES=all exportNVIDIA_VISIBLE_DEVICES=all # 修复 PATH 环境变量(优先包含系统默认路径和 WSL NVIDIA 相关路径)exportPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:$PATH# 修复 库文件路径(NVIDIA 驱动库文件所在目录)exportLD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH

给脚本添加执行权限

chmod +x ~/.nvidia-env 

修正 .xprofile 文件

nano ~/.xprofile 
xrandr --output XWAYLAND0 --mode 2560x1600 --rate59.99--primary# 加载 NVIDIA 环境变量source ~/.nvidia-env # 修复 XDG_RUNTIME_DIR 权限(如果自定义了该目录)if[-d$HOME/runtime-dir ];thenchmod700$HOME/runtime-dir # 链接到系统默认的运行时目录(可选)ln-sf$HOME/runtime-dir /run/user/$UIDfi
chmod +x ~/.xprofile 

重启

在这里插入图片描述

结语

本质上仍是RDP投影,但体验比远程桌面强太多了,至少能稳60帧。

微软越来越强了,放在一年前不用远程桌面软件,仅靠wslg是绝对实现不了的,现如今竟然有一套可行的方案,在windows上提供一个不错的完整桌面的体验,如今各种发行版也提供了wsl2版本的,我甚至看到了有人实现了arch+niri,虽然只有60帧,但有了显卡直通能做不少事,有了完整的桌面环境也比wslg的投影强了不少,虽然本教程的方向可能不太对,但总归是能从中体会到乐趣吧。

各种问题

1.剪切板互通
暂时只能用第三方软件实现,本质是桌面系统全拦截导致wslg的剪切板服务也被拦了,除非放弃完整桌面体验,否则只能等大佬修复。
这个问题可能是kde独占,因为klipper存在,不能被底层clipper拦截,我在装gnome时候没有尝试剪切板,因为他太臃肿了。
所有GTK的桌面可能都没有kde这种QT在wslg下体验好,毕竟是rdp协议,全量重绘还是不适合。希望微软能换一个协议。

2.快捷键优先被windows拦截

  • 修改注册表,降低windows的优先级。
  • AutoHotkey设置在wslg窗口Win 键交给 KDE,在其他 Windows
    窗口中时,Win 键保留 Windows 功能
  • 修改快捷键,不与windows冲突即可。

3.音频问题
已修复,可能存在其它修复方式。

4.桌面如果有文件或者图片,进入后桌面会卡顿一会儿,但不耽误其它程序运行

可能是由图标缓存引起,毕竟是虚拟盘。
也可能是Baloo 索引服务引起的,每次重启都扫描重建。
未修复

待补充

Read more

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

摘要:本文聚焦OpenClaw从测试环境走向生产环境的核心痛点,围绕“性能优化、安全加固、监控运维”三大维度展开实操讲解。先明确生产环境硬件/系统选型标准,再通过硬件层资源管控、模型调度策略、缓存优化等手段提升响应速度(实测响应效率提升50%+);接着从网络、权限、数据三层构建安全防护体系,集成火山引擎安全方案拦截高危操作;最后落地TenacitOS可视化监控与Prometheus告警体系,配套完整故障排查清单和虚拟实战案例。全文所有配置、代码均经实测验证,兼顾新手入门实操性和进阶读者的生产级部署需求,帮助开发者真正实现OpenClaw从“能用”到“放心用”的跨越。 优质专栏欢迎订阅! 【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】【YOLOv11工业级实战】 【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#工业上位机高级应用:高并发通信+性能优化】 【Java生产级避坑指南:

By Ne0inhk
ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门: 《freertos专栏》《STM32 HAL库专栏》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言  一、实验基础说明 1.1、互斥体简介 1.2 本次实验设计思路 二、硬件原理分析(看过之前博客的可以忽略) 三、实验程序编写 3.1 互斥体 LED 驱动代码(mutex.c) 3.2.1、设备结构体定义(28-39

By Ne0inhk
Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 后端工程师扔给你一个 Swagger (OpenAPI) 文档地址,你会怎么做? 1. 对着文档,手写 Dart Model 类(容易写错字段类型)。 2. 手写 Retrofit/Dio 的 API 接口定义(容易拼错 URL)。 3. 当后端修改了字段名,你对着报错修半天。 这是重复劳动的地狱。 swagger_dart_code_generator 可以将 Swagger (JSON/YAML) 文件直接转换为高质量的 Dart 代码,包括: * Model 类:支持 json_serializable,带 fromJson/

By Ne0inhk
Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

文章目录 * 前言 * make/makefile * 文件的三个时间 * Linux第一个小程序-进度条 * 回车和换行 * 缓冲区 * 程序的代码展示 * git指令 * 关于gitee * Linux调试器-gdb使用 * 作业部分 前言 做 Linux 开发时,你是不是也遇到过这些 “卡脖子” 时刻?写 makefile 时,明明语法没错却报错,最后发现是依赖方法行没加 Tab;想提交代码到 gitee,记不清 git add/commit/push 的 “三板斧”,还得反复搜教程;用 gdb 调试程序,输了命令没反应,才想起编译时没加-g生成 debug 版本;甚至连写个进度条,都搞不懂\r和\n的区别,导致进度条乱跳…… 其实这些问题,

By Ne0inhk