0 前言
由《Linux窗口管理器》可知窗口管理器的类型和实现都比较多,Kubuntu、UOS、银河麒麟均采用KWin作为窗口管理器,因此本文重点对其进行说明。
1 源码
# KDE
git clone https://invent.kde.org/plasma/kwin.git
# DDE
git clone https://github.com/linuxdeepin/dde-kwin.git # deepin-wm-dbus、kwinrc、kwin_no_scale
git clone https://github.com/linuxdeepin/deepin-kwin.git # kwin_x11
# UKUI
git clone https://github.com/ukui/ukui-kwin.git
2 特效
QEMU安装UOS/Deepin后首次开机会提示:
图2.1
可见特效模式是比较消耗性能的,建议关闭,具体方法有:
方法1:DDE控制中心关闭
方法2:环境变量KWIN_COMPOSE=N
方法3:Win + Shift + Tab
虽然建议关闭特效,但有些特效对于调试问题还是有一定作用的,例如“Show FPS”、“Show Paint”,有必要可以打开使用。
2.1 Show FPS
可通过KDE系统设置打开该特效,它会在右上角显示帧率,需要注意的是,它会反复触发KWin更新界面,因此它的帧率是当前系统所能合成的最大帧率,而并非当前应用的帧率。
2.2 Show Paint
可通过KDE系统设置打开该特效,和“Show FPS”不同的是,该特效还需配置触发快捷键,否则不会真正激活。该特效的效果就是在图像的更新区域闪烁以作提示。
3 配置
3.1 DDE控制中心
图3.1 DD控制中心
Tips:下面方式之一均可将上图“窗口特效”及其子选项屏蔽掉
方法1:设置环境变量KWIN_COMPOSE
#屏蔽窗口特效
export KWIN_COMPOSE=N
# @file: /etc/X11/Xsession.d/100ctyun-profile
方法2:添加如配置
[Compositing]
AllowSwitch=true
# @file: ~/.config/kwinrc
方法3:执行如下命令
gsettings set com.deepin.dde.control-center perssonal-general-effects Hidden
3.2 KDE系统设置
DDE控制中心对KWin的配置选项比较少,很多特效都无法通过它来配置,此时可安装使用KDE系统设置:
sudo apt install -y systemsettings
图3.2 KDE系统设置
3.3 配置文件
KWin当前的配置基本都记录在如下文件中,可以查看或修改:
[Compositing]
Enabled=true # true - 开启合成;false - 关闭合成
OpenGLIsUnsafe=false
# @file1(KDE、DDE): ~/.config/kwinrc
# @file2(UKUI): ~/.config/ukui-kwinrc
3.4 命令
安装
sudo apt-get install -y qdbus
查看
# 是否支持合成
qdbus org.kde.KWin /Compositor org.kde.kwin.Compositing.compositingPossible
qdbus com.deepin.wm /com/deepin/wm com.deepin.wm.compositingPossible # for Deepin/UOS
# 不支持合成的原因
qdbus org.kde.KWin /Compositor org.kde.kwin.Compositing.compositingNotPossibleReason
开关状态
qdbus org.kde.KWin /Compositor org.kde.kwin.Compositing.active # for both KDE and DDE[8]
qdbus com.deepin.wm /com/deepin/wm com.deepin.wm.compositingEnabled # for DDE only[15]
qdbus org.ukui.KWin /Compositor org.ukui.kwin.Compositing.active # for UKUI
开关设置
# 关闭(下面四个命令之一均可)
qdbus org.kde.KWin /Compositor org.kde.kwin.Compositing.suspend # for both KDE and DDE[8]
qdbus org.kde.KWin /dde SuspendCompositor true # for both KDE and DDE
qdbus org.kde.KWin /Compositor suspend # for both KDE and DDE
qdbus com.deepin.wm /com/deepin/wm com.deepin.wm.compositingEnabled False # for DDE only
qdbus org.ukui.KWin /Compositor org.ukui.kwin.Compositing.suspend # for UKUI only
# 打开(下面四个命令之一均可)
qdbus org.kde.KWin /Compositor org.kde.kwin.Compositing.resume # for both KDE and DDE[8]
qdbus org.kde.KWin /dde SuspendCompositor false # for both KDE and DDE
qdbus org.kde.KWin /Compositor resume # for both KDE and DDE
qdbus com.deepin.wm /com/deepin/wm com.deepin.wm.compositingEnabled True # for DDE only
qdbus org.ukui.KWin /Compositor org.ukui.kwin.Compositing.resume # for UKUI only
Tips:
-
上述命令不可以root用户运行,否则会失败;
-
除了可以从第1节的源码中挖掘相关命令之外,还可以可通过d-feet查看系统所支持的dbus命令:
sudo apt-get install -y d-feet
图3.3 d-feet
3.5 环境变量
环境变量 | 说明 |
---|---|
KWIN_COMPOSE |
O/O2ES,强制OpenGL/GLES合成 X,强制XRender合成,注:使用自编译的Xorg会切换失败! Q,强制QPainter合成,若不支持则改用默认合成方式(OpenGL),例如kwin_x11就不支持该合成方式 N,若环境变量“KDE_FAILSAFE”不为空,则用默认合成,否则禁止合成! |
4 虚拟桌面
虚拟桌面又叫工作空间,银河麒麟默认开启了四个,而UOS则默认开启了2个。
(1)查看
UOS可通过下面配置确认当前是处于哪个虚拟桌面:
方法1:
[Workspace]
CurrentDestkop=1 # 1、2、...、N,表示第几个桌面
# @file: ~/.config/kwinrc
注:该方法不适用于UKUI!
方法2:
qdbus org.kde.KWin /KWin org.kde.KWin.currentDesktop # for KDE、DDE
qdbus org.ukui.KWin /KWin org.ukui.KWin.currentDesktop # for UKUI
(2)切换
UOS可通过“Win + 左/右”快捷键切换,也可以通过下面命令切换:
# for KDE、DDE
qdbus org.kde.KWin /KWin org.kde.KWin.previousDesktop # 切换至上一个虚拟桌面
qdbus org.kde.KWin /KWin org.kde.KWin.nextDesktop # 切换至下一个虚拟桌面
# for UKUI
qdbus org.ukui.KWin /KWin org.ukui.KWin.previousDesktop # 切换至上一个虚拟桌面
qdbus org.ukui.KWin /KWin org.ukui.KWin.nextDesktop # 切换至下一个虚拟桌面
(3)应用
默认使用的是第一虚拟桌面,若出现应用卡死情况,可以切换到第二虚拟桌面使用或确认问题。
5 调试
5.1 重启
KWin发生异常可重启恢复:
killall kwin_x11 # [2]
# or
kwin_x11 --replace &
# or
kwin_no_scale --replace &
5.2 调试控制台
qdbus org.kde.KWin /KWin org.kde.KWin.showDebugConsole # for KDE、DDE
qdbus org.ukui.KWin /KWin org.ukui.KWin.showDebugConsole # for UKUI
它会在屏幕左上角显示一个调试控制台,列出了当前所有的窗口,可鼠标点击查看各窗口详情:
图5.1 UOS KWin调试控制台