本文将以图文并茂的形式,讲解 deepin 深度桌面操作系统的架构设计和基本模块的功能,帮助开发者纵观全局,更好的理解设计理念和方向,代码实现和模块依赖细节在此忽略,详细代码请各位开发者以https://github.com/linuxdeepin中的代码实现为准。
一个完整的桌面系统从技术剖面看,从下到上主要分这几层:
内核驱动层 | 主要用于驱动硬件,除了CPU、内存、磁盘外,最主要的要是要广泛兼容不同的网卡、显卡、声卡和外设等硬件设备。 |
---|---|
显示服务层 | 从内核引导到plymouth(我们俗称的开机动画)后,只要你见到登录界面输入密码的时候,这时候X Server已经起来了, X Server简单来理解就是Linux系统中掌握着绘制图形界面生杀大权的“天神”,所有程序要绘制图形的时候都要发送消息到 X Server, X Server才会给你画出来。同时X Server也是事件输入(键盘鼠标)输出(显示器)的抽象层,开发者可以不用考虑底层驱动和显卡驱动细节,直接就可以使用X11/XCB的API进行应用开发,只不过更多的开发者是使用Gtk+/Qt这些在X11/XCB更上层的API进行应用开发。 |
显示管理器 | 简单的理解就是你看到的登录界面提示你输入密码的那个位置。 |
资源管理器 | 主要由一系列的底层守护程序来监控硬件的状态,并汇报给上层的桌面环境和应用进一步操作,比如常见的就有网络、电源、磁盘、蓝牙、声音、键盘、打印等。 |
桌面环境 | 以深度桌面环境为例,主要包括桌面环境后台服务和守护进程、桌面环境对外提供图形开发工具库、二进制工具、DBus API服务和桌面环境UI界面层几个部分组成的,后面我会详细讲每一个细节。 |
应用商店 | 主要提供系统的软件安装、卸载、升级等操作,保证用户可以安全方便的进行软件管理,同时提供了商店的评论和评分等功能。 |
应用程序 | 主要包括深度开发的系列应用、合作开发的国内应用、Android应用、Windows应用和网页应用。 |
首先看显示管理器,当X Server启动以后,根据系统启动服务的顺序,显示管理器就在 X Server 之后启动。
深度系统使用的是由Ubuntu开发的LightDM,其他主流的显示管理器还有 Gnome 的 GDM 和 KDE 的 KDM,使用LightDM的原因主要是 LightDM 非常的轻量,不绑定任何桌面环境,而且提供Gtk+、Qt、Html5等各种前端界面的定制接口,非常方便。
显示管理器主要是根据系统中已配置用户的权限对正在登录的用户提供权限认证和多用户切换功能,一旦认证通过后就从 greeter (LightDM 定制的配置接口)中执行下一步启动程序(通常是桌面环境的初始化程序),以显示桌面环境。
Deepin 开发了一个基于Qt5的前端界面程序, deepin-greeter 主要长这样:
除了基本的用户认证、多用户切换、日期和关机功能以外,还会提供:
当显示管理器认证成功以后,就会调用 greeter 的 exec 参数,深度桌面环境就是 startdde, startdde 从名字看很容易理解,就是启动深度桌面环境的引导程序,为了让深度桌面环境可以正常启动和显示,调用startdde时会执行以下操作:
startdde 启动以后,首先会启动 dde-session-initializer 这个进程,这个进程的主要目的是提供给任务栏和启动器提供后台服务,主要包括:
dde-session-initializer 就相当于任务栏和启动器的后台守护进程,提供了任务栏和启动器的核心功能,如果没有这个程序,我们日常的应用图标点击、开机启动包括程序窗口的切换都无法进行。
dde-session-initializer 本来是 dde-session-daemon 的一部分,为了加快用户登录到桌面的速度,从 dde-session-daemon 中分离出来,用以加速任务栏和启动器的显示。
dde-session-daemon 和 dde-system-daemon 就是整个桌面操作系统的后台守护程序,这两个进程维护了所有硬件的状态,包括前面说的网络、电源、磁盘、蓝牙、声音、打印、授权、共享文件、键盘鼠标等,相当于对资源管理器的各种守护进程进行了更高层次的代码封装,把面向底层硬件状态的接口转换成面向用户设计导向的接口。
根据Linux的最小权限划分,又把所有的后台服务分成 dde-session-daemon 和 dde-system-daemon 两个进程,dde-session-daemon 只掌握那些不需要超级权限的功能模块,比如声音、键盘鼠标、日期时区等。dde-system-daemon 掌握那些需要超级权限的功能模块,比如电源、账户、文件操作、亮度等。通过超级权限的不同进程沙箱的划分,保证执行超级权限的进程被限制在最小化的范围,避免因系统权限传导而导致的很多安全事件。
dde-session-daemon 和 dde-system-daemon 做的事情举例说明:
dde-sessin-initalizer、dde-session-daemon以及dde-system-daemon从功能上,相当于Gnome的 gnome-session-daemon 所做的事情,只不过深度团队根据用户的需要以及很多优化加速设计,用 golang 重写了整个后台守护进程的代码。可以说 DDE 和 Gnome以及KDE一样,都是调用底层的库(network-manager、upower、udisk、bluez、pluseaudio、cups、polkitd、gvfsd) 对桌面环境和应用提供更为抽象和高级的服务。
在深度桌面环境的后台守护进程基础之上,桌面环境会对外提供一个API层,包括图形开发工具库、二进制工具和DBus API接口,供桌面环境和应用程序直接调用,而不用自己重头开发,其中DBus API部分都通过DBus总线在应用调用特定的接口时动态唤醒(默认不常驻内存),任何语言编写的应用都可以轻松调用,根据上面图所示,从左到右分别进行介绍。
DTK (Deepin Tool-Kit) 是基于Qt5开发的一整套UI图形库,方便统一的编写深度桌面和深度系列应用,主要的功能有:
感兴趣的开发者查看源代码:https://github.com/linuxdeepin/deepin-tool-kit,基于我们的DTK比直接基于Qt5开发,能够更快的开发出美轮美奂的产品, 同时也欢迎社区开发者大神吐槽和提交补丁。
主要是 dde-session-daemon 和 dde-system-daemon 在开发过程中发展出来的二进制工具,方便深度桌面环境以外的应用可以直接使用这些工具,减少核心技术的重复开发:
udev
来获取电源状态以及电池信息x11 randr api
更高级的接口封装,提供显示器的详细信息x11 xi/xi2 api
更高级的接口封装,提供输入输出设备的属性获取及设置功能这一部分主要是由dde-session-daemon和dde-system-daemon提供的DBus接口给深度控制中心前端界面使用的,外部应用程序也可以直接使用这部分API来快速开发,而不用自己研究和编写与系统底层软硬件打交到的代码,简单的说几个功能,感兴趣的朋友可以直接查看深度控制中心的界面代码:https://github.com/linuxdeepin/dde-control-center
只要控制中心界面显示的所有硬件状态,都可以通过dde-api提供的DBus接口服务查询到,而这些DBus API后面的源代码都是深度操作系统研发人员经过非常多的时间打磨好的,不用自己痛苦的去裸写底层库(network-manager、pluseaudio、bluez、upower、udisk等)代码,大大节约了应用开发者编写高级功能的时间和投入成本。
深度桌面环境的最后一部分就是深度桌面环境的UI展示层,主要有:
dde-kwin | 基于 KWin 实现,增加了对 DDE 和 gtk 应用程序的兼容性,支持了和deepin桌面环境中各个组件的交互,且在此基础上实现了一套符合deepin设计的用户界面。KWin 原生支持 2D/3D 模式切换,可直接代替 deepin-wm 和 deepin-metacity 两个窗管的所有功能 |
---|---|
dde-desktop | 提供桌面基本的文件网格显示和基本的文件操作,dde-desktop通过libdde-file-manager这个库来保证所有的文件显示和文件操作效果和深度文件管理器(dde-file-manager) 保持一致 |
dde-dock | 主要提供图形化的任务栏图标管理和状态维护、在屏幕中位置以及两种风格的切换 |
dde-launcher | 主要提供系统已经安装应用的展示、搜索和启动等功能 |
dde-control-center | 提供对所有硬件资源控制的前端界面,包括账户、主题、网络、蓝牙、声音、外设、默认设置程序、日期时间、电源以及系统升级等模块 |
dde-osd | 当按下音量、亮度等多媒体按键时在屏幕中间显示快速提示 |
deepin-menu | 统一所有软件右键菜单的UI细节 |
deepin-notificaiton | 通过右上角提供系统的通知服务,根据不同应用显示不同的快速跳转按钮 |
deepin-policykit-agent | 主要按照深度的UI设计规范做个了密码认证对话框,保证所有程序,不论是Gtk+还是Qt写的,在密码验证的时候都弹出UI细节一模一样的对话框 |
deepin-icon-theme | 世界上风格最统一,数量最多的图标,包括应用商店上千款应用的图标,具体请查看https://github.com/linuxdeepin/deepin-icon-theme/tree/master/deepin |
deepin-gtk-theme | 主要是针对深度自己的设计规范来重新制作的整套窗口主题(Gtk+2、Gtk+3、Qt4、Qt5) |
deepin-default-settings | 深度桌面环境默认的设置,比如默认的壁纸、图标主题等默认设置 |
qt5-integration | 给Gtk+和Qt源码编写了补丁,保证所有程序弹出的文件打开对话框都是完全一致的体验,不论是Gtk+还是Qt编写的程序,再也不用为不同图形库开发的程序弹出不同风格的文件打开对话框而烦恼 |
深度商店是Linux下第一款有产品质量和交互体验优秀的应用商店。
除了支持深度系列应用, 还通过 deepin-wine 支持50+多款Windows应用,通过内置 Android runtime支持200+多款Android应用(比如愤怒小鸟,各种视频客户端),通过和Intel合作开发 deepin-xwalk 直接支持html5应用(比如Gliffy等)还可以自己记住窗口大小(而不是打开一个贼大的浏览器)
深度应用商店从技术架构上,主要分为lastore-daemon、lastore-session-helper、deepin-appstore三个部分:
https://www.deepin.org/zh/developer-community/architectural-design-15/