searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

KWin窗口管理器

2023-05-19 06:14:37
368
0

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调试控制台

参考资料

[1]deepin桌面卡死如何处理

[2]Deepin桌面卡死该怎么办

0条评论
0 / 1000
李****海
14文章数
0粉丝数
李****海
14 文章 | 0 粉丝