扒一扒国产 Linux 操作系统架构是怎么设计的 ?

关注+星标公众,不错过精彩内容

扒一扒国产 Linux 操作系统架构是怎么设计的 ?  扒一扒国产 Linux 操作系统架构是怎么设计的 ?

是不是美哭了就是自己从头构建桌面环境和只换皮肤主题的差别。

好了,前方专业技术高能, 请各位抓紧扶好,我要开始讲桌面环境架构了。讲之前先放一张架构图:

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

首先看一下显示管理器,当X Server启动以后,根据系统启动服务的顺序,显示管理器就在 X Server 之后启动,深度系统使用的是由Ubuntu开发的LightDM, 其他主流的显示管理器还有 Gnome 的 GDM 和 KDE 的 KDM, 使用LightDM的原因主要是 LightDM 非常的轻量,不绑定任何桌面环境,而且提供Gtk+、Qt、Html5等各种前端界面的定制接口,非常方便。显示管理器主要是根据系统中安装的用户的权限对正在登录的用户提供权限认证和多用户切换功能,一旦认证通过后就从 greeter (LightDM 定制的配置接口)中执行下一步启动程序(通常是桌面环境的初始化程序),以显示桌面环境。Deepin 开发了一个基于Qt5的前端界面程序, deepin-greeter 主要长这样:

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

当显示管理器认证成功以后,就会调用 greeter 的 exec 参数,深度桌面环境就是 startdde, startdde 从名字看很容易理解,就是启动深度桌面环境的引导程序,为了让深度桌面环境可以正常启动和显示,startdde调用时会执行以下操作:

● 基本的桌面会话管理,比如大家熟知的注销、重启等操作

● 按照 xsettings 主题规范设置整个系统的主题,保证桌面环境以及桌面环境的应用,不论Gtk+还是Qt可以正常的加载用户设置的主题

● 根据 freedesktop 的各种规范,规范应用程序的启动方法, 包括执行 *.desktop 文件的命令,启动提醒等

● 多屏的管理,保障桌面环境在多屏情况下,可以在正常的主屏显示任务栏和桌面程序

● 开机启动服务的顺序管理,比如会优先启动 dde 核心组件, 才运行启动其他应用程序,防止所有开机程序在登录的一瞬间同时启动,而这时候往往很多系统服务(比如DBus) 都还没准备好,大家一团乱抢CPU资源不但无法快速启动,还会导致其他程序都无法启动,想象一下3个人同时挤一个公交车门是什么状态) 这时候startdde 就是登录后到dde守护进程启动之前的裁判,只有它授权的程序才能启动, 没有授权的都进入暂缓状态,直到更优先的程序启动完毕

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 做的事情我简单列举一下吧:

● 提供用户的创建、删除和管理功能

● 管理多个屏幕的不同状态,包括位置、方向、分辨率和亮度等

● 管理不同文件类型的默认程序和主题设置

● 管理网络的有线、无线、VPN、DSL等网络设置

● 管理蓝牙、声音、日期、时间时区等设置

● 管理电源、键盘鼠标设置

● 管理系统的升级和grub设置

● 提供多点触摸板手势的服务

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) 对桌面环境和应用提供更为抽象和高级的服务。

备注:很多社区的开发者经常质疑DDE就是基于Gnome的UI壳,没有自己的核心技术,希望懂编程的朋友查看深度的源代码 https://github.com/linuxdeepin/dde-daemon , 看看是否只是一个 Gnome 的壳。我非常尊重每一位技术开发者,但是真的对于那些完全不基于调查,只是简简单单基于对国内开发团队鄙视而轻言下结论的人感到痛心,这也是我今天写这篇文章的原因之一,希望国人基于事实支持好的产品和团队,停止一切不实的攻击和乱喷。

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

深度桌面环境的最后一部分就是深度桌面环境的UI展示层,主要有:

● dde-wm: 窗口管理器,我们写了两个窗口窗口管理器,根据用户的硬件性能和显卡驱动情况自动使用2D窗口管理器还是3D窗口管理器,像Gnome的话,你还要手动注销(关闭所有窗口)才能在3D和classic模式中切换,而深度桌面环境完全是自动的。每个工作区可以单独设置不同壁纸:

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

● dde-dock: 不论你喜欢Mac还是Windows风格,都可以随时切换

● dde-launcher: 不论你喜欢Mac还是Windows风格,都可以随时切换

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

● dde-control-center: 深度控制中心,到底有多方便, 我一会在下面说 ;)

● dde-osd: 当按下音量、亮度等多媒体按键时在屏幕中间显示快速提示

● dde-lock: 提供系统的锁屏服务

● deepin-menu: 统一所有软件右键菜单的UI细节

● deepin-notificaiton: 通过右上角提供系统的通知服务,根据不用应用显示不同的快速跳转按钮

● deepin-icon-theme: 世界上风格最统一,数量最多的图标,我们把应用商店上千款应用的图标全部画了一遍,不要拼装图标,不要拼装图标,不要拼装图标,欢迎围观: 

https://github.com/linuxdeepin/deepin-icon-theme/tree/master/deepin

为什么要自己写桌面环境/p>

很多人都在问我, 为什么深度要自己写桌面环境,其实回答很简单:

● 我希望给用户提供交互细节最简洁的操作体验,傻瓜式操作,不需要长时间学习

● 我希望用户会因为UI细节精致的Wow一声, 就像第一次看到iPhone一样

● 我希望用户看到很多贴心的小细节时,会觉得操作系统后面有一群人关心他们,贴心的功能会让他们会心一笑,而不是面对一台冰冷冷的机器

如果不自己写桌面环境,就达不到这些严苛的要求:

● 我要能改每一像素,只要用户觉得不爽,一切都是用户为向导,而不是以开发者的个人喜好为导向

● 快速改进,很多社区开发者都说你应该给Gnome或KDE提交补丁,对不起,明明可以10分钟做一个用户喜欢的功能的时候, 却要和各种专家开发者讨论1个月才合并补丁或者上游开发者根本就不理,Linux桌面就死在改一个功能慢的要死,最后大多数用户失去耐心,不陪你玩无奈的离开了

● 统一的交互体验,统一的设计语言, 不要拼装,很多linux老用户除了宣扬开源文化和民主的决策(其实每个项目都是由创建者独裁)外,甚至拿着一大堆各式各样的社区demo作品美曰“社区协作”,深度只想系统和所有应用是能够堪比Windows/Mac的产品质量的艺术品

当很多社区开发者数以十年的只赞扬开源文化和协作的时候,我真想说,世界要让更多普通用户接触和认可Linux的情况下,开源文化才能更快更广泛的推广, 而不是偏执的自虐以后,自欺欺人拿着质量参差不齐的应用去洗脑那些不认同的普通用户,洗脑不行就开始鄙视和嘲讽。

其实做一个简单的类比,如果有人让你买一部丑到爆,那用到要死的手机,但是告诉你这手机里的每行代码都开源的,有多少人会真正买想大多数开源爱好者都自己都不会买

很多时候,往往简单的换位思考就会认清开源社区的种种问题…

深度桌面环境的交互细节以及横向对比

下面我只简单的举一些深度桌面的小细节来说明为什么做桌面环境的必要性,以下这些特性不是什么黑科技,也不是深度才独有的,但都是研发团队通过用心思考,研究用户的痛点,通过简单的设计就能解决用户的问题,而不是浪费用户几小时甚至几天的时间去“忍受”系统。

● 默认折腾好QQ、字体设置、解码器:不用装好系统满世界折腾Wine、粘贴xorg配置和下载不知道包名叫啥的解码器

● 屏幕旋转不用歪着头逆天的移动鼠标:注意看下图,系统进行屏幕方向设置的时候,会弹出一个全屏界面,向左旋转就点一下鼠标左键,继续选装的话就继续点鼠标左键,什么时候旋转好了,点击鼠标右键确认,旋转屏幕的时候,全程不需要歪着头,也不用拿着鼠标晕头转向的找“确定”按钮,这个问题,即使Windows和Mac都做的非常不好, 其他linux系统也一样,有人仔细研究了这个二十多年的非人类痛点了吗始终认为,这才是一个桌面研发团队应该关注的,通过小小的创新就可以解决用户的大痛苦

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

● 设置时区的时候显示白天黑夜:当你添加其他时区时,除了提示比当前快还是慢,一眼就可以通过表盘判断当地时间是黑夜还是晚上

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

● 打字时禁用触摸板:国内好多性价比高的笔记本触摸板很容易误碰,手掌一不小心就碰到触摸板导致光标乱飞,你只要开了这个开关,打字的时候触摸板就不响应,你打字一停马上就可以响应,这样就可以解决硬件的问题,当然你也可以写一段脚本然后添加到开机服务中折腾半天,而在深度桌面环境,只需要一个开关的事情

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

像这种贴心的设置,在深度桌面环境中随处可见,而这些交互细节的背后需要的是对用户场景的思考、换位思考理解用户痛苦以及完全掌控所有代码才能做到。我一直都相信:好的系统是让用户觉得不多不少,刚刚好,而且很贴心。而不是堆砌满屏的开关选项,让用户看着就头疼,再天书文案纠结半天都不知道怎么做。

深度商店

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

● 如果你在有wifi的地方,安装器不用连接网络,自动从路由器中找出国家码设置时区,不需要网络连接和GPS就可以准确知道用户在哪个时区,不需要让用户手动设置时区

● 安装linux不需要知道分区知识,不需要知道 /、/var、/boot、/home、swap啥概念,选择任意空白分区即可安装,还可以根据内存大小自动选择是否设置swapfile(大内存不设置加速读取,小内存自动算swapfile最佳大小,当然也可以手动设置swap分区)

● 安装错误了,扫描二维码的时候就自动上传错误日志了,不需要来回倒腾错误日志

深度启动盘制作工具

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

● 经典的文件操作方式, 没有坑爹的设计

● 基于rlocate开发了内核模块,2TB的文件名2秒中搜索完毕,而且会根据文件添加删除启动实时维护搜索索引,不用手动定期更新索引

● 内置avfs模块,所有压缩格式文件管理器秒开,而不用等漫长的解压时间和额外解压的磁盘空间

● 未来版本直接扫描二维码下载文件到手机(或者反过来玩),不用连上USB后在不同目录来回穿梭

深度截图工具

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

● 无边框沉浸式观看影片, 只有鼠标移动到顶部或底部才显示控件,看电影最重要的是内容

● 窗口跟随视频比例缩放,永远没有黑边

● 最小化窗口切换到其他应用时自动暂停,切换回来后继续播放

深度音乐

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

● 自动同步图片目录,不用在目录树中眼花缭乱的找,自动根据图片拍摄时间按时光机排序

● 简单美观看图功能,其他乱七八糟功能没有

深度终端

扒一扒国产 Linux 操作系统架构是怎么设计的 ?  扒一扒国产 Linux 操作系统架构是怎么设计的 ?

● 图文并茂,markdown的语法,方便社区协作,美观易度

深度云打印/深度云扫描

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

● 企业用户,内网直接支持所有打印机和扫描仪

深度开源字体

扒一扒国产 Linux 操作系统架构是怎么设计的 ?  扒一扒国产 Linux 操作系统架构是怎么设计的 ?  扒一扒国产 Linux 操作系统架构是怎么设计的 ?

开发这些应用,深度投入了巨大的财力人力不求回报,只求国内的linux用户能够更加幸福一点,我们未来会联合国内的厂商开发更多的Linux应用,我们坚信Linux生态普及的那一天。

为什么开源的轮子不能用/p>

深度造了那么多轮子,为什么不用社区的/p>

● 社区技术大拿很多,但是技术强大的同时能把一个应用的UI和交互细节做好的开发者鲜有

● 社区大部分软件都是面向开发者,功能确实强大,但是对于小白用户来说太复杂了

● 深度希望十年之内解决linux桌面的问题,我们内部每天几百个commit的快速迭代,社区主导开发完了花都凉了

● 希望做出来再吹牛,不想天天在社区打嘴泡

十几年开源社区为什么做不好桌面/p>

● 主要用户群体是开发者,大多数开发者喜欢黑客般的各种功能堆在一起,而普通用户只需要简单易用的产品

● 太过于碎片化:大家不齐心,每个人都造半成品互相打压,没有形成合力,最后社区除了大量的半成品,并没有多少应用能够比Windows软件更好(真正能和Windows平台堪比的应用不超过50个)

● 鄙视小白的氛围不好,技术稍微好一点的人就打击小白用户,大量真正的桌面小白用户走了以后,最后导致大家都不关心桌面的细节体验

● 做的太少,说的太多,有行动,10年就是翻天覆地变化,而不是大家时间长了都失望了

开源社区擅长什么/p>

● 开源社区适合做远程协助,碎片化的事情,比如文档和翻译,深度社区全世界的翻译贡献者就超过300多名:https://www.transifex.com/linuxdeepin/public/ , 曾经创造西班牙语一星期就翻译完整个系统的奇迹

● 开源社区适合吐槽, 我说的是客观的吐槽,https://bbs.deepin.org/ 各种用户帮助开发团队发现更多测试版的bug和非常非常好的反馈建议

● 开源社区适合打包移植, https://www.deepin.org/dde/desktop-transplantation/ 目前深度桌面已经移植到 Arch, Manjaro, SparkyLinux, openSuse, Ubuntu, Gentoo, Fedora 等发行版

国内技术圈偏见

我在开源社区十几年看到国内技术圈很多偏见,最主要的有几个:

● 拿着自己的平铺式窗口管理器装X,鄙视小白用户:其实玩过的人都知道,就是一些配置,花一些耐心和毅力就能搞定,这些只能证明你比较能折腾,但折腾并不代表你的学识渊博和能力高超,更不是鄙视和嘲笑别人的资本

● 认为只有玩内核才是技术高手: 不懂linux的人这样认为,很多开发者也这样认为,真正开发内核的开发者都知道,内核开发和应用开发和其他任何开发都一样,唯一的不同就是更难调试,更复杂。不是只会内核开发的开发者才是最厉害的人,很多内核的开发都要和应用以及现实场景配合才有意义。更不是自己会编译内核就开始了不起了

● 认为做UI和桌面环境很容易: 其实很多嘲笑做UI的人,即使是一些开发者,我相信大部分人连XCB以及窗口移动,甚至窗口阴影都绘制不出来,在国内看到太多拿着无知当权威的喷子了,希望这些人长大以后学会谦虚。其实大家都是看着功成名就来评判的,苹果应该是这个世界上折腾UI细节最多的公司,但是没有人说苹果只会UI,为什么人就喜欢打压还没有成功的公司,然后跟风吹捧成功的公司和产品

● Linux就是应该折腾:Linux早期的折腾对于开发者来说是非常有帮助的,但是人都会老,都会累的那一天(要不是为什么达拉斯黑客大会那么多大牛最后用Mac, 是因为他们折腾没有你多吗,一旦折腾完Linux就应该花更多时间去学习新的知识或享受生活, 而不是一直都在折腾,然后鄙视不会折腾的人

前途漫漫,还需努力

深度从2004年到现在已经努力了13年了,未来还有很长路要走,希望最终的努力可以达到两个目标:

● 让国内喜欢开源的开发者能够做自己喜欢的事情,养活自己,养活家人

● 功能像Windows那样丰富,界面像Mac那样美观,而且源代码还全部开源, 帮助更多人学习开源技术

免责声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。

———— END ————

推荐阅读:

精选汇总 | 专栏 | 目录 | 搜索

精选汇总 | 嵌入式C语言

精选汇总 | STM32、单片机

欢迎关注我的公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

欢迎关注我的视频号:

扒一扒国产 Linux 操作系统架构是怎么设计的 ?

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24865 人正在系统学习中

来源:strongerHuang

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年2月10日
下一篇 2021年2月10日

相关推荐