wsl2配置桌面环境-kde
上一级页面:index-wsl
什么是KDE?
KDE 是一套由 Plasma 桌面环境、一系列的库、框架(KDE Frameworks)和一些应用组成的软件项目。KDE 上游有一份维护良好的 UserBase Wiki,在此可以找到大多数 KDE 应用的详细信息。
详见KDE (简体中文) - ArchWiki (archlinux.org)
安装依赖
sudo apt update
sudo apt -y upgrade安装依赖
sudo apt install xserver-xorg安装 KDE
见官方的帮助wiki,如果你是kubuntu发行版,那么直接安装kubuntu-desktop,
kubuntu-desktop和kde-full等的区别,可以看这篇ubuntu20.04安装kde桌面环境 · 学校笔记 · 看云 (kancloud.cn)
参照wiki安装KDE - 社区帮助维基 (ubuntu.com)
kde-full 是 kde-standard 的超集,kubuntu-full 是 kubuntu-desktop 的超集,
但是 kubuntu-desktop 确实与 kde-standard 是分开的
kubuntu-desktop 与 kde-standard的区别是,
- kubuntu最小补全了所有办公用的包,例如多了一个libreoffice,
 - kubuntu-desktop 包含一堆 ubuntu 特定的包,包括cups(打印机标准)和大量的打印机驱动以及其他硬件驱动(它们是ubuntu特有的)
 - kubuntu多了一套特有的全局主题(kubuntu-theme)
 
那么到底应该安装哪个呢?参考隔壁血统纯正的Arch,Arch上的kde分成了plasma和kde-applications两部分,后者是给kde的死忠粉准备的,包括kde的mail,calc等等
所以事情就很明朗了,正常情况下,不需要安装kde-applications(包括kde的mail,calc等),所以选择最小化安装,安装kde-plasma-desktop
标记依赖,准备卸载gnome
你的终端显示的是en_US.UTF-8
sudo apt-mark auto $(apt-cache depends kubuntu-desktop | grep -Po 'Depends:\s+\K[^ ]+$' | tr '\n' ' ')你的终端显示的是zh_CN.UTF-8
sudo apt-mark auto $(apt-cache depends kubuntu-desktop | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')这个命令的作用是将kubuntu-desktop包含的依赖全部标记为自动安装,这样可以用autoremove卸载
同理,标记其他的kde包
sudo apt-mark auto $(apt-cache depends kubuntu-desktop | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends kde-full | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends kde-standard | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends kde-plasma-desktop | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')同理可以这样做,标记ubuntu-desktop的依赖为自动安装
sudo apt-mark auto $(apt-cache depends ubuntu-desktop | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')继续处理gnome的依赖
sudo apt-mark auto $(apt-cache depends gnome-core  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends desktop-base  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends network-manager-gnome  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends libproxy1-plugin-networkmanager  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends cheese  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends file-roller  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-calendar  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-clocks  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-color-manager  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-documents  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-getting-started-docs  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-maps  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-music  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends shotwell  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-photos  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-screenshot  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-todo  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-weather  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends orca  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends rygel-playbin  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends rygel-tracker  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends simple-scan  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends vino  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends avahi-daemon  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends evolution  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-sound-recorder  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-tweaks  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends libreoffice-gnome  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends libreoffice-writer  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends libreoffice-calc  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends libreoffice-impress  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends libgsf-bin  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends nautilus-sendto  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends rhythmbox  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends seahorse  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends vinagre  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends xdg-user-dirs-gtk  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends cups-pk-helper  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends evolution-plugins  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gedit-plugins  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gstreamer1.0-libav  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gstreamer1.0-plugins-ugly  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends rhythmbox-plugins  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends rhythmbox-plugin-cdrecorder  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends totem-plugins  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends nautilus-extension-brasero  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends gnome-games  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')
sudo apt-mark auto $(apt-cache depends transmission-gtk  | grep -Po '依赖:\s+\K[^ ]+$' | tr '\n' ' ')在依赖管理上,若非必要,请勿卸载。替代方案是,尽量标记为自动安装
安装kde
添加源
sudo add-apt-repository ppa:kubuntu-ppa/backports
sudo apt-get update安装kde-plasma-desktop
sudo apt-get install kde-plasma-desktopWindows端启动 X Server,见:wsl2配置使用gui
安装过程中,可能会弹出窗口,要求配置显示管理器。选择“SDDM”选项。按下“Enter”键

如果选错了,可以输入下列命令重新进入选择界面:
切换显示管理器:
sudo dpkg-reconfigure <Default_Display_Manager>例如:
sudo dpkg-reconfigure gdm3
或
sudo dpkg-reconfigure lightdm
或
sudo dpkg-reconfigure sddm选择你的显示器管理器。选择“sddm”选项。按下“Enter”键
更换之后更新依赖
sudo apt update
sudo apt upgrade处理依赖(自动卸载)
此时更新依赖会提示你有大量的包可以自动卸载
sudo apt update
sudo apt upgrade首先标记其中需要的包,例如
- firefox需要保留,gwenview(图片查看器)需要保留
 - p7zip压缩软件,ark压缩文件管理器
 - konsole 终端模拟器和 dolphin 文件管理器
 - discover软件中心(packagekit、appstream )
 - ntfs-3g ,使系统可以识别 NTFS 格式的硬盘
 - discover支持snap,plasma-discover-snap-backend
 - Sweeper 可以清理系统中的用户使用记录,例如 Cookies 缓存等。
 
sudo apt install firefox 
sudo apt install gwenview 
sudo apt install ark
sudo apt install ntfs-3g
sudo apt install dolphin
sudo apt install sweeper
#======
sudo apt install p7zip 
sudo apt install konsole
sudo apt install packagekit appstream
sudo apt install plasma-discover-snap-backend再更新一次依赖,确定其他的包都不需要了
sudo apt update
sudo apt upgrade剩余的包可以进行卸载
sudo apt autoremove卸载一些包
kde自带了一些小游戏和其他的一些包,可以按需卸载
# 小游戏
sudo apt-mark auto kmines kpat ksudoku kmahjongg
# wacom数位板扫描工具
sudo apt-mark auto kde-config-tablet
# elisa音乐播放器
sudo apt-mark auto elisa修改默认运行级别为图形方式
查看开机默认运行级别:
systemctl get-default修改默认运行级别为图形方式:
systemctl set-default graphical.target- 注:如果不想用桌面了,记得卸载后切换会多用户方式
systemctl set-default multi-user.target 
配置Dbus
sudo dpkg-reconfigure dbus设置自动登录
SDDM 通过它的配置文件来支持自动登录,例如:
sudo mkdir /etc/sddm.conf.d/# /etc/sddm.conf.d/autologin.conf
[Autologin]
User=john
Session=plasma.desktop此配置使得在系统启动后自动以用户 john 开启一个 KDE Plasma 会话。X 的会话类型位于 /usr/share/xsessions/, wayland 的会话类型位于 /usr/share/wayland-sessions/。
目前尚不支持自动登录 KDE Plasma 的同时锁定会话
你可以添加一个脚本,在 KDE 自动启动时激活屏幕保护程序以作为一个解决方案:
#!/bin/sh
/usr/bin/dbus-send --session --type=method_call --dest=org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.Lock &X-window 配置文件
详见:xprofile (简体中文) - ArchWiki (archlinux.org)
非常感谢原作者
Xsession ~/.xsession ~/.xsessionrc
- 一些登入管理器会使用Xsession进行登入
 
GDM - /etc/gdm/Xsession
LightDM - /etc/lightdm/Xsession
LXDM - /etc/lxdm/Xsession
SDDM - /usr/share/sddm/scripts/Xsession- 有一些登录管理器像XDM就默认不使用Xsession而是使用 
~/.xsession来进行登入的设置, 具体可以看这里 ~/.xsessionrc只有debian分支才会使用的一个配置文件而且好像还要使用debian默认的登入管理器才会用到, 具体可以看看debian官方说明和论坛介绍
有时候会用到Xsession,先记录下来。
启动 KDE
因为我们是在WSL2中运行,ssdm配置systemd后可以正常运行在后台,但是开机并不能正常弹出登录窗口。
我们改用使用控制台登录的方式,并且打一些补丁,步骤参考:KDE (简体中文) - ArchWiki (archlinux.org)
首先测试一下能否正常的运行kde,终端中运行命令:
export DESKTOP_SESSION=plasma
exec startplasma-x11补丁修复,使得开机正常运行KDE
找到当前用户的配置文件,将下列命令写在配置文件中
- 在zsh中是
$ZDOTDIR/.zshenv,具体的路径见zsh的环境变量的加载-zprofile-zlogin-zshrc-zshenv 
export DESKTOP_SESSION=plasma找到当前用户的配置文件,在启动脚本处编写下列的脚本
- 在zsh中是
$ZDOTDIR/zprofile,具体的路径见zsh的环境变量的加载-zprofile-zlogin-zshrc-zshenv 
# start plasma on x11
sh $OH_MY_CONF/start-kde新增一个脚本$OH_MY_CONF/start-kde,这里的$OH_MY_CONF是用户自己定义的
# OH_MY_CONF,为了设置兼容
export OH_MY_CONF=$ZDOTDIRsudo vim $OH_MY_CONF/start-kde#!/bin/bash
pid_cnts=$(ps -ef | grep plasma | grep -v grep | awk '{print $2}' | wc -l)
if [ $pid_cnts -eq 0 ];then
    exec startplasma-x11
else
    # echo "count = $pid_cnts."
    echo "kde(plasma) is running."
fi此脚本的作用是让开机能够自动启动KDE
补丁修复,使得KDE的关机功能正常使用
参考KDE (简体中文) - ArchWiki (archlinux.org)
创建目录
sudo mkdir ~/.config/plasma-workspace
sudo mkdir ~/.config/plasma-workspace/shutdown新增一个脚本在~/.config/plasma-workspace/shutdown文件夹中
sudo vim ~/.config/plasma-workspace/shutdown/shutdown-plasma-kde#!/bin/bash
# 手动关机
sudo shutdown -h now解决一些问题
参考Linux系统的抢救和维护(桌面篇) | 止息的博客 (zhangjk98.xyz)
禁用KDE自带的文件搜索baloo
balooctl disable禁用桌面混成器
混成器(compositer)有OpenGL2、OpenGL3.1、xrender三个选项,混成器和显卡驱动设置不当经常会出一些小问题,比如Kwin屏幕撕裂、黑屏、卡死。如果你的鼠标卡住动不了了,可以在重启plasma之前禁用混成试试(默认的快捷键是Alt+Shift+F12)

对于混成器感兴趣可以看看fc老师的这篇博客:桌面系统的混成器简史,不过现在2021年了,wayland还是不建议日用
禁用自动启动上次会话
在kde的系统设置中搜索会话(开机和关机-> 桌面会话)

卸载之前的一些桌面配置工具
kde自带了实现这些功能的工具,见Uniform look for Qt and GTK applications (简体中文) - ArchWiki (archlinux.org)和GTK (简体中文) - ArchWiki (archlinux.org)
所以可以卸载下面这些工具了
sudo apt remove lxappearance
sudo apt remove qt5ct
sudo apt remove font-manger桌面美化
以后再写
如何卸载KDE
卸载KDE
sudo apt remove kubuntu-desktop自动卸载不必要的软件
sudo apt autoremove系统清理
sudo apt clean修复缺少的包
sudo apt -f installsudo apt --fix-broken install解决无法使用输入法
因为wsl2的x server在Windows端,并不在Linux端,所以有许多的配置问题,
首先需要设置DBUS_SESSION,与X server通信,以使用输入法
然后需要设置x server/x term/dpi
并且设置fcitx自启动
并且这些设置都应当所有用户有效并且shell和非shell都有效
如果你使用zsh,详情见zsh的环境变量的加载-zprofile-zlogin-zshrc-zshenv
wsl2 xclient(注意 xserver在 windows端)并不只是包含 shell,它还要应用在图形界面,所以不能放在 sh rc文件里
并且可能会出现切换一个新的shell,然后运行x server,就是说它的配置不能只在login时生效一次,所以不能放在profile
所以只能放在/etc/zsh/.zshenv
# ===========设置x server==============
# 由于wsl2的x server在Windows端,
# x server并不只是包含 shell,它还要应用在图形界面,所以不能放在 sh rc文件里
# 并且可能会出现切换一个新的shell,然后运行x server,就是说它的配置不能只在login时生效一次,所以不能放在profile
# 所以只能放在`/etc/zsh/.zshenv`
# =================================
# 设置DBUS_SESSION,与X server通信,以使用输入法
if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
eval `dbus-launch --sh-syntax`
fi
# x server/x term/dpi
if [  -f $OH_MY_CONF/.Xresources ]; then
   xrdb -merge -I$HOME  $OH_MY_CONF/.Xresources
fi
# 设置fcitx自启动
fcitx-autostart &>/dev/null参考、引用、致谢
(24条消息) Windows 10 WSL2 安装Linux Xfce图形界面_大鱼天的博客-CSDN博客_wsl2 xfce
https://autoize.com/xfce4-desktop-environment-and-x-server-for-ubuntu-on-wsl-2/
https://token2shell.com/howto/x410/customizing-xfce-desktop-for-ubuntu-wsl/
Xfce (简体中文) - ArchWiki (archlinux.org)