0 前言
《Linux桌面环境》第4节曾提到窗口管理器,本对其进行更深入的分析。X窗口系统中窗口管理器并非必须,它其实也是一个X客户端[15]:
图0.1[15]
和其它X客户端不同的是,X窗口管理器设置了“Substructure Redirection”,从而使得X服务将其它X客户端的请求被转给X窗口管理器处理[15]:
图0.2[15]
X窗口管理器可以处理窗口的移动、缩放等请求[1]。
1 分类
根据窗口管理器绘制和更新窗口的方式,窗口管理器可以分为以下四类:[1][4]
类型 | 说明 | 实例 |
平铺式窗口管理器 (Tiling window manager[4]) |
以不重叠的方式将窗口一个挨一个组织的窗口管理器则称为平铺式窗口管理器,每个窗口会被自动调整大小来铺满整个屏幕。 | larswm Awesome i3 参考资料[4]有更多案例 |
堆叠式窗口管理器 (Stacking window manager) |
通过特定的顺序绘制窗口,并且各个窗口可以相互重叠的窗口管理器称为堆叠式窗口管理器。 | 4Dwm FVWM Openbox |
动态窗口管理器 (Dynamic window manager) |
结合上述两种窗口管理器,可以动态切换窗口放置方式。 | dwm xmonad |
复合窗口管理器 (Compositing window manager[6]) |
应用程序窗口先画到离屏缓冲区,然后由复合器合成显示到屏幕之上。 注:该类型窗口管理器是当前的主流!其合成和Android的SurfaceFlinger类似! |
DWM(Windows) KWin(KDE),可关闭合成 |
2 合成
复合管理器的最大特点就是:应用程序窗口先画到离屏缓冲区,然后由复合器合成显示到屏幕之上:
图2.1 窗口合成[15]
合成器除了可以对窗口进行基本的合成之外,还可以做一些特效,例如透明、圆角、模糊等,具体效果因窗口管理器而异,这需要消耗额外的计算,对于低配的来说,这可能是一个不小的负端,关闭合成功能会更加流畅,例如KWin窗口管理器就支持关闭合成功能,可通过下面命令查看合成的状态和合成后端,还可以关闭/开始合成:
# UOS/Kubuntu
# 查看
qdbus org.kde.KWin /Compositor org.kde.kwin.Compositing.active # 合成状态[16]
qdbus org.kde.KWin /Compositor org.kde.kwin.Compositing.compositingType # 合成类型
# 设置,注:不会修改“~/.config/kwinrc”配置文件
qdbus org.kde.KWin /Compositor org.kde.kwin.Compositing.suspend # 关闭合成[16]
qdbus org.kde.KWin /Compositor org.kde.kwin.Compositing.resume # 开启合成[16]
3 安装
当前的主流窗口管理器类型是复合窗口管理器,可通过下面命令安装使用:
(1)kwin
sudo apt-get install -y kwin
(2)mutter
sudo apt-get install -y mutter # 安装mutter窗口管理器[8]
(3)ukwm
sudo apt-get install -y ukwm ukwm-common libukwm-1-dev libukwm-1-0
4 启动
mutter、ukwm(源自mutter)等窗口管理器都支持“--replace”参数,它可替换当前正在运行的窗口管理器(甚至可以自己替换自己!)
kwin_x11 --replace &
# or
mutter --replace & # 动态替换,重新无效[8]
# or
ukwm --replace &
上述方法是临时的,可通过下面方式改为持久的:
(1)方法1:
sudo update-alternatives --config x-window-manager # [17]
(2)方法2:gsettings
# UbuntuKylin20.04
gsettings get org.ukui.session.required-components windowmanager # 结果:ukwm
gsettings set org.ukui.session.required-components windowmanager kwin_x11 # UbuntuKylin20.04验证OK
参考资料
[1]UKUI 桌面环境之窗口管理器(UbuntuKylin官网)
[2]UKUI 桌面环境之窗口管理器(UKUI官网)
[3]Archlinux|Window manager
[4]Archlinux|Comparison of tiling window managers
[5]Archlinux|Comparison of X window managers
[6]Compositing window manager(WIKIPEDIA)
[7]Stacking window manager(WIKIPEDIA)
[8]How to change window manager for GNOME
[9]How to switch windows manager on-the-fly?
[10]7 Things You Should Know Before Switching to a Window Manager
[11]How to Change Window Manager
[12]How to change Window manager through terminal?
[14]Linux Window Managers to Use All the Screen Space You Have
[15]How X Window Managers Work, And How To Write One (Part I)