深度桌面操作系統架構設計 頂 原 薦

今天就結合深度桌面操作系統給大家講講桌面操作系統的架構設計和原理細節,一來向外界講講深度這麼多年都做了哪些工作,二來希望通過客觀公正的事實向中國新一代的開源愛好者講述怎麼用正確的三觀去貢獻自己的力量。

什麼是桌面操作系統?

簡而言之,桌面操作系統就是大家平常個人電腦裏面用的操作系統。 桌面操作系統應該是所有操作系統類型中最爲複雜、研發技術難度最高的一種操作系統了。 世界上非常優秀的桌面操作系統有微軟的Windows和蘋果的Mac OS,其他的Linux桌面操作系統,比如Fedora、Suse、Ubuntu包括我們自己的Deepin,雖然這十幾年取得了長足的進步,但是相對於Windows和Mac OS,不論技術先進性、交互設計還是產品質量方面都還有非常大的差距。

桌面操作系統都有哪些部分組成?

一個普通用戶使用的桌面操作系統的組成部分主要包括:

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

桌面操作系統所用編程語言介紹

桌面操作系統都需要那些編程語言呢? 就以深度桌面操作系統爲例:

  • 服務型的後端都用golang語言: golang語言能夠完美調用大量C語言編寫的底層庫,同時開發效率和運行效率都俱佳,寫出來的程序很少會出錯,深度桌面系統的後端主要使用的就是golang語言來編寫的。
  • 前端界面主要用 Qt/C++ 來編寫,因爲Qt相對於Gtk有更好的技術支持、代碼質量以及API延續性都要比Gtk+3好很多,深度採用C++來編寫包括桌面環境和深度系列應用的前端界面

深度在2014年之前,自己做了一個WebKit/Html5的本地渲染引擎,可以直接用CoffeeScript像網頁開發一樣來編寫桌面環境的界面,但是最後因爲WebKit對於常駐性的桌面環境進程來並不適合,長時間不關機非常容易引起內存泄露和性能問題。包括2014年之前,採用的Python/QML來開發的應用都全部由 QtWidget/C++ 替換掉,主要是因爲Python在國產CPU平臺(龍芯、申威)上運行很慢,QML的解釋特性和默認OpenGL渲染的機制都導致軟件實際運行的性能不好。

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

什麼是桌面環境?

桌面環境簡單來說,就是在內核和X Server之上,寫一批程序讓用戶可以登陸就可以直覺性的流暢使用桌面、任務欄、開始菜單、文件操作和系統設置。

這個世界上從功能完整性和產品質量來看主要有四個桌面環境:

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

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

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

桌面環境和那些換主題的工作差別在哪裏?

可以說,桌面操作系統的核心技術和產品功力都聚焦在桌面環境上。 只有掌握了桌面環境這個古老而又深奧的核心技術,才能說在桌面操作系統上可以任意修改和改進,才能給用戶帶來更好的用戶體驗。

因爲桌面環境強調的是從上至下全棧技術攻克,不論技術深度、技術全面性和代碼工程量來說都是巨大的,開發一個功能完備的桌面環境需要20+人以上的團隊工作最少2年以上才能打造出來,而且桌面環境的技術核心全部都依賴一批古老的協議,比如:x11、xcb、composite等基礎技術,互聯網上幾乎沒有文檔教你怎麼一步一步的構建桌面環境,現成的桌面環境因爲發展多年,代碼已經非常複雜,最多隻能從核心代碼片段有所學習。一個人要至上而下框架式的學習桌面環境核心技術並實現一套功能完備的桌面環境幾乎不可能。

所以,大部分的Linux發行版都是基於Gnome、KDE改的,大多數都是在網上找一批主題(Gtk+主題、圖標主題、光標主題、窗口邊框主題、DM主題、鎖屏主題)再配上一張好看的壁紙就可以做一套自己DIY的桌面環境。很多Linux社區的用戶說,你看我自己都可以做桌面環境,甚至很多國內的Linux發行版廠商也是拿着社區的桌面環境然後換一套皮膚就去騙政府的錢,說自己是自主研發的操作系統(很可悲,這個世界上騙子永遠比正直的人多)。

既然換套主題也可以很好,那麼桌面環境和那些換主題的工作差別在哪裏? 在我看來,主要在幾個方面:

  • 核心技術能力:如果沒有掌握桌面環境的核心技術,所有的修改能力僅僅限於修改主題、logo、字符串替換的能力
  • 產品質量無法保障:特別是有很多隱蔽性的bug,如果不掌握核心技術,連問題發生的原因都不知道,更不用提怎麼解決
  • 設計細節:如果大家仔細看那些只是套用主題的桌面環境,就會發現外面看着還可以,但是很多按鈕的顏色、留白以及控件的對齊都是有問題的,甚至是粗糙的,爲什麼?這是由GTK+的主題設計導致的,GTK+強調的是一套原生控件打天下,但是面對無窮的應用和需求,不是所有的交互都能靠一套控件才能滿足的,在大多數Linux社區開發者不具備控件自繪的能力前提下,大多數開發者都選擇套用不合適的控件和控件主題去拼裝,而GTK+主題的作者不可能在製作主題的時候測試所有軟件,而且從GTK+先天限制也做不到,最後導致不論怎麼套用主題,各種軟件拼裝在一起,就像各種質量參差不齊的補丁拼在一起一樣的,大多數開源社區開發者被虐很多年可以忍受粗糙的設計細節(我看到很多開發者喜歡黑色主題也是因爲黑成一片就看不出來了,哈哈哈),但是對於普通用戶來說,這種拼裝的設計細節就像拿着當年的諾基亞和現在的iPhone7放一塊的感覺那麼強烈
  • 統一的操作接口:比如右鍵菜單、文件打開對話框、認證對話框等等,只有從深層次統一這些底層接口,纔不會看到不同風格的右鍵菜單、文件打開對話框、認證對話框,這些都對於統一的桌面操作系統體驗非常重要,想一想如果你自己買的iPhone各處都粗糙不一樣,你會不會砸了它?但是爲啥這麼多開源愛好者就能忍受這些粗糙的東西?(因爲自己沒有花錢,花了錢你看他不把客服電話打爆...)

深度桌面環境是怎麼構建的?

在說怎麼構建桌面環境之前,先放三張深度桌面環境的圖:

輸入圖片說明 輸入圖片說明 輸入圖片說明

是不是美哭了? 這就是自己從頭構建桌面環境和只換皮膚主題的差別。

好了,前方專業技術高能, 請各位抓緊扶好,我要開始講桌面環境架構了。 講之前先放一張架構圖:

輸入圖片說明

一個完整的桌面系統從技術剖面看,從下到上主要分這幾層:

  • 內核驅動層:前面已經說了,主要是保障硬件的基本功能和兼容性,所有的Linux發行版都大同小異,差別就是內核補丁集不一樣,或者集成的驅動和固件多少的差異
  • 顯示服務層:從內核引導到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應用和網頁應用,爲什麼在Linux可以直接運行Android和Windows應用? 我也後面再講,嘿嘿

簡單來說,桌面環境的設計和實現就是把所有底層抽象的硬件、庫和各種各樣的狀態進行管理,最後通過界面的方式和合理的交互設計與用戶進行交互,讓用戶可以自然、流暢的使用各種應用完成自己的工作。

這一章我只講桌面環境的細節,像內核以及X Server的技術又是一個非常長的歷史和篇幅, 請看官們自行Google內核以及X Server (X11、XCB)相關的文章來看,我就不展開敘述了。

關於應用商店和應用後面會詳細講, 所以這裏我們就向大家詳細描述一下從顯示管理器到桌面環境都做了哪些事情?爲了方便大家理解,全程不講源代碼,有開發經驗的朋友可以直接去 github 上面查看我們的代碼: https://github.com/linuxdeepin/ , 深度所有項目的源代碼都是按照 GPL3 許可證實時開源的(只要內部代碼審查機器人通過代碼質量審查以後就會由機器人自動推送到 github )

輸入圖片說明

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

輸入圖片說明

除了基本的用戶認證、多用戶切換、日期和關機功能以外,還會提供:

  • 多媒體的控制接口(右下角),方便用戶鎖屏和切換用戶的時候切換音樂和暫停音樂
  • 當系統使用多屏幕時,啓動和解鎖時,會根據用戶的鼠標位置切換鎖屏主界面
  • 在用戶輸入密碼的時候,就直接啓動一些系統級的服務,比如電源、賬戶、亮度等守護程序,這樣用戶輸入密碼的過程很多系統服務就加載好了,可以相對於其他桌面環境同等服務縮短30%以上的登錄時間

輸入圖片說明

當顯示管理器認證成功以後,就會調用 greeter 的 exec 參數,深度桌面環境就是 startdde, startdde 從名字看很容易理解,就是啓動深度桌面環境的引導程序,爲了讓深度桌面環境可以正常啓動和顯示,startdde調用時會執行以下操作:

  • 基本的桌面會話管理,比如大家熟知的註銷、重啓等操作
  • 按照 xsettings 主題規範設置整個系統的主題,保證桌面環境以及桌面環境的應用,不論Gtk+還是Qt可以正常的加載用戶設置的主題。屏幕DPI設置也是在這個階段初始化完成的
  • 根據 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 的殼。我非常尊重每一位技術開發者,但是真的對於那些完全不基於調查,只是簡簡單單基於對國內開發團隊鄙視而輕言下結論的人感到痛心,這也是我今天寫這篇文章的原因之一,希望國人基於事實支持好的產品和團隊,停止一切不實的攻擊和亂噴。

輸入圖片說明

在深度桌面環境的後臺守護進程基礎之上,桌面環境會對外提供一個API層,包括圖形開發工具庫、二進制工具和DBus API接口,供桌面環境和應用程序直接調用,而不用自己重頭開發,其中DBus API部分都通過DBus總線在應用調用特定的接口時動態喚醒(默認不常駐內存),任何語言編寫的應用都可以輕鬆調用,根據上面圖所示,從左到右分別進行介紹。

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

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

感興趣的開發者自己看源代碼吧: https://github.com/linuxdeepin/deepin-tool-kit , 基於我們的DTK比直接基於Qt5開發,能夠更快的開發出美輪美奐的產品, 同時也歡迎社區開發者大神吐槽和提交補丁。 ;)

dde-api binary utils: 這一層主要是 dde-session-daemon 和 dde-system-daemon 在開發過程中發展出來的二進制工具,方便深度桌面環境以外的應用可以直接使用這些工具,減少核心技術的重複開發:

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

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

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

說到用戶體驗的一致性,包括右鍵菜單、對話框、認證密碼框這些看是小的地方(也是90% linux開發者不屑的地方),給用戶帶來的體驗是最深刻的,一個產品的質量不光是你大老遠一看很美或者主題很美,很多小細節的地方做好,才能得到用戶的尊重。用戶用到這些小細節的時候,會知道後面是一羣用心的人在做事情,而不僅僅只是寫個功能丟在那裏就完事。

輸入圖片說明

深度桌面環境的最後一部分就是深度桌面環境的UI展示層,主要有:

  • dde-wm: 窗口管理器,我們寫了兩個窗口窗口管理器,根據用戶的硬件性能和顯卡驅動情況自動使用2D窗口管理器還是3D窗口管理器,像Gnome的話,你還要手動註銷(關閉所有窗口)才能在3D和classic模式中切換,而深度桌面環境完全是自動的。每個工作區可以單獨設置不同壁紙:

輸入圖片說明

  • dde-desktop: 桌面模塊,基本的文件網格對齊功能,拖動文件會自動進行網格對齊,很多桌面就是簡單的一個壁紙然後還要費勁的人工對齊,還有下面這種換壁紙的方式,輕輕一點就行了, linux最簡單的換壁紙操作:

輸入圖片說明

  • dde-dock: 不論你喜歡Mac還是Windows風格的任務欄,都可以隨時切換
  • dde-launcher: 不論你喜歡Mac還是Windows風格的開始菜單,都可以隨時切換

輸入圖片說明 輸入圖片說明

  • dde-control-center: 深度控制中心,到底有多方便, 我一會在下面說 ;)
  • dde-osd: 當按下音量、亮度等多媒體按鍵時在屏幕中間顯示快速提示
  • dde-lock: 提供系統的鎖屏服務
  • 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編寫的程序,再也不用爲不同圖形庫開發的程序彈出不同風格的文件打開對話框這種事情煩惱了

輸入圖片說明

爲什麼要自己寫桌面環境?

很多人都在問我, 爲什麼深度要自己寫桌面環境,其實回答很簡單:

  • 我希望給用戶提供交互細節最簡潔的操作體驗,傻瓜式操作,不需要長時間學習
  • 我希望用戶會因爲UI細節精緻的Wow一聲, 就像第一次看到iPhone一樣
  • 我希望用戶看到很多貼心的小細節時,會覺得操作系統後面有一羣人關心他們,貼心的功能會讓他們會心一笑,而不是面對一臺冰冷冷的機器

如果不自己寫桌面環境,就達不到這些嚴苛的要求:

  • 我要能改每一像素,只要用戶覺得不爽,一切都是用戶爲嚮導,而不是以開發者的個人喜好爲導向
  • 快速改進,很多社區開發者都說你應該給Gnome或KDE提交補丁,對不起,明明可以10分鐘做一個用戶喜歡的功能的時候, 卻要和各種專家開發者討論1個月才合併補丁或者上游開發者根本就不理,Linux桌面就死在改一個功能慢的要死,最後大多數用戶失去耐心,不陪你玩無奈的離開了
  • 統一的交互體驗,統一的設計語言, 不要拼裝,很多linux老用戶除了宣揚開源文化和民主的決策(其實每個項目都是由創建者獨裁)外,甚至拿着一大堆各式各樣的社區demo作品美曰“社區協作”,深度只想系統和所有應用是能夠堪比Windows/Mac的產品質量的藝術品

當很多社區開發者數以十年的只讚揚開源文化和協作的時候,我真想說,世界要讓更多普通用戶接觸和認可Linux的情況下,開源文化才能更快更廣泛的推廣, 而不是偏執的自虐以後,自欺欺人拿着質量參差不齊的應用去洗腦那些不認同的普通用戶,洗腦不行就開始鄙視和嘲諷。

其實做一個簡單的類比,如果有人讓你買一部醜到爆,那用到要死的手機,但是告訴你這手機裏的每行代碼都開源的,有多少人會真正買?我想大多數開源愛好者都自己都不會買

很多時候,往往簡單的換位思考就會認清開源社區的種種問題...

深度桌面環境的交互細節以及橫向對比

下面我只簡單的舉一些深度桌面的小細節來說明爲什麼做桌面環境的必要性,以下這些特性不是什麼黑科技,也不是深度才獨有的,但都是研發團隊通過用心思考,研究用戶的痛點,通過簡單的設計就能解決用戶的問題,而不是浪費用戶幾小時甚至幾天的時間去“忍受”系統。

  • 默認折騰好QQ、字體設置、解碼器:不用裝好系統滿世界折騰Wine、粘貼xorg配置和下載不知道包名叫啥的解碼器
  • 屏幕旋轉不用歪着頭逆天的移動鼠標:注意看下圖,系統進行屏幕方向設置的時候,會彈出一個全屏界面,向左旋轉就點一下鼠標左鍵,繼續選裝的話就繼續點鼠標左鍵,什麼時候旋轉好了,點擊鼠標右鍵確認,旋轉屏幕的時候,全程不需要歪着頭,也不用拿着鼠標暈頭轉向的找“確定”按鈕,這個問題,即使Windows和Mac都做的非常不好, 其他linux系統也一樣,有人仔細研究了這個二十多年的非人類痛點了嗎?我始終認爲,這纔是一個桌面研發團隊應該關注的,通過小小的創新就可以解決用戶的大痛苦

輸入圖片說明

  • 邊界值的時候要有吸附功能: 注意看下圖,當選擇聲音左右平衡時,不論左、右還是中間平衡那點,只要在周圍 -5px ~ 5px 的範圍都會自動吸附到左、右、中間的那個點,用戶即使觸摸板或鼠標不好用,都不會發生在平衡點左右差一點的位置來回晃(同時拖住不放就可以精確調整),這也不是什麼大功能, 但是每個用戶都會遇到這種不爽的操作

輸入圖片說明

  • 設置時區的時候顯示白天黑夜:當你添加其他時區時,除了提示比當前快還是慢,一眼就可以通過錶盤判斷當地時間是黑夜還是晚上

輸入圖片說明

  • 不要在世界地圖上費勁的找一個點:注意看哈,當你在歐洲那一塊選擇城市時,因爲歐洲的城市在地圖太密了(比如梵蒂岡),根本就無法快速選擇,這時候你隨便一點,當發現鼠標周圍太多城市時,就會彈出一個菜單列表,把鼠標範圍的城市都彈出來讓你選擇,你只需要輕輕鬆鬆兩下鼠標就可以選擇時區城市,再也不用辛苦的去找螞蟻那麼大點的城市, 這種事情我好像沒有發現別的系統在關心用戶

輸入圖片說明

  • 打字時禁用觸摸板: 國內好多性價比高的筆記本觸摸板很容易誤碰,手掌一不小心就碰到觸摸板導致光標亂飛,你只要開了這個開關,打字的時候觸摸板就不響應,你打字一停馬上就可以響應,這樣就可以解決硬件的問題,當然你也可以寫一段腳本然後添加到開機服務中折騰半天,而在深度桌面環境,只需要一個開關的事情

輸入圖片說明

  • 開機畫面輕輕一拖就更換了: 在深度控制中心中,看到你喜歡的壁紙自動拖拽一下就可以自動設置,想象一下你打開 grub-customizer, 首先要求壁紙的分辨率是對的,然後寬高比也要對,否則設置出來就是各種黑邊。爲啥深度裏面一拖就可以? 控制中心發現你的圖片和屏幕寬高比不一樣的時候會自動裁剪上下或者左右的部分,然後設置一張分辨率和寬高比和屏幕一模一樣的壁紙,一個要折騰10分鐘,一個只需要5秒鐘

輸入圖片說明

像這種貼心的設置,在深度桌面環境中隨處可見,而這些交互細節的背後需要的是對用戶場景的思考、換位思考理解用戶痛苦以及完全掌控所有代碼才能做到。 我一直都相信:好的系統是讓用戶覺得不多不少,剛剛好,而且很貼心。而不是堆砌滿屏的開關選項,讓用戶看着就頭疼,再天書文案糾結半天都不知道怎麼做。

深度商店

輸入圖片說明

深度商店是Linux下第一款有產品質量和交互體驗優秀的應用商店,以前的社區的都只能叫軟件管理工具。 這裏你可以看到的所有高質量的軟件都可以搜索,一鍵安裝使用,再也不用自己折騰 myeclipse、sublime、 shadowsocks-qt5、迅雷、RTX等各種應用,所有軟件都默認打包好放到軟件倉庫,也不用擔心添加了哪個質量不佳的ppa把系統搞死了,所有的依賴默認就調好了,裝完就用。

除了支持深度系列應用, 還通過 deepin-wine 支持50+多款Windows應用,通過內置 Android runtime支持200+多款Android應用(比如憤怒小鳥,各種視頻客戶端),通過和Intel合作開發 deepin-xwalk 直接支持html5應用(比如Gliffy等)還可以自己記住窗口大小(而不是打開一個賊大的瀏覽器)

所有deepin對Wine上游的代碼級貢獻大家都可以在 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.org 和 http://source.winehq.org/git/wine.git/?a=search&h=HEAD&st=commit&s=deepin 公開查詢到 很多社區開發者說,我們用社區的Wine也能跑QQ, 爲啥要用Deepin? 我只能說的是,社區版的Wine如果沒有deepin這幾年的貢獻,你啥都跑不了,不管你換什麼linux發行版。

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

輸入圖片說明

深度應用商店從技術架構上,主要分爲lastore-daemon、lastore-session-helper、deepin-appstore三個部分:

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

深度造了哪些應用?

除了深度桌面環境和應用商店,我們自己截止到2017年1月,深度自己還造了15個精品應用和3款廠商聯合開發應用,下面我只說每個應用的關鍵亮點,更多的細節只能感興趣的用戶自己體會了 https://www.deepin.org/original/

深度安裝器:

輸入圖片說明

輸入圖片說明

輸入圖片說明

  • 如果你在有wifi的地方,安裝器不用連接網絡,自動從路由器中找出國家碼設置時區,不需要網絡連接和GPS就可以準確知道用戶在哪個時區,不需要讓用戶手動設置時區
  • 安裝linux不需要知道分區知識,不需要知道 /、/var、/boot、/home、swap啥概念,選擇任意空白分區即可安裝,還可以根據內存大小自動選擇是否設置swapfile(大內存不設置加速讀取,小內存自動算swapfile最佳大小,當然也可以手動設置swap分區)
  • 安裝錯誤了,掃描二維碼的時候就自動上傳錯誤日誌了,不需要來回倒騰錯誤日誌

深度啓動盤製作工具

輸入圖片說明

  • 不需要研究各種U盤參數、引導參數,選擇ISO文件,選擇U盤就可以直接製作U盤啓動安裝盤
  • 系統安裝盤裏包含了Windows安裝器,可以直接安裝在windows xp/windows 7/windows 8/windows 10的NTFS分區安裝深度操作系統

深度文件管理器

輸入圖片說明

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

深度截圖工具

輸入圖片說明

  • 類似QQ截圖體驗的截圖工具,Linux下最好用的截圖工具,不解釋

深度影院

輸入圖片說明

  • 無邊框沉浸式觀看影片, 只有鼠標移動到頂部或底部才顯示控件,看電影最重要的是內容
  • 窗口跟隨視頻比例縮放,永遠沒有黑邊
  • 最小化窗口切換到其他應用時自動暫停,切換回來後繼續播放

深度音樂

輸入圖片說明

  • 簡潔的音樂播放器,可以放無損音樂
  • 自動解決歌曲亂碼,不用自己折騰
  • 自動下載歌曲歌詞和封面,專心聽音樂就好

深度看圖

輸入圖片說明

  • 自動同步圖片目錄,不用在目錄樹中眼花繚亂的找,自動根據圖片拍攝時間按時光機排序
  • 簡單美觀看圖功能,其他亂七八糟功能沒有

深度終端

輸入圖片說明

  • 同等功能的終端,啓動速度最快、內存佔用最小
  • 類似Chrome的沉浸式體驗,除了標籤以外每一像素都只顯示終端的內容,內容至上,不用無謂的控件喧賓奪主,讓用戶更加專注
  • 當發現後臺工作區的任務完成後, 會通過標籤的顏色及時通知我們, 只需要瞟一眼終端標籤就可以知道後臺任務是否完成, 徹底告別人肉輪詢命令的時代了。 ;)
  • 自動識別光標下的連接地址, 只需右鍵就可以快速複製光標下的連接地址, 當然也可以 Ctrl + 左鍵快速用瀏覽器打開連接
  • 內置分屏,不用學習tmux/screen也可享受分屏的高效
  • 內置遠程服務器管理功能, 更方便的管理數千太機器
  • 支持點陣字體顯示

深度遠程協助

輸入圖片說明 輸入圖片說明

  • 6位數字就可以快速幫助別人和尋求別人幫助,沒有比這更簡單的遠程幫助工具了

深度手冊

輸入圖片說明

  • 圖文並茂,markdown的語法,方便社區協作,美觀易度

深度雲打印/深度雲掃描

輸入圖片說明

輸入圖片說明

  • 企業用戶,內網直接支持所有打印機和掃描儀

深度開源字體

輸入圖片說明

  • 社區中吵了十幾年的Office排版字體,要不就是吐槽,要不就是拷貝微軟版權字體,沒有人站住來解決問題。5個版權字體,上千個符號,我們一個一個字體,自己重新畫了一遍,然後開源給大家免費使用,行動才能推動開源,而不是靠嘴

deepin-emacs

輸入圖片說明 輸入圖片說明

  • 我十幾年的Emacs插件和貼心配置,那時候還沒有 spacemacs 存在呢: 那些鄙視deepin只會開發圖形應用的噴子, 命令行操作先超過我再來噴吧, https://www.emacswiki.org/emacs/AndyStewart , 我Emacs做任何事情全程不用一下鼠標

國內生態應用

推動國內開源社區的發展,光靠自己開發系統和應用遠遠不夠,還要聯合國內頂尖的軟件廠商開發Linux版應用纔是未來,下面舉一下deepin在應用生態的貢獻:

  • 2013年聯合搜狗開發了搜狗輸入法 for Linux
  • 2015年聯合網易開發了有道詞典 for linux
  • 2016年聯合網易開發了網易雲音樂 for linux

輸入圖片說明 輸入圖片說明 輸入圖片說明

開發這些應用,深度投入了巨大的財力人力不求回報,只求國內的linux用戶能夠更加幸福一點,我們未來會聯合國內的廠商開發更多的Linux應用,我們堅信Linux生態普及的那一天。

爲什麼開源的輪子不能用?

深度造了那麼多輪子,爲什麼不用社區的?

  • 社區技術大拿很多,但是技術強大的同時能把一個應用的UI和交互細節做好的開發者鮮有
  • 社區大部分軟件都是面向開發者,功能確實強大,但是對於小白用戶來說太複雜了
  • 深度希望十年之內解決linux桌面的問題,我們內部每天幾百個commit的快速迭代,社區主導開發完了花都涼了
  • 希望做出來再吹牛,不想天天在社區打嘴泡

十幾年開源社區爲什麼做不好桌面?

  • 主要用戶羣體是開發者,大多數開發者喜歡黑客般的各種功能堆在一起,而普通用戶只需要簡單易用的產品
  • 太過於碎片化:大家不齊心,每個人都造半成品互相打壓,沒有形成合力,最後社區除了大量的半成品,並沒有多少應用能夠比Windows軟件更好(真正能和Windows平臺堪比的應用不超過50個)
  • 鄙視小白的氛圍不好,技術稍微好一點的人就打擊小白用戶,大量真正的桌面小白用戶走了以後,最後導致大家都不關心桌面的細節體驗
  • 做的太少,說的太多,有行動,10年就是翻天覆地變化,而不是大家時間長了都失望了

開源社區擅長什麼?

  • 開源社區適合做遠程協助,碎片化的事情,比如文檔和翻譯,深度社區全世界的翻譯貢獻者就超過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那樣美觀,而且源代碼還全部開源, 幫助更多人學習開源技術

希望對中國的開源社區做出更多貢獻

希望大家看了我的文章,好好努力,多多爲開源社區做力所能及的貢獻!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章