深度桌面操作系統(tǒng)架構(gòu)設(shè)計(jì)

今天就結(jié)合深度桌面操作系統(tǒng)給大家講講桌面操作系統(tǒng)的架構(gòu)設(shè)計(jì)和原理細(xì)節(jié),一來向外界講講深度這么多年都做了哪些工作,二來希望通過客觀公正的事實(shí)向中國新一代的開源愛好者講述怎么用正確的三觀去貢獻(xiàn)自己的力量。

什么是桌面操作系統(tǒng)?

簡而言之,桌面操作系統(tǒng)就是大家平常個(gè)人電腦里面用的操作系統(tǒng)。
桌面操作系統(tǒng)應(yīng)該是所有操作系統(tǒng)類型中最為復(fù)雜、研發(fā)技術(shù)難度最高的一種操作系統(tǒng)了。
世界上非常優(yōu)秀的桌面操作系統(tǒng)有微軟的Windows和蘋果的Mac OS,其他的Linux桌面操作系統(tǒng),比如Fedora、Suse、Ubuntu包括我們自己的deepin操作系統(tǒng),雖然這十幾年取得了長足的進(jìn)步,但是相對(duì)于Windows和Mac OS,不論技術(shù)先進(jìn)性、交互設(shè)計(jì)還是產(chǎn)品質(zhì)量方面都還有非常大的差距。

桌面操作系統(tǒng)都有哪些部分組成?

一個(gè)普通用戶使用的桌面操作系統(tǒng)的組成部分主要包括:

  • 內(nèi)核、驅(qū)動(dòng)以及固件:主要用于驅(qū)動(dòng)硬件可以正常工作,除了CPU、內(nèi)存、磁盤外,最主要的是要廣泛兼容不同的網(wǎng)卡、顯卡、聲卡和外設(shè)等硬件設(shè)備
  • 軟件倉庫及眾多開發(fā)庫:如果沒有開源社區(qū)眾多大神打包好的軟件倉庫和各種開發(fā)庫,要基于Linux來開發(fā)一個(gè)操作系統(tǒng)甭說開源愛好者,甚至就是一個(gè)中型公司都很難做起來,可以說開源軟件倉庫從本質(zhì)上改變了操作系統(tǒng)和開源軟件的開發(fā)模式,豐富的軟件倉庫使開源開發(fā)者、組織和公司能夠使用最新技術(shù)的同時(shí)開發(fā)成本也降低了很多
  • 桌面環(huán)境:這里說的桌面環(huán)境就是大家平常一開機(jī)就用到的桌面、任務(wù)欄和開始菜單等,可以說一個(gè)高質(zhì)量和交互設(shè)計(jì)極佳的桌面環(huán)境可以極大降低用戶使用新的桌面操作系統(tǒng)的門檻,具體表現(xiàn)在哪些方面,我后面會(huì)詳細(xì)講 ;)
  • 應(yīng)用商店:對(duì)于用戶來說,絕對(duì)不僅僅是一個(gè)好玩的桌面環(huán)境(比如原來的compiz) 就能留下的,沒有好的應(yīng)用商店帶來的海量應(yīng)用和方便易用的安裝操作,普通用戶用幾天就會(huì)放棄,可以說應(yīng)用商店是留住普通用戶的最基本要求
  • 預(yù)裝應(yīng)用:在國內(nèi)來看,至少需要解決QQ、Office、網(wǎng)銀和一系列方便易用的多媒體應(yīng)用才能算是一個(gè)好用的桌面操作系統(tǒng)

桌面操作系統(tǒng)所用編程語言介紹

桌面操作系統(tǒng)都需要那些編程語言呢?
就以深度桌面操作系統(tǒng)為例:

  • 服務(wù)型的后端都用golang語言: golang語言能夠完美調(diào)用大量C語言編寫的底層庫,同時(shí)開發(fā)效率和運(yùn)行效率都俱佳,寫出來的程序很少會(huì)出錯(cuò),深度桌面系統(tǒng)的后端主要使用的就是golang語言來編寫的。
  • 前端界面主要用 Qt/C++ 來編寫,因?yàn)镼t相對(duì)于Gtk有更好的技術(shù)支持、代碼質(zhì)量以及API延續(xù)性都要比Gtk+3好很多,深度采用C++來編寫包括桌面環(huán)境和深度系列應(yīng)用的前端界面

深度在2014年之前,自己做了一個(gè)WebKit/Html5的本地渲染引擎,可以直接用CoffeeScript像網(wǎng)頁開發(fā)一樣來編寫桌面環(huán)境的界面,但是最后因?yàn)閃ebKit對(duì)于常駐性的桌面環(huán)境進(jìn)程來并不適合,長時(shí)間不關(guān)機(jī)非常容易引起內(nèi)存泄露和性能問題。包括2014年之前,采用的Python/QML來開發(fā)的應(yīng)用都全部由 QtWidget/C++ 替換掉,主要是因?yàn)镻ython在國產(chǎn)CPU平臺(tái)(龍芯、申威)上運(yùn)行很慢,QML的解釋特性和默認(rèn)OpenGL渲染的機(jī)制都導(dǎo)致軟件實(shí)際運(yùn)行的性能不好。

深度這么多年幾乎把所有的界面編程語言(Python、C、C++、CoffeeScript/JS、Golang)和幾乎所有的圖形界面庫(wx、GTK+、Qt、WebKit、QML)都折騰過了。
最后停留在 Golang、C++、QtWidget 的技術(shù)選型上,因?yàn)檫@些技術(shù)不論從穩(wěn)定性、兼容性還是性能都非常好。

什么是桌面環(huán)境?

桌面環(huán)境簡單來說,就是在內(nèi)核和X Server之上,寫一批程序讓用戶登錄后就可以直覺性、流暢的使用桌面、任務(wù)欄、開始菜單、文件操作和系統(tǒng)設(shè)置。

這個(gè)世界上從功能完整性和產(chǎn)品質(zhì)量來看主要有四個(gè)桌面環(huán)境:

  • RedHat主導(dǎo)開發(fā)的Gnome, Gnome2的穩(wěn)定性和性能都非常好,包括后面的Mint桌面都是衍生于Gnome2, Gnome3是我作為個(gè)人開發(fā)者來看最失望的桌面環(huán)境,Gnome3完全拋棄了Gnome2的穩(wěn)定和性能,Gnome3除了性能和內(nèi)存控制不好以外,API的胡亂修改導(dǎo)致這5年幾乎沒有任何重大的進(jìn)步
  • Suse主導(dǎo)開發(fā)的KDE:可以說功能最為豐富的桌面環(huán)境,包括產(chǎn)品質(zhì)量以及性能每年都在飛速進(jìn)步,但從個(gè)人看比較適合技術(shù)折騰黨,功能和交互做的太復(fù)雜不適合普通用戶(比如那個(gè)超級(jí)復(fù)雜的主題設(shè)置)
  • Ubuntu主導(dǎo)開發(fā)的Unity: Unity身上還是可以看到很多Gnome2的影子,產(chǎn)品質(zhì)量和性能都不錯(cuò),Ubuntu自己獨(dú)立開發(fā)了Mir、Unity桌面環(huán)境和一些全局菜單等獨(dú)特特性,雖然很多開發(fā)者很喜歡,但是整體視覺都聚焦在左上角(默認(rèn)看著很想一把轉(zhuǎn)角直尺)的設(shè)計(jì),個(gè)人覺得并不符合中國人的使用習(xí)慣
  • Deepin主導(dǎo)開發(fā)的DDE: 作為DDE的開發(fā)者,客觀的評(píng)價(jià),產(chǎn)品質(zhì)量、設(shè)計(jì)視覺都符合中國人的習(xí)慣,很多地方的交互設(shè)計(jì)細(xì)節(jié)要比其他桌面環(huán)境做的更加精致和簡單,主要面向開箱即用的非技術(shù)型用戶,從功能設(shè)計(jì)上并不適合技術(shù)高手和那些本來就喜歡折騰的技術(shù)型用戶

其他輕量型的桌面環(huán)境,比如LXDE、XFCE、Enlightenment雖然性能極佳,但是從桌面環(huán)境的功能完整性和交互設(shè)計(jì)的精致性上都不夠,比較適合有一定技術(shù)深度,追求性能和自己配置多于開箱即用的技術(shù)型用戶。

剩下的就是一堆平鋪類窗口管理器,比如大家熟知的:awesome, i3, xmonad, dwm, stumpwm等等,這些窗口管理器型的桌面環(huán)境有300多個(gè),我曾經(jīng)為了研究所有桌面環(huán)境的特性,把這些窗口管理器都用過,最喜歡的是xmonad。這類窗口管理器的可以把個(gè)人的工作環(huán)境內(nèi)存和性能消耗降到極低,而且可定制性極強(qiáng),甚至可以通過編程來打造自己獨(dú)一無二的工作環(huán)境。這類窗口管理器型的桌面環(huán)境比較適合開發(fā)人員和黑客,當(dāng)然也不乏國內(nèi)一大批裝X用戶。 ;)

桌面環(huán)境和那些換主題的工作差別在哪里?

可以說,桌面操作系統(tǒng)的核心技術(shù)和產(chǎn)品功力都聚焦在桌面環(huán)境上。
只有掌握了桌面環(huán)境這個(gè)古老而又深?yuàn)W的核心技術(shù),才能說在桌面操作系統(tǒng)上可以任意修改和改進(jìn),才能給用戶帶來更好的用戶體驗(yàn)。

因?yàn)樽烂姝h(huán)境強(qiáng)調(diào)的是從上至下全棧技術(shù)攻克,不論技術(shù)深度、技術(shù)全面性和代碼工程量來說都是巨大的,開發(fā)一個(gè)功能完備的桌面環(huán)境需要20+人以上的團(tuán)隊(duì)工作最少2年以上才能打造出來,而且桌面環(huán)境的技術(shù)核心全部都依賴一批古老的協(xié)議,比如:x11、xcb、composite等基礎(chǔ)技術(shù),互聯(lián)網(wǎng)上幾乎沒有文檔教你怎么一步一步的構(gòu)建桌面環(huán)境,現(xiàn)成的桌面環(huán)境因?yàn)榘l(fā)展多年,代碼已經(jīng)非常復(fù)雜,最多只能從核心代碼片段有所學(xué)習(xí)。一個(gè)人要自上而下框架式的學(xué)習(xí)桌面環(huán)境核心技術(shù)并實(shí)現(xiàn)一套功能完備的桌面環(huán)境幾乎不可能。

所以,大部分的Linux發(fā)行版都是基于Gnome、KDE改的,大多數(shù)都是在網(wǎng)上找一批主題(Gtk+主題、圖標(biāo)主題、光標(biāo)主題、窗口邊框主題、DM主題、鎖屏主題)再配上一張好看的壁紙就可以做一套自己DIY的桌面環(huán)境。很多Linux社區(qū)的用戶說,你看我自己都可以做桌面環(huán)境,甚至很多國內(nèi)的Linux發(fā)行版廠商也是拿著社區(qū)的桌面環(huán)境然后換一套皮膚就去騙政府的錢,說自己是自主研發(fā)的操作系統(tǒng)(很可悲,這個(gè)世界上騙子永遠(yuǎn)比正直的人多)。

既然換套主題也可以很好,那么桌面環(huán)境和那些換主題的工作差別在哪里?
在我看來,主要在幾個(gè)方面:

  • 核心技術(shù)能力:如果沒有掌握桌面環(huán)境的核心技術(shù),所有的修改能力僅僅限于修改主題、logo、字符串替換的能力
  • 產(chǎn)品質(zhì)量無法保障:特別是有很多隱蔽性的bug,如果不掌握核心技術(shù),連問題發(fā)生的原因都不知道,更不用提怎么解決
  • 設(shè)計(jì)細(xì)節(jié):如果大家仔細(xì)看那些只是套用主題的桌面環(huán)境,就會(huì)發(fā)現(xiàn)外面看著還可以,但是很多按鈕的顏色、留白以及控件的對(duì)齊都是有問題的,甚至是粗糙的,為什么?這是由GTK+的主題設(shè)計(jì)導(dǎo)致的,GTK+強(qiáng)調(diào)的是一套原生控件打天下,但是面對(duì)無窮的應(yīng)用和需求,不是所有的交互都能靠一套控件才能滿足的,在大多數(shù)Linux社區(qū)開發(fā)者不具備控件自繪的能力前提下,大多數(shù)開發(fā)者都選擇套用不合適的控件和控件主題去拼裝,而GTK+主題的作者不可能在制作主題的時(shí)候測(cè)試所有軟件,而且從GTK+先天限制也做不到,最后導(dǎo)致不論怎么套用主題,各種軟件拼裝在一起,就像各種質(zhì)量參差不齊的補(bǔ)丁拼在一起一樣的,大多數(shù)開源社區(qū)開發(fā)者被虐很多年可以忍受粗糙的設(shè)計(jì)細(xì)節(jié)(我看到很多開發(fā)者喜歡黑色主題也是因?yàn)楹诔梢黄涂床怀鰜砹?,哈哈哈),但是?duì)于普通用戶來說,這種拼裝的設(shè)計(jì)細(xì)節(jié)就像拿著當(dāng)年的諾基亞和現(xiàn)在的iPhone7放一塊的感覺那么強(qiáng)烈
  • 統(tǒng)一的操作接口:比如右鍵菜單、文件打開對(duì)話框、認(rèn)證對(duì)話框等等,只有從深層次統(tǒng)一這些底層接口,才不會(huì)看到不同風(fēng)格的右鍵菜單、文件打開對(duì)話框、認(rèn)證對(duì)話框,這些都對(duì)于統(tǒng)一的桌面操作系統(tǒng)體驗(yàn)非常重要,想一想如果你自己買的iPhone各處都粗糙不一樣,你會(huì)不會(huì)砸了它?但是為啥這么多開源愛好者就能忍受這些粗糙的東西?(因?yàn)樽约簺]有花錢,花了錢你看他不把客服電話打爆...)

深度桌面環(huán)境是怎么構(gòu)建的?

在說怎么構(gòu)建桌面環(huán)境之前,先放三張深度桌面環(huán)境的圖:

深度截圖20170202162735.png
094325u3k3lym0yu034nc1.png
launcher5.jpg

是不是美哭了? 這就是自己從頭構(gòu)建桌面環(huán)境和只換皮膚主題的差別。

好了,前方專業(yè)技術(shù)高能, 請(qǐng)各位抓緊扶好,我要開始講桌面環(huán)境架構(gòu)了。
講之前先放一張架構(gòu)圖:

深度桌面操作系統(tǒng)架構(gòu)設(shè)計(jì) (3).png

一個(gè)完整的桌面系統(tǒng)從技術(shù)剖面看,從下到上主要分這幾層:

  • 內(nèi)核驅(qū)動(dòng)層:前面已經(jīng)說了,主要是保障硬件的基本功能和兼容性,所有的Linux發(fā)行版都大同小異,差別就是內(nèi)核補(bǔ)丁集不一樣,或者集成的驅(qū)動(dòng)和固件多少的差異
  • 顯示服務(wù)層:從內(nèi)核引導(dǎo)到plymouth(我們俗稱的開機(jī)動(dòng)畫)后,只要你見到登錄界面輸入密碼的時(shí)候,這時(shí)候X Server已經(jīng)起來了, X Server簡單來理解就是Linux系統(tǒng)中掌握著繪制圖形界面生殺大權(quán)的“天神”,所有程序要繪制圖形的時(shí)候都要發(fā)送消息到 X Server, X Server才會(huì)給你畫出來。同時(shí)X Server也是事件輸入(鍵盤鼠標(biāo))輸出(顯示器)的抽象層,開發(fā)者可以不用考慮底層驅(qū)動(dòng)和顯卡驅(qū)動(dòng)細(xì)節(jié),直接就可以使用X11/XCB的API進(jìn)行應(yīng)用開發(fā),只不過更多的開發(fā)者是使用Gtk+/Qt這些在X11/XCB更上層的API進(jìn)行應(yīng)用開發(fā)
  • 顯示管理器:簡單的理解就是你看到的登錄界面提示你輸入密碼的那個(gè)地方
  • 資源管理器:這一層主要由一系列的底層守護(hù)程序來監(jiān)控硬件的狀態(tài),并匯報(bào)給上層的桌面環(huán)境和應(yīng)用進(jìn)一步操作,比如常見的就有網(wǎng)絡(luò)、電源、磁盤、藍(lán)牙、聲音、鍵盤、打印等
  • 桌面環(huán)境: 以深度桌面環(huán)境為例,主要包括桌面環(huán)境后臺(tái)服務(wù)和守護(hù)進(jìn)程、桌面環(huán)境對(duì)外提供圖形開發(fā)工具庫、二進(jìn)制工具、DBus API服務(wù)和桌面環(huán)境UI界面層幾個(gè)部分組成的,后面我會(huì)詳細(xì)講每一個(gè)細(xì)節(jié)
  • 應(yīng)用商店:主要提供系統(tǒng)的軟件安裝、卸載、升級(jí)等操作,保證用戶可以安全易用的進(jìn)行軟件管理,同時(shí)提供了商店的評(píng)論和評(píng)分等功能
  • 應(yīng)用程序:主要包括深度開發(fā)的系列應(yīng)用、合作開發(fā)的國內(nèi)應(yīng)用、Android應(yīng)用、Windows應(yīng)用和網(wǎng)頁應(yīng)用,為什么在Linux可以直接運(yùn)行Android和Windows應(yīng)用? 我也后面再講,嘿嘿

簡單來說,桌面環(huán)境的設(shè)計(jì)和實(shí)現(xiàn)就是把所有底層抽象的硬件、庫和各種各樣的狀態(tài)進(jìn)行管理,最后通過界面的方式和合理的交互設(shè)計(jì)與用戶進(jìn)行交互,讓用戶可以自然、流暢的使用各種應(yīng)用完成自己的工作。

這一章我只講桌面環(huán)境的細(xì)節(jié),像內(nèi)核以及X Server的技術(shù)又是一個(gè)非常長的歷史和篇幅, 請(qǐng)看官們自行Google內(nèi)核以及X Server (X11、XCB)相關(guān)的文章來看,我就不展開敘述了。

關(guān)于應(yīng)用商店和應(yīng)用后面會(huì)詳細(xì)講, 所以這里我們就向大家詳細(xì)描述一下從顯示管理器到桌面環(huán)境都做了哪些事情?為了方便大家理解,全程不講源代碼,有開發(fā)經(jīng)驗(yàn)的朋友可以直接去 github 上面查看我們的代碼: https://github.com/linuxdeepin/ , 深度所有項(xiàng)目的源代碼都是按照 GPL3 許可證實(shí)時(shí)開源的(只要內(nèi)部代碼審查機(jī)器人通過代碼質(zhì)量審查以后就會(huì)由機(jī)器人自動(dòng)推送到 github )

深度截圖20170202165633.png

首先看一下顯示管理器,當(dāng)X Server啟動(dòng)以后,根據(jù)系統(tǒng)啟動(dòng)服務(wù)的順序,顯示管理器就在 X Server 之后啟動(dòng),深度系統(tǒng)使用的是由Ubuntu開發(fā)的LightDM, 其他主流的顯示管理器還有 Gnome 的 GDM 和 KDE 的 KDM, 使用LightDM的原因主要是 LightDM 非常的輕量,不綁定任何桌面環(huán)境,而且提供Gtk+、Qt、Html5等各種前端界面的定制接口,非常方便。
顯示管理器主要是根據(jù)系統(tǒng)中安裝的用戶的權(quán)限對(duì)正在登錄的用戶提供權(quán)限認(rèn)證和多用戶切換功能,一旦認(rèn)證通過后就從 greeter (LightDM 定制的配置接口)中執(zhí)行下一步啟動(dòng)程序(通常是桌面環(huán)境的初始化程序),以顯示桌面環(huán)境。
Deepin 開發(fā)了一個(gè)基于Qt5的前端界面程序, deepin-greeter 主要長這樣:

深度截圖20170202170531.png

除了基本的用戶認(rèn)證、多用戶切換、日期和關(guān)機(jī)功能以外,還會(huì)提供:

  • 多媒體的控制接口(右下角),方便用戶鎖屏和切換用戶的時(shí)候切換音樂和暫停音樂
  • 當(dāng)系統(tǒng)使用多屏幕時(shí),啟動(dòng)和解鎖時(shí),會(huì)根據(jù)用戶的鼠標(biāo)位置切換鎖屏主界面
  • 在用戶輸入密碼的時(shí)候,就直接啟動(dòng)一些系統(tǒng)級(jí)的服務(wù),比如電源、賬戶、亮度等守護(hù)程序,這樣用戶輸入密碼的過程很多系統(tǒng)服務(wù)就加載好了,可以相對(duì)于其他桌面環(huán)境同等服務(wù)縮短30%以上的登錄時(shí)間
深度截圖20170202170942.png

當(dāng)顯示管理器認(rèn)證成功以后,就會(huì)調(diào)用 greeter 的 exec 參數(shù),深度桌面環(huán)境就是 startdde, startdde 從名字看很容易理解,就是啟動(dòng)深度桌面環(huán)境的引導(dǎo)程序,為了讓深度桌面環(huán)境可以正常啟動(dòng)和顯示,startdde調(diào)用時(shí)會(huì)執(zhí)行以下操作:

  • 基本的桌面會(huì)話管理,比如大家熟知的注銷、重啟等操作
  • 按照 xsettings 主題規(guī)范設(shè)置整個(gè)系統(tǒng)的主題,保證桌面環(huán)境以及桌面環(huán)境的應(yīng)用,不論Gtk+還是Qt可以正常的加載用戶設(shè)置的主題。屏幕DPI設(shè)置也是在這個(gè)階段初始化完成的
  • 根據(jù) freedesktop 的各種規(guī)范,規(guī)范應(yīng)用程序的啟動(dòng)方法, 包括執(zhí)行 *.desktop 文件的命令,啟動(dòng)提醒等
  • 多屏的管理,保障桌面環(huán)境在多屏情況下,可以在正常的主屏顯示任務(wù)欄和桌面程序
  • 開機(jī)啟動(dòng)服務(wù)的順序管理,比如會(huì)優(yōu)先啟動(dòng) dde 核心組件, 才運(yùn)行啟動(dòng)其他應(yīng)用程序,防止所有開機(jī)程序在登錄的一瞬間同時(shí)啟動(dòng),而這時(shí)候往往很多系統(tǒng)服務(wù)(比如DBus) 都還沒準(zhǔn)備好,大家一團(tuán)亂搶CPU資源不但無法快速啟動(dòng),還會(huì)導(dǎo)致其他程序都無法啟動(dòng),想象一下3個(gè)人同時(shí)擠一個(gè)公交車門是什么狀態(tài)? ;) 這時(shí)候startdde 就是登錄后到dde守護(hù)進(jìn)程啟動(dòng)之前的裁判,只有它授權(quán)的程序才能啟動(dòng), 沒有授權(quán)的都進(jìn)入暫緩狀態(tài),直到更優(yōu)先的程序啟動(dòng)完畢

startdde 啟動(dòng)以后,首先會(huì)啟動(dòng) dde-session-initializer 這個(gè)進(jìn)程,這個(gè)進(jìn)程的主要目的是提供給任務(wù)欄和啟動(dòng)器后臺(tái)服務(wù),主要包括:

  • 任務(wù)欄和啟動(dòng)器都有那些常駐程序
  • 所有應(yīng)用程序的啟動(dòng)狀態(tài)維護(hù)
  • 應(yīng)用程序所在工作區(qū)和位置的狀態(tài)維護(hù)
  • 當(dāng)前系統(tǒng)中所有安裝應(yīng)用程序的圖標(biāo)、啟動(dòng)狀態(tài)維護(hù)

dde-session-initializer 就相當(dāng)于任務(wù)欄和啟動(dòng)器的后臺(tái)守護(hù)進(jìn)程,提供了任務(wù)欄和啟動(dòng)器的核心功能,如果沒有這個(gè)程序,我們?nèi)粘5膽?yīng)用圖標(biāo)點(diǎn)擊、開機(jī)啟動(dòng)包括程序窗口的切換都無法進(jìn)行。
dde-session-initializer 本來是 dde-session-daemon 的一部分,為了加快用戶的登錄到桌面的速度,從 dde-session-daemon 中分離出來,用以加速任務(wù)欄和啟動(dòng)器的顯示。

dde-session-daemon 和 dde-system-daemon 就是整個(gè)桌面操作系統(tǒng)的后臺(tái)守護(hù)程序,這兩個(gè)進(jìn)程維護(hù)了所有硬件的狀態(tài),包括前面說的網(wǎng)絡(luò)、電源、磁盤、藍(lán)牙、聲音、打印、授權(quán)、共享文件、鍵盤鼠標(biāo)等,相當(dāng)于對(duì)資源管理器的各種守護(hù)進(jìn)程進(jìn)行了更高層次的代碼封裝,把面向底層硬件的狀態(tài)的接口轉(zhuǎn)換成面向用戶設(shè)計(jì)導(dǎo)向的接口。
根據(jù)Linux的最小權(quán)限劃分,又把所有的后臺(tái)服務(wù)分成 dde-session-daemon 和 dde-system-daemon 兩個(gè)進(jìn)程,dde-session-daemon 只掌握那些不需要超級(jí)權(quán)限的功能模塊,比如聲音、鍵盤鼠標(biāo)、日期時(shí)區(qū)等。dde-system-daemon 掌握那些需要超級(jí)權(quán)限的功能模塊,比如電源、賬戶、文件操作、亮度等。通過超級(jí)權(quán)限的不同進(jìn)程沙箱的劃分,保證執(zhí)行超級(jí)權(quán)限的進(jìn)程被限制在最小化的范圍,避免因系統(tǒng)權(quán)限傳導(dǎo)而導(dǎo)致的很多安全事件。

dde-session-daemon 和 dde-system-daemon 做的事情我簡單列舉一下吧:

  • 提供用戶的創(chuàng)建、刪除和管理功能
  • 管理多個(gè)屏幕的不同狀態(tài),包括位置、方向、分辨率和亮度等
  • 管理不同文件類型的默認(rèn)程序和主題設(shè)置
  • 管理網(wǎng)絡(luò)的有線、無線、VPN、DSL等網(wǎng)絡(luò)設(shè)置
  • 管理藍(lán)牙、聲音、日期、時(shí)間時(shí)區(qū)等設(shè)置
  • 管理電源、鍵盤鼠標(biāo)設(shè)置
  • 管理系統(tǒng)的升級(jí)和grub設(shè)置
  • 提供多點(diǎn)觸摸板手勢(shì)的服務(wù)

dde-sessin-initalizer、dde-session-daemon以及dde-system-daemon從功能上,相當(dāng)于Gnome的 gnome-session-daemon 所做的事情,只不過深度團(tuán)隊(duì)根據(jù)用戶的需要以及很多優(yōu)化加速設(shè)計(jì),用 golang 重寫了整個(gè)后臺(tái)守護(hù)進(jìn)程的代碼??梢哉f DDE 和 Gnome以及KDE一樣,都是調(diào)用底層的庫(network-manager、upower、udisk、bluez、pluseaudio、cups、polkitd、gvfsd) 對(duì)桌面環(huán)境和應(yīng)用提供更為抽象和高級(jí)的服務(wù)。

備注: 很多社區(qū)的開發(fā)者經(jīng)常質(zhì)疑DDE就是基于Gnome的UI殼,沒有自己的核心技術(shù),希望懂編程的朋友查看深度的源代碼 https://github.com/linuxdeepin/dde-daemon , 看看是否只是一個(gè) Gnome 的殼。我非常尊重每一位技術(shù)開發(fā)者,但是真的對(duì)于那些完全不基于調(diào)查,只是簡簡單單基于對(duì)國內(nèi)開發(fā)團(tuán)隊(duì)鄙視而輕言下結(jié)論的人感到痛心,這也是我今天寫這篇文章的原因之一,希望國人基于事實(shí)支持好的產(chǎn)品和團(tuán)隊(duì),停止一切不實(shí)的攻擊和亂噴。

深度截圖20170203103240.png

在深度桌面環(huán)境的后臺(tái)守護(hù)進(jìn)程基礎(chǔ)之上,桌面環(huán)境會(huì)對(duì)外提供一個(gè)API層,包括圖形開發(fā)工具庫、二進(jìn)制工具和DBus API接口,供桌面環(huán)境和應(yīng)用程序直接調(diào)用,而不用自己重頭開發(fā),其中DBus API部分都通過DBus總線在應(yīng)用調(diào)用特定的接口時(shí)動(dòng)態(tài)喚醒(默認(rèn)不常駐內(nèi)存),任何語言編寫的應(yīng)用都可以輕松調(diào)用,根據(jù)上面圖所示,從左到右分別進(jìn)行介紹。

DTK:
DTK (deepin tool kit) 是基于Qt5開發(fā)的一整套UI圖形庫,方便統(tǒng)一的編寫深度桌面和深度系列應(yīng)用,主要的功能有:

  • 提供單實(shí)例的接口,方便直接使用,不用造輪子
  • 提供XCB窗口移動(dòng)、縮放等一系列函數(shù),無邊框的窗口不用自己折騰幾大本X11/XCB 的書了,開發(fā)者全部都做好了
  • 提供一大票美觀的自繪控件,不用自己造Qt控件了,拉著直接用

感興趣的開發(fā)者自己看源代碼吧: https://github.com/linuxdeepin/deepin-tool-kit , 基于我們的DTK比直接基于Qt5開發(fā),能夠更快的開發(fā)出美輪美奐的產(chǎn)品, 同時(shí)也歡迎社區(qū)開發(fā)者大神吐槽和提交補(bǔ)丁?!?)

dde-api binary utils:
這一層主要是 dde-session-daemon 和 dde-system-daemon 在開發(fā)過程中發(fā)展出來的二進(jìn)制工具,方便深度桌面環(huán)境以外的應(yīng)用可以直接使用這些工具,減少核心技術(shù)的重復(fù)開發(fā):

  • greeter-helper: 提供鎖屏界面的語言, 鍵盤布局, 主題等內(nèi)容的設(shè)置接口
  • image-blur-helper: 提供壁紙模糊服務(wù),你可以通過這個(gè)服務(wù)快速模糊一張圖片,而不需要自己編寫模糊算法,深度團(tuán)隊(duì)做的模糊算法,即使在龍芯芯片上都只需30ms的時(shí)間,要遠(yuǎn)遠(yuǎn)快于社區(qū)的模糊代碼的性能
  • lunar-calendar: 提供日歷查詢服務(wù)
  • powersupply: 對(duì)電源接口的更高層封裝, 使用 udev 來獲取電源狀態(tài)以及電池信息
  • soundutils: 提供了播放桌面音效的相關(guān)接口
  • validator: 用戶名正確驗(yàn)證器,不用自己編寫一大堆正則表達(dá)式來做這件枯燥的事情
  • cursor-helper: 提供了光標(biāo)主題的設(shè)置接口
  • drandr: 對(duì) x11 randr api 更高級(jí)的接口封裝, 提供顯示器的詳細(xì)信息
  • dxinput: 對(duì) x11 xi/xi2 api 更高級(jí)的接口封裝, 提供輸入輸出設(shè)備的屬性獲取及設(shè)置功能
  • 后面還有很多其他高級(jí)服務(wù),都是由 dde-api https://github.com/linuxdeepin/dde-api 提供的,歡迎各位社區(qū)開發(fā)者研究,擴(kuò)展其玩法

dde-daemon dbus API:
這一部分主要是由dde-session-daemon和dde-system-daemon提供的DBus接口給深度控制中心前端界面使用的,外部應(yīng)用程序也可以直接使用這部分API來快速開發(fā),而不用自己研究和編寫與系統(tǒng)底層軟硬件打交到的代碼,簡單的說幾個(gè)功能,感興趣的朋友可以直接查看深度控制中心的界面代碼來玩(https://github.com/linuxdeepin/dde-control-center):

  • 查詢當(dāng)前系統(tǒng)有幾個(gè)屏幕,哪些屏幕是主屏,分辨率是多少?
  • 查詢當(dāng)前系統(tǒng)的語言、亮度、音量等設(shè)置
  • 查詢當(dāng)前系統(tǒng)的網(wǎng)絡(luò)鏈接狀態(tài):連接的是無線還是有線,有沒有開啟VPN?
  • 查詢當(dāng)前系統(tǒng)的日期時(shí)間、時(shí)區(qū)、鍵盤鼠標(biāo)等外設(shè)的狀態(tài)
    只要控制中心界面顯示的所有硬件狀態(tài),都可以通過dde-api提供的DBus接口服務(wù)查詢到,而這些DBus API后面的源代碼都是深度操作系統(tǒng)研發(fā)人員經(jīng)過非常多的時(shí)間打磨好的,不用自己痛苦的去裸寫底層庫(network-manager、pluseaudio、bluez、upower、udisk等)代碼,大大節(jié)約了應(yīng)用開發(fā)者編寫高級(jí)功能的時(shí)間和投入成本。

說到用戶體驗(yàn)的一致性,包括右鍵菜單、對(duì)話框、認(rèn)證密碼框這些看是小的地方(也是90% linux開發(fā)者不屑的地方),給用戶帶來的體驗(yàn)是最深刻的,一個(gè)產(chǎn)品的質(zhì)量不光是你大老遠(yuǎn)一看很美或者主題很美,很多小細(xì)節(jié)的地方做好,才能得到用戶的尊重。用戶用到這些小細(xì)節(jié)的時(shí)候,會(huì)知道后面是一群用心的人在做事情,而不僅僅只是寫個(gè)功能丟在那里就完事。

深度截圖20170203101157.png

深度桌面環(huán)境的最后一部分就是深度桌面環(huán)境的UI展示層,主要有:

  • dde-wm: 窗口管理器,我們寫了兩個(gè)窗口管理器,根據(jù)用戶的硬件性能和顯卡驅(qū)動(dòng)情況自動(dòng)使用2D窗口管理器還是3D窗口管理器,像Gnome的話,你還要手動(dòng)注銷(關(guān)閉所有窗口)才能在3D和classic模式中切換,而深度桌面環(huán)境完全是自動(dòng)的。每個(gè)工作區(qū)可以單獨(dú)設(shè)置不同壁紙:
174415o3zi1puiuz1ede2i.png
  • dde-desktop: 桌面模塊,基本的文件網(wǎng)格對(duì)齊功能,拖動(dòng)文件會(huì)自動(dòng)進(jìn)行網(wǎng)格對(duì)齊,很多桌面就是簡單的一個(gè)壁紙然后還要費(fèi)勁的人工對(duì)齊,還有下面這種換壁紙的方式,輕輕一點(diǎn)就行了, linux最簡單的換壁紙操作:
深度截圖20170202180050.png
  • dde-dock: 不論你喜歡Mac還是Windows風(fēng)格的任務(wù)欄,都可以隨時(shí)切換
  • dde-launcher: 不論你喜歡Mac還是Windows風(fēng)格的開始菜單,都可以隨時(shí)切換
深度截圖20170202162735.png
launcher5.jpg
  • dde-control-center: 深度控制中心,到底有多方便, 我一會(huì)在下面說 ;)
  • dde-osd: 當(dāng)按下音量、亮度等多媒體按鍵時(shí)在屏幕中間顯示快速提示
  • dde-lock: 提供系統(tǒng)的鎖屏服務(wù)
  • deepin-menu: 統(tǒng)一所有軟件右鍵菜單的UI細(xì)節(jié)
  • deepin-notificaiton: 通過右上角提供系統(tǒng)的通知服務(wù),根據(jù)不同應(yīng)用顯示不同的快速跳轉(zhuǎn)按鈕
  • deepin-policykit-agent: 主要按照深度的UI設(shè)計(jì)規(guī)范做個(gè)了密碼認(rèn)證對(duì)話框,保證所有程序,不論是Gtk+還是Qt寫的,在密碼驗(yàn)證的時(shí)候都彈出UI細(xì)節(jié)一模一樣的對(duì)話框
  • deepin-icon-theme: 世界上風(fēng)格最統(tǒng)一,數(shù)量最多的圖標(biāo),我們把應(yīng)用商店上千款應(yīng)用的圖標(biāo)全部畫了一遍,不要拼裝圖標(biāo),不要拼裝圖標(biāo),不要拼裝圖標(biāo),歡迎圍觀: https://github.com/linuxdeepin/deepin-icon-theme/tree/master/deepin
  • deepin-gtk-theme: 主要是針對(duì)深度自己的設(shè)計(jì)規(guī)范來重新制作的整套窗口主題(Gtk+2、Gtk+3、Qt4、Qt5)
  • deepin-default-settings: 深度桌面環(huán)境默認(rèn)的設(shè)置,比如默認(rèn)的壁紙、圖標(biāo)主題等默認(rèn)設(shè)置
  • qt5-integration: 給Gtk+和Qt源碼編寫了補(bǔ)丁,保證所有程序彈出的文件打開對(duì)話框都是完全一致的體驗(yàn)(如下圖所示),不論是Gtk+還是Qt編寫的程序,再也不用為不同圖形庫開發(fā)的程序彈出不同風(fēng)格的文件打開對(duì)話框這種事情煩惱了
深度截圖20170203104130.png

為什么要自己寫桌面環(huán)境?

很多人都在問我, 為什么深度要自己寫桌面環(huán)境,其實(shí)回答很簡單:

  • 我希望給用戶提供交互細(xì)節(jié)最簡潔的操作體驗(yàn),傻瓜式操作,不需要長時(shí)間學(xué)習(xí)
  • 我希望用戶會(huì)因?yàn)閁I細(xì)節(jié)精致的Wow一聲, 就像第一次看到iPhone一樣
  • 我希望用戶看到很多貼心的小細(xì)節(jié)時(shí),會(huì)覺得操作系統(tǒng)后面有一群人關(guān)心他們,貼心的功能會(huì)讓他們會(huì)心一笑,而不是面對(duì)一臺(tái)冰冷冷的機(jī)器

如果不自己寫桌面環(huán)境,就達(dá)不到這些嚴(yán)苛的要求:

  • 我要能改每一像素,只要用戶覺得不爽,一切都是用戶為向?qū)?,而不是以開發(fā)者的個(gè)人喜好為導(dǎo)向
  • 快速改進(jìn),很多社區(qū)開發(fā)者都說你應(yīng)該給Gnome或KDE提交補(bǔ)丁,對(duì)不起,明明可以10分鐘做一個(gè)用戶喜歡的功能的時(shí)候, 卻要和各種專家開發(fā)者討論1個(gè)月才合并補(bǔ)丁或者上游開發(fā)者根本就不理,Linux桌面就死在改一個(gè)功能慢的要死,最后大多數(shù)用戶失去耐心,不陪你玩無奈的離開了
  • 統(tǒng)一的交互體驗(yàn),統(tǒng)一的設(shè)計(jì)語言, 不要拼裝,很多l(xiāng)inux老用戶除了宣揚(yáng)開源文化和民主的決策(其實(shí)每個(gè)項(xiàng)目都是由創(chuàng)建者獨(dú)裁)外,甚至拿著一大堆各式各樣的社區(qū)demo作品美曰“社區(qū)協(xié)作”,深度只想系統(tǒng)和所有應(yīng)用是能夠堪比Windows/Mac的產(chǎn)品質(zhì)量的藝術(shù)品

當(dāng)很多社區(qū)開發(fā)者數(shù)以十年的只贊揚(yáng)開源文化和協(xié)作的時(shí)候,我真想說,世界要讓更多普通用戶接觸和認(rèn)可Linux的情況下,開源文化才能更快更廣泛的推廣, 而不是偏執(zhí)的自虐以后,自欺欺人拿著質(zhì)量參差不齊的應(yīng)用去洗腦那些不認(rèn)同的普通用戶,洗腦不行就開始鄙視和嘲諷。

其實(shí)做一個(gè)簡單的類比,如果有人讓你買一部丑到爆,難用到要死的手機(jī),但是告訴你這手機(jī)里的每行代碼都開源的,有多少人會(huì)真正買?我想大多數(shù)開源愛好者自己都不會(huì)買

很多時(shí)候,往往簡單的換位思考就會(huì)認(rèn)清開源社區(qū)的種種問題...

深度桌面環(huán)境的交互細(xì)節(jié)以及橫向?qū)Ρ?/h3>

下面我只簡單的舉一些深度桌面的小細(xì)節(jié)來說明為什么做桌面環(huán)境的必要性,以下這些特性不是什么黑科技,也不是深度才獨(dú)有的,但都是研發(fā)團(tuán)隊(duì)通過用心思考,研究用戶的痛點(diǎn),通過簡單的設(shè)計(jì)就能解決用戶的問題,而不是浪費(fèi)用戶幾小時(shí)甚至幾天的時(shí)間去“忍受”系統(tǒng)。

  • 默認(rèn)折騰好QQ、字體設(shè)置、解碼器:不用裝好系統(tǒng)滿世界折騰Wine、粘貼xorg配置和下載不知道包名叫啥的解碼器
  • 屏幕旋轉(zhuǎn)不用歪著頭逆天的移動(dòng)鼠標(biāo):注意看下圖,系統(tǒng)進(jìn)行屏幕方向設(shè)置的時(shí)候,會(huì)彈出一個(gè)全屏界面,向左旋轉(zhuǎn)就點(diǎn)一下鼠標(biāo)左鍵,繼續(xù)旋轉(zhuǎn)的話就繼續(xù)點(diǎn)鼠標(biāo)左鍵,什么時(shí)候旋轉(zhuǎn)好了,點(diǎn)擊鼠標(biāo)右鍵確認(rèn)。旋轉(zhuǎn)屏幕的時(shí)候,全程不需要歪著頭,也不用拿著鼠標(biāo)暈頭轉(zhuǎn)向的找“確定”按鈕,這個(gè)問題,即使Windows和Mac都做的非常不好, 其他linux系統(tǒng)也一樣,有人仔細(xì)研究了這個(gè)二十多年的非人類痛點(diǎn)了嗎?我始終認(rèn)為,這才是一個(gè)桌面研發(fā)團(tuán)隊(duì)?wèi)?yīng)該關(guān)注的,通過小小的創(chuàng)新就可以解決用戶的大痛苦
2LTt1RD0Hv0IXlhD.jpeg
  • 邊界值的時(shí)候要有吸附功能: 注意看下圖,當(dāng)選擇聲音左右平衡時(shí),不論左、右還是中間平衡那點(diǎn),只要在周圍 -5px ~ 5px 的范圍都會(huì)自動(dòng)吸附到左、右、中間的那個(gè)點(diǎn),用戶即使觸摸板或鼠標(biāo)不好用,都不會(huì)發(fā)生在平衡點(diǎn)左右差一點(diǎn)的位置來回晃(同時(shí)拖住不放就可以精確調(diào)整),這也不是什么大功能, 但是每個(gè)用戶都會(huì)遇到這種不爽的操作


    7聲音.png
  • 設(shè)置時(shí)區(qū)的時(shí)候顯示白天黑夜:當(dāng)你添加其他時(shí)區(qū)時(shí),除了提示比當(dāng)前快還是慢,一眼就可以通過表盤判斷當(dāng)?shù)貢r(shí)間是黑夜還是晚上


  • 不要在世界地圖上費(fèi)勁的找一個(gè)點(diǎn):注意看哈,當(dāng)你在歐洲那一塊選擇城市時(shí),因?yàn)闅W洲的城市在地圖太密了(比如梵蒂岡),根本就無法快速選擇,這時(shí)候你隨便一點(diǎn),當(dāng)發(fā)現(xiàn)鼠標(biāo)周圍太多城市時(shí),就會(huì)彈出一個(gè)菜單列表,把鼠標(biāo)范圍的城市都彈出來讓你選擇,你只需要輕輕松松兩下鼠標(biāo)就可以選擇時(shí)區(qū)城市,再也不用辛苦的去找螞蟻那么大點(diǎn)的城市, 這種事情我好像沒有發(fā)現(xiàn)別的系統(tǒng)在關(guān)心用戶


    1T90d6RoIDc3CJ5D.jpg
  • 打字時(shí)禁用觸摸板: 國內(nèi)好多性價(jià)比高的筆記本觸摸板很容易誤碰,手掌一不小心就碰到觸摸板導(dǎo)致光標(biāo)亂飛,你只要開了這個(gè)開關(guān),打字的時(shí)候觸摸板就不響應(yīng),你打字一停馬上就可以響應(yīng),這樣就可以解決硬件的問題,當(dāng)然你也可以寫一段腳本然后添加到開機(jī)服務(wù)中折騰半天,而在深度桌面環(huán)境,只需要一個(gè)開關(guān)的事情


    16SHzxnm3SsIWyZY.png
  • 開機(jī)畫面輕輕一拖就更換了: 在深度控制中心中,看到你喜歡的壁紙自動(dòng)拖拽一下就可以自動(dòng)設(shè)置,想象一下你打開 grub-customizer, 首先要求壁紙的分辨率是對(duì)的,然后寬高比也要對(duì),否則設(shè)置出來就是各種黑邊。為啥深度里面一拖就可以? 控制中心發(fā)現(xiàn)你的圖片和屏幕寬高比不一樣的時(shí)候會(huì)自動(dòng)裁剪上下或者左右的部分,然后設(shè)置一張分辨率和寬高比和屏幕一模一樣的壁紙,一個(gè)要折騰10分鐘,一個(gè)只需要5秒鐘


    e4CGn9wNoBklLqVy.png

像這種貼心的設(shè)置,在深度桌面環(huán)境中隨處可見,而這些交互細(xì)節(jié)的背后需要的是對(duì)用戶場(chǎng)景的思考、換位思考理解用戶痛苦以及完全掌控所有代碼才能做到。
我一直都相信:好的系統(tǒng)是讓用戶覺得不多不少,剛剛好,而且很貼心。而不是堆砌滿屏的開關(guān)選項(xiàng),讓用戶看著就頭疼,再天書文案糾結(jié)半天都不知道怎么做。

深度商店


深度商店是Linux下第一款有產(chǎn)品質(zhì)量和交互體驗(yàn)優(yōu)秀的應(yīng)用商店,以前的社區(qū)的都只能叫軟件管理工具。
這里你可以看到的所有高質(zhì)量的軟件都可以搜索,一鍵安裝使用,再也不用自己折騰 myeclipse、sublime、 shadowsocks-qt5、迅雷、RTX等各種應(yīng)用,所有軟件都默認(rèn)打包好放到軟件倉庫,也不用擔(dān)心添加了哪個(gè)質(zhì)量不佳的ppa把系統(tǒng)搞死了,所有的依賴默認(rèn)就調(diào)好了,裝完就用。

除了支持深度系列應(yīng)用, 還通過 deepin-wine 支持50+多款Windows應(yīng)用,通過內(nèi)置 Android runtime支持200+多款A(yù)ndroid應(yīng)用(比如憤怒小鳥,各種視頻客戶端),通過和Intel合作開發(fā) deepin-xwalk 直接支持html5應(yīng)用(比如Gliffy等)還可以自己記住窗口大?。ǘ皇谴蜷_一個(gè)賊大的瀏覽器)

所有deepin對(duì)Wine上游的代碼級(jí)貢獻(xiàn)大家都可以在 https://www.google.com.hk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#newwindow=1&safe=strict&q=deepin.com+site:winehq.orghttp://source.winehq.org/git/wine.git/?a=search&h=HEAD&st=commit&s=deepin 公開查詢到
很多社區(qū)開發(fā)者說,我們用社區(qū)的Wine也能跑QQ, 為啥要用Deepin? 我只能說的是,社區(qū)版的Wine如果沒有deepin這幾年的貢獻(xiàn),你啥都跑不了,不管你換什么linux發(fā)行版。

這么多年deepin自己開發(fā)了幾百萬行GPL3的源代碼,向上游貢獻(xiàn)了無數(shù)的 commit, 我們更在意用戶體驗(yàn)和功能更新,不想去比什么commit刷屏,但是一次又一次的被噴子們用各種邏輯瞎噴,希望這些噴子看看我們的代碼再來噴我們。

深度截圖20170203101553.png

深度應(yīng)用商店從技術(shù)架構(gòu)上,主要分為lastore-daemon、lastore-session-helper、deepin-appstore三個(gè)部分:

  • lastore-daemon: 應(yīng)用商店的核心部分,主要負(fù)責(zé)所有軟件的安裝程序的下載、哈希安全校驗(yàn)、依賴分析、本地緩存管理、軟件安裝、軟件卸載和軟件升級(jí)等工作,這個(gè)守護(hù)進(jìn)程會(huì)和深度的軟件倉庫智能的通信,在后臺(tái)保障整個(gè)操作系統(tǒng)應(yīng)用的更新和安全守護(hù)。lastore-daemon同時(shí)會(huì)在 apt/dpkg 程序中加入鉤子,不論用戶是從應(yīng)用商店還是終端中安裝的程序都會(huì)被商店守護(hù)進(jìn)程管理和保護(hù),避免一些高級(jí)用戶從終端安裝以后把系統(tǒng)的依賴弄壞
  • lastore-session-helper: 上面說的lastore-daemon默認(rèn)就會(huì)有超級(jí)權(quán)限以進(jìn)行軟件包的管理,但是一些普通的用戶會(huì)話級(jí)的操作,比如安裝成功以后通過右上角通知提醒用戶,本地化管理這些操作都是不需要超級(jí)權(quán)限的,為了最小化超級(jí)權(quán)限代碼的執(zhí)行范圍,最大程度保證用戶安裝軟件的安全,開發(fā)者就從 lastore-daemon 中剝離了這部分代碼放到lastore-session-helper中以普通權(quán)限來執(zhí)行
  • deepin-appstore: 這個(gè)就是大家上面看到客戶端部分的代碼,簡單來說就是一個(gè)CEF框架基礎(chǔ)上構(gòu)建的應(yīng)用程序殼,處理客戶端本地的用戶交互然后嵌入一個(gè)網(wǎng)頁,商店的服務(wù)器一旦更新了新的軟件后,就會(huì)通知deepin-appstore進(jìn)行頁面刷新。還包括評(píng)論、評(píng)分等操作的界面接口。從技術(shù)的角度來形容,deepin-appstore就是一個(gè)具有本地客戶端操作和樣子的簡易瀏覽器

深度造了哪些應(yīng)用?

除了深度桌面環(huán)境和應(yīng)用商店,我們自己截止到2017年1月,深度自己還造了15個(gè)精品應(yīng)用和3款廠商聯(lián)合開發(fā)應(yīng)用,下面我只說每個(gè)應(yīng)用的關(guān)鍵亮點(diǎn),更多的細(xì)節(jié)只能感興趣的用戶自己體會(huì)了 https://www.deepin.org/original/

深度安裝器:

w5lHLhyRd1IgMUL1.png
EkpcTsDu8vE3doxo.png
bk4SJmc6hHwbQPHQ.png
  • 如果你在有wifi的地方,安裝器不用連接網(wǎng)絡(luò),自動(dòng)從路由器中找出國家碼設(shè)置時(shí)區(qū),不需要網(wǎng)絡(luò)連接和GPS就可以準(zhǔn)確知道用戶在哪個(gè)時(shí)區(qū),不需要讓用戶手動(dòng)設(shè)置時(shí)區(qū)
  • 安裝linux不需要知道分區(qū)知識(shí),不需要知道 /、/var、/boot、/home、swap啥概念,選擇任意空白分區(qū)即可安裝,還可以根據(jù)內(nèi)存大小自動(dòng)選擇是否設(shè)置swapfile(大內(nèi)存不設(shè)置加速讀取,小內(nèi)存自動(dòng)算swapfile最佳大小,當(dāng)然也可以手動(dòng)設(shè)置swap分區(qū))
  • 安裝錯(cuò)誤了,掃描二維碼的時(shí)候就自動(dòng)上傳錯(cuò)誤日志了,不需要來回倒騰錯(cuò)誤日志

深度啟動(dòng)盤制作工具

深度啟動(dòng)盤制作工具
  • 不需要研究各種U盤參數(shù)、引導(dǎo)參數(shù),選擇ISO文件,選擇U盤就可以直接制作U盤啟動(dòng)安裝盤
  • 系統(tǒng)安裝盤里包含了Windows安裝器,可以直接安裝在windows xp/windows 7/windows 8/windows 10的NTFS分區(qū)安裝深度操作系統(tǒng)

深度文件管理器

  • 經(jīng)典的文件操作方式, 沒有坑爹的設(shè)計(jì)
  • 基于rlocate開發(fā)了內(nèi)核模塊,2TB的文件名2秒中搜索完畢,而且會(huì)根據(jù)文件添加刪除啟動(dòng)實(shí)時(shí)維護(hù)搜索索引,不用手動(dòng)定期更新索引
  • 內(nèi)置avfs模塊,所有壓縮格式文件管理器秒開,而不用等漫長的解壓時(shí)間和額外解壓的磁盤空間
  • 未來版本直接掃描二維碼下載文件到手機(jī)(或者反過來玩),不用連上USB后在不同目錄來回穿梭

深度顯卡管理工具

1.png
2.png

Linux 的私有顯卡驅(qū)動(dòng)如果安裝失敗,會(huì)導(dǎo)致圖形環(huán)境直接崩潰,無法輸入密碼進(jìn)入桌面,如果不是Linux技術(shù)專家,普通的用戶完全沒法正常卸載私有驅(qū)動(dòng)和清理內(nèi)核動(dòng)態(tài)模塊,甚至還需要修改一些Xorg配置才能修復(fù)好系統(tǒng)重新進(jìn)入桌面。

深度顯卡管理工具的做了幾個(gè)核心的功能:

  • 提供開源驅(qū)動(dòng)、私有驅(qū)動(dòng)等不同的顯卡驅(qū)動(dòng)方案,供用戶快速選擇
  • 利用文件系統(tǒng)的 overlay 技術(shù),如果私有顯卡驅(qū)動(dòng)安裝后,會(huì)自動(dòng)對(duì)圖形進(jìn)行測(cè)試,如果失敗,會(huì)自動(dòng)把文件系統(tǒng)恢復(fù)到安裝私有顯卡驅(qū)動(dòng)之前的狀態(tài),即使顯卡驅(qū)動(dòng)安裝失敗都可以快速恢復(fù)到正常的系統(tǒng)狀態(tài)進(jìn)行使用,大大提高了私有顯卡驅(qū)動(dòng)的切換成功率和自動(dòng)恢復(fù)的能力,在沒有徹底解決顯卡驅(qū)動(dòng)硬件兼容性的前提下,可以最大程度的幫助用戶安全的切換顯卡驅(qū)動(dòng)

深度演示助手

deepin-presentation-assistant-cn1.png
deepin-presentation-assistant-cn2.png
deepin-presentation-assistant-cn3.png
  • 提供了圖片分享、PPT演示(手機(jī)變成翻頁器)、手機(jī)屏幕投屏的功能
  • 在企業(yè)開會(huì)或者老師上課的時(shí)候,都可以快速分享手機(jī)的內(nèi)容到電腦屏幕上

深度備份還原工具

1-1.png
2 (1).png
  • Linux下易用性最佳的備份還原工具,基于 libclone 庫(CloneZilla也是用這個(gè)庫實(shí)現(xiàn)的),基于磁盤扇區(qū)來備份和還原
  • 提供了磁盤、分區(qū)的備份和還原功能
  • 如果備份系統(tǒng)分區(qū),會(huì)自動(dòng)重啟進(jìn)入 Live 系統(tǒng)進(jìn)行系統(tǒng)分區(qū)的備份和還原操作

深度截圖工具

project-screenshot-1.png
  • 類似QQ截圖體驗(yàn)的截圖工具,Linux下最好用的截圖工具,不解釋

深度錄屏工具

deepin-screen-recorder2_zh.jpg

深度錄音工具

2-cn.jpg
  • 即使一個(gè)小小的錄音程序,每一個(gè)交互流程和細(xì)節(jié)都要做的精致

深度影院


deepin-movie-1.png
  • 無邊框沉浸式觀看影片, 只有鼠標(biāo)移動(dòng)到頂部或底部才顯示控件,看電影最重要的是內(nèi)容
  • 窗口跟隨視頻比例縮放,永遠(yuǎn)沒有黑邊
  • 最小化窗口切換到其他應(yīng)用時(shí)自動(dòng)暫停,切換回來后繼續(xù)播放

深度音樂

project-music-3.png
  • 簡潔的音樂播放器,可以放無損音樂
  • 自動(dòng)解決歌曲亂碼,不用自己折騰
  • 自動(dòng)下載歌曲歌詞和封面,專心聽音樂就好

深度看圖

deepin-imageviewer-3.png
  • 自動(dòng)同步圖片目錄,不用在目錄樹中眼花繚亂的找,自動(dòng)根據(jù)圖片拍攝時(shí)間按時(shí)光機(jī)排序
  • 簡單美觀看圖功能,其他亂七八糟功能沒有

深度終端

deepin-terminal-1.png
  • 同等功能的終端,啟動(dòng)速度最快、內(nèi)存占用最小
  • 類似Chrome的沉浸式體驗(yàn),除了標(biāo)簽以外每一像素都只顯示終端的內(nèi)容,內(nèi)容至上,不用無謂的控件喧賓奪主,讓用戶更加專注
  • 當(dāng)發(fā)現(xiàn)后臺(tái)工作區(qū)的任務(wù)完成后, 會(huì)通過標(biāo)簽的顏色及時(shí)通知我們, 只需要瞟一眼終端標(biāo)簽就可以知道后臺(tái)任務(wù)是否完成, 徹底告別人肉輪詢命令的時(shí)代了。 ;)
  • 自動(dòng)識(shí)別光標(biāo)下的連接地址, 只需右鍵就可以快速復(fù)制光標(biāo)下的連接地址, 當(dāng)然也可以 Ctrl + 左鍵快速用瀏覽器打開連接
  • 內(nèi)置分屏,不用學(xué)習(xí)tmux/screen也可享受分屏的高效
  • 內(nèi)置遠(yuǎn)程服務(wù)器管理功能, 更方便的管理數(shù)千太臺(tái)遠(yuǎn)程服務(wù)器,linux運(yùn)維人員的福音
  • 支持點(diǎn)陣字體顯示

深度系統(tǒng)監(jiān)視器

5957-85f90ad9b3de39b2.png
  • 系統(tǒng)資源監(jiān)控和進(jìn)程列表放在一個(gè)頁面中,用戶不用為了找最占資源的進(jìn)程來回在兩個(gè)標(biāo)簽中切換
  • 除了監(jiān)聽CPU、內(nèi)存外,對(duì)每個(gè)進(jìn)程的網(wǎng)絡(luò)IO和磁盤IO都進(jìn)行監(jiān)控,最快的速度查找出后臺(tái)占用帶寬的進(jìn)程
  • 把圖形化應(yīng)用程序、我的進(jìn)程和所有進(jìn)程用三個(gè)標(biāo)簽分出來,平常使用的時(shí)候只用查看第一個(gè)標(biāo)簽就可以管理圖形化應(yīng)用程序,不用在進(jìn)程的汪洋大海中來回滾屏
  • 提供圖形化的進(jìn)程終止功能,點(diǎn)哪殺哪,再也不用看著僵尸的應(yīng)用,不知道進(jìn)程列表中叫啥的那種不知所措了
  • 智能的分析進(jìn)程命令所在的位置,輕松知道各種程序安裝在什么地方

更多關(guān)于深度系統(tǒng)監(jiān)視器的技術(shù)細(xì)節(jié)可以查看:http://www.itdecent.cn/p/deb0ed35c1c2

深度遠(yuǎn)程協(xié)助

project-remoteassistance-1.png
project-remoteassistance-2.png
  • 6位數(shù)字就可以快速幫助別人和尋求別人幫助,沒有比這更簡單的遠(yuǎn)程幫助工具了

深度手冊(cè)

deepin-manual2.png
  • 圖文并茂,markdown的語法,方便社區(qū)協(xié)作,美觀易度

深度云打印/深度云掃描

![project-cloudscan-2.png](http://upload-images.jianshu.io/upload_images/5957-309a61d3871ab835.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • 企業(yè)用戶,內(nèi)網(wǎng)直接支持所有打印機(jī)和掃描儀

深度取色器

01-255x150.jpg
02-255x150.jpg
  • Linux 下操作最簡單的屏幕取色器
  • 可以高性能實(shí)時(shí)取色,比如光標(biāo)下有

深度開源字體

deepin-opensymbol1.jpg
  • 社區(qū)中吵了十幾年的Office排版字體,要不就是吐槽,要不就是拷貝微軟版權(quán)字體,沒有人站出來解決問題。5個(gè)版權(quán)字體,上千個(gè)符號(hào),我們一個(gè)一個(gè)字體,自己重新畫了一遍,然后開源給大家免費(fèi)使用,行動(dòng)才能推動(dòng)開源,而不是靠嘴

deepin-emacs

deepin-emacs2-1.png
f60d05d0-8c1e-11e3-98c7-a14fa75e3ff7.png
  • 我十幾年的Emacs插件和貼心配置,那時(shí)候還沒有 spacemacs 存在呢: 那些鄙視deepin只會(huì)開發(fā)圖形應(yīng)用的噴子, 命令行操作先超過我再來噴吧, https://www.emacswiki.org/emacs/AndyStewart , 我Emacs做任何事情全程不用一下鼠標(biāo)

對(duì)上游社區(qū)的貢獻(xiàn)

深度操作系統(tǒng)的發(fā)展是站在上游社區(qū)的基礎(chǔ)之上才能走到今天,除了我們自己開發(fā)了數(shù)百萬行代碼的原創(chuàng)開源項(xiàng)目外,我們深知只有秉承 “取之于開源,回饋予開源” 的開源理念,才能將我們自己的代碼和功能改進(jìn)回饋予上游開源社區(qū),才能更好的推動(dòng)全世界的開源運(yùn)動(dòng)向前不斷發(fā)展。

深度團(tuán)隊(duì)對(duì)于上游社區(qū),比如Wine、Emacs、Gtk+、Miracast都做了非常多的貢獻(xiàn),比如Miracast電腦向電視投射的功能就是Deepin團(tuán)隊(duì)主導(dǎo)開發(fā)的。

更多對(duì)上游社區(qū)的代碼貢獻(xiàn)可以查看https://www.deepin.org/developer-community/community-contributions/ 所有代碼都是在GPL3的協(xié)議下進(jìn)行貢獻(xiàn)。

國內(nèi)生態(tài)應(yīng)用

推動(dòng)國內(nèi)開源社區(qū)的發(fā)展,光靠自己開發(fā)系統(tǒng)和應(yīng)用遠(yuǎn)遠(yuǎn)不夠,還要聯(lián)合國內(nèi)頂尖的軟件廠商開發(fā)Linux版應(yīng)用才是未來,下面舉一下deepin在應(yīng)用生態(tài)的貢獻(xiàn):

  • 2013年聯(lián)合搜狗開發(fā)了搜狗輸入法 for Linux
  • 2015年聯(lián)合網(wǎng)易開發(fā)了有道詞典 for linux
  • 2016年聯(lián)合網(wǎng)易開發(fā)了網(wǎng)易云音樂 for linux
11293849zi444azmi33e9g.jpg
7fe698e9d1c9f041fc1bc9b8c899fb60_b.png

開發(fā)這些應(yīng)用,深度投入了巨大的財(cái)力人力不求回報(bào),只求國內(nèi)的linux用戶能夠更加幸福一點(diǎn),我們未來會(huì)聯(lián)合國內(nèi)的廠商開發(fā)更多的Linux應(yīng)用,我們堅(jiān)信Linux生態(tài)普及的那一天。

為什么開源的輪子不能用?

深度造了那么多輪子,為什么不用社區(qū)的?

  • 社區(qū)技術(shù)大拿很多,但是技術(shù)強(qiáng)大的同時(shí)能把一個(gè)應(yīng)用的UI和交互細(xì)節(jié)做好的開發(fā)者鮮有
  • 社區(qū)大部分軟件都是面向開發(fā)者,功能確實(shí)強(qiáng)大,但是對(duì)于小白用戶來說太復(fù)雜了
  • 深度希望十年之內(nèi)解決linux桌面的問題,我們內(nèi)部每天幾百個(gè)commit的快速迭代,社區(qū)主導(dǎo)開發(fā)完了花都謝了
  • 希望做出來再吹牛,不想天天在社區(qū)打嘴泡

十幾年開源社區(qū)為什么做不好桌面?

  • 主要用戶群體是開發(fā)者,大多數(shù)開發(fā)者喜歡黑客般的各種功能堆在一起,而普通用戶只需要簡單易用的產(chǎn)品
  • 太過于碎片化:大家不齊心,每個(gè)人都造半成品互相打壓,沒有形成合力,最后社區(qū)除了大量的半成品,并沒有多少應(yīng)用能夠比Windows軟件更好(真正能和Windows平臺(tái)堪比的應(yīng)用不超過50個(gè))
  • 鄙視小白的氛圍不好,技術(shù)稍微好一點(diǎn)的人就打擊小白用戶,大量真正的桌面小白用戶走了以后,最后導(dǎo)致大家都不關(guān)心桌面的細(xì)節(jié)體驗(yàn)
  • 做的太少,說的太多,有行動(dòng),10年就是翻天覆地變化,而不是大家時(shí)間長了都失望了

開源社區(qū)擅長什么?

  • 開源社區(qū)適合做遠(yuǎn)程協(xié)助,碎片化的事情,比如文檔和翻譯,深度社區(qū)全世界的翻譯貢獻(xiàn)者就超過300多名: https://www.transifex.com/linuxdeepin/public/ , 曾經(jīng)創(chuàng)造西班牙語一星期就翻譯完整個(gè)系統(tǒng)的奇跡
  • 開源社區(qū)適合吐槽, 我說的是客觀的吐槽,https://bbs.deepin.org/ 各種用戶幫助開發(fā)團(tuán)隊(duì)發(fā)現(xiàn)更多測(cè)試版的bug和非常非常好的反饋建議
  • 開源社區(qū)適合打包移植, https://www.deepin.org/dde/desktop-transplantation/ 目前深度桌面已經(jīng)移植到 Arch, Manjaro, SparkyLinux, openSuse, Ubuntu, Gentoo, Fedora 等發(fā)行版

國內(nèi)技術(shù)圈偏見

我在開源社區(qū)十幾年看到國內(nèi)技術(shù)圈很多偏見,最主要的有幾個(gè):

  • 拿著自己的平鋪式窗口管理器裝X,鄙視小白用戶:其實(shí)玩過的人都知道,就是一些配置,花一些耐心和毅力就能搞定,這些只能證明你比較能折騰,但折騰并不代表你的學(xué)識(shí)淵博和能力高超,更不是鄙視和嘲笑別人的資本
  • 認(rèn)為只有玩內(nèi)核才是技術(shù)高手: 不懂linux的人這樣認(rèn)為,很多開發(fā)者也這樣認(rèn)為,真正開發(fā)內(nèi)核的開發(fā)者都知道,內(nèi)核開發(fā)和應(yīng)用開發(fā)和其他任何開發(fā)都一樣,唯一的不同就是更難調(diào)試,更復(fù)雜。不是只會(huì)內(nèi)核開發(fā)的開發(fā)者才是最厲害的人,很多內(nèi)核的開發(fā)都要和應(yīng)用以及現(xiàn)實(shí)場(chǎng)景配合才有意義。更不是自己會(huì)編譯內(nèi)核就開始了不起了
  • 認(rèn)為做UI和桌面環(huán)境很容易: 其實(shí)很多嘲笑做UI的人,即使是一些開發(fā)者,我相信大部分人連XCB以及窗口移動(dòng),甚至窗口陰影都繪制不出來,在國內(nèi)看到太多拿著無知當(dāng)權(quán)威的噴子了,希望這些人長大以后學(xué)會(huì)謙虛。其實(shí)大家都是看著功成名就來評(píng)判的,蘋果應(yīng)該是這個(gè)世界上折騰UI細(xì)節(jié)最多的公司,但是沒有人說蘋果只會(huì)UI,為什么?國人就喜歡打壓還沒有成功的公司,然后跟風(fēng)吹捧成功的公司和產(chǎn)品
  • Linux就是應(yīng)該折騰: Linux早期的折騰對(duì)于開發(fā)者來說是非常有幫助的,但是人都有會(huì)老,都會(huì)累的那一天(要不是為什么達(dá)拉斯黑客大會(huì)那么多大牛最后用Mac, 是因?yàn)樗麄冋垓v沒有你多嗎?),一旦折騰完Linux就應(yīng)該花更多時(shí)間去學(xué)習(xí)新的知識(shí)或享受生活, 而不是一直都在折騰,然后鄙視不會(huì)折騰的人

前途漫漫,還需努力

深度從2004年到現(xiàn)在已經(jīng)努力了13年了,未來還有很長路要走,希望最終的努力可以達(dá)到兩個(gè)目標(biāo):

  • 讓國內(nèi)喜歡開源的開發(fā)者能夠做自己喜歡的事情,養(yǎng)活自己,養(yǎng)活家人
  • 功能像Windows那樣豐富,界面像Mac那樣美觀,而且源代碼還全部開源, 幫助更多人學(xué)習(xí)開源技術(shù)

希望對(duì)中國的開源社區(qū)做出更多貢獻(xiàn)

希望大家看了我的文章,好好努力,多多為開源社區(qū)做力所能及的貢獻(xiàn)!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,318評(píng)論 25 708
  • 這幾天看到 Ubuntu 放棄 Unity 和 Mir 開發(fā),轉(zhuǎn)向 Gnome 作為默認(rèn)桌面環(huán)境的新聞,作為一個(gè)L...
    ManateeLazyCat閱讀 68,343評(píng)論 97 276
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,614評(píng)論 4 61
  • 還沒開學(xué),就忙碌了一天。從清早醒來去上班,到現(xiàn)在晚上十點(diǎn)半,盤點(diǎn)一整天工作,聽了初中教職工大會(huì),年級(jí)會(huì),班主任會(huì)。...
    楓兒a閱讀 1,233評(píng)論 8 23
  • 恍惚間,我都畢業(yè)兩年了,兩年來我也換了好幾份工作了。我的學(xué)歷是大專,新聞采編與制作專業(yè),我夢(mèng)想成為一名journa...
    空靈的雪閱讀 273評(píng)論 0 0

友情鏈接更多精彩內(nèi)容