Zusammenfassung

Um Entwickler mehr über deepin erfahren zu lassen, enthält dieser Artikel Beschreibungen und Bilder, die das Architekturdesign von deepin und die Funktionen der Basismodulen erklären. Dies hilft Entwicklern, eine umfassende Sicht auf die Designidee und seine Richtung zu erhalten. Auf Code und Module im einzelnen wird hier nicht eingegangen, für weitere Informationen über den Code, siehe https://github.com/linuxdeepin.

Architektur Übersicht

Ein komplettes Desktop-Betriebssystem kann als folgende Ebenen aufgeteilt werden:

Das ist einfach das Login-Screen, ein Interface, wobei Sie das Passwort eingeben.

Kernel/Treiber Es ist für Hardware wie CPU, Arbeitsspeicher und Festplatte, etc. und muss kompatibel mit verschiedenen Netzwerkkarten, Grafikkarten, Soundkarten und IO-Geräten etc. sein.
Display Server Wenn der Kernel gestartet wird, sehen wir einen grafischen Ladehintergrund. Beim Anmelde-Dialog, wenn man sich mit dem Passwort anmeldet, wird der Grafiktreiber sowie der X-Server gestartet. X-Server ist DAS Linux-Grafiksystem. Alle Darstellungs-Aufgaben werden an den X-Server geschickt, damit dieser sie verarbeitet. Es ist außerdem ein abstrakter Layer für Eingabe und Monitore. Daher können Entwickler die X11/XCB APIs nutzen, ohne sich um Details von Treibern kümmern zu müssen. Jedoch wird heutzutage von den meisten Entwicklern die Bibliothk GTK+ oder Qt verwendet, um Anwendungen zu entwickeln.
Display Manager
Resource Manager Es besteht aus einer Reihe von Daemon-Prozessen um Hardware Stati abzufragen und zu setzen unter anderem Netzwerk, Akku/Energie, Festplatte Bluetooth, Sound, Tastatur und Drucker und vieles mehr.
Desktop Environment Für den Deepin Desktop sind Hintergrund-Dienste und Daemon-Dienste enthalten. Eine komplette Desktop-Umgebung wird ein grafisches Entwickler-Toolkit, Binary-Tools und DBus API bereitstellen. Dies wird später noch ausführlich erklärt.
App Store Es stellt unter anderem Funktionen zum Installieren, Entfernen und Upgraden von Software bereit. Desweiteren erlaubt es Anwendern ihre Software einfach zu verwalten, sowie Software zu bewerten und zu kommentieren.
Anwendungen Es sind hauptsächlich Original-Anwendungen von Deepin, kooperierende Anwendungen, Android-, Windows- und sogar Web-Anwendungen.

Display Manager

Wir werden als erstes den Display-Manager einführen. Der Display-Manager wird direkt nach dem erfolgreichen Start des X-Servers ausgeführt.

Deepin verwendet LightDM, der von Ubuntu entwickelt wird. Andere verbreitete Display-Manager sind GDM von GNOME und KDM von KDE. Durch den Einsatz von LightDM bleiben wir leichtgewichtig und binden uns nicht an eine bestimmte Desktop-Umgebung. Desweiteren erlaubt er angepasste Oberflächen für GTK+, Qt und HTML5, etc. Das macht ihn sehr praktisch.

Der Display-Manager regelt hauptsächlich die Authentifizierung und Funktionalität für Benutzerwechsel, damit Benutzer mit den entsprechenden Berechtigungen sich anmelden können. Nachdem ein Benutzer sich verifiziert hat, startet der Display-Manager das nächste Startprogramm (Normalerweise das Initialisierungsprogram für die Desktop-Umgebung) vom Greeter (Konfigurationsinterface für LightDM) um dann die Desktop-Umgebung zu laden.

Deepin hat eine Benutzeroberfläche auf Basis von Qt5, genannt deepin-greeter, die folgendes kann:

Neben der einfachen Authentifizierung, Benutzerwechsel, Uhrzeit- und Abschaltfunktionen, wird sie auch folgendes bieten:

  • Das Multimedia-Benutzerinterface (in der unteren rechten Ecke) erlaubt es Benutzern Musik zu wechseln (vorige oder nächste) oder zu pausieren, während der Sperrbildschirm aktiv ist.
  • Beim Starten oder Entsperren von mehreren Bildschirmen wird die Hauptoberfläche auf dem Bildschirm angezeigt, auf dem der Mauszeiger bewegt wird.
  • Es werden direkt ein paar System-Dienste bei Eingabe des Passworts gestartet, wie z.B. die Energie-Anzeige (Akku), etc… Nachdem der Anwender das Passwort eingegeben hat, können diese Dienste im Voraus geladen werden. Das verkürzt die Startzeit im Vergleich zu anderen Desktop-Umgebungen um 30%.

DDE Daemon Services

Nach erfolgreicher Anmeldung durch den Display Manager, führt das System die Ausführargumente des Greeter aus. Bei Deepin ist dieses Argument startdde. startdde ist das Programm zum Starten des Deepin Desktops. Dieser Befehl führt folgende Operationen aus, um die Desktop-Umgebung zu starten und anzuzeigen:

  • Ausführung des grundlegenden Desktop-Sessionmanagements, wie Abmelden und Neustart-Operationen;
  • Mithilfe von xsettings das System-Thema festlegen, damit die Desktopumgebung sowohl für GTK+- als auch Qt-Anwendungen das eingestellte Benutzer-Theme korrekt lädt. Die DPI des Bildschirms wird zu diesem Zeitpunkt ebenso festgelegt.
  • Behandlung des Startvorgangs von Anwendungen nach den Spezifikationen von freedesktop, inklusive dem Ausführen von *.desktop-Dateien sowie das Starten von Alarm-Events;
  • Verwaltung von mehreren Bildschirmen, das Anzeigen des Docks und der Arbeitsfläche auf dem Hauptbildschirm.
  • Reglung der Startreihenfolge von Anwendungen. Beispielsweise werden zuerst die Desktop-Kernkomponenten gestartet und dann andere Anwendungen, um zu vermeiden, dass Anwendungen mehrfach gleichzeitig ausgeführt werden. Denn wenn bestimmte Systemdienste noch nicht geladen sind, kann dies zu Ausnahmefehlern bei Anwendungen führen. Das Programm startdde kann abschätzen, ob ein Programm geladen werden kann oder nicht und stellt daher die richtige Startreihenfolge sicher;

Wenn das Programm startdde geladen ist, lädt es den dde-session-initializer-Prozess um Hintergrunddienste für das Dock und den Launcher bereitzustellen, unter anderem:

  • Pflege der vorhandenen Anwendungen im Dock und Launcher;
  • Pflege des Start-Status der Anwendungen;
  • Pflege des Status der Arbeitsflächen und den Ort von Anwendungen;
  • Pflege von Status und Icons von installierten Anwendungen;

Das Programm dde-session-initializer ist ein Daemon-Prozess (Dienst) für das Dock und den Launcher und stellt Kernfunktionalitäten für diese bereit. Ohne dieses Programm könnte man keine Icons klicken oder Programmfenster durchwechseln.

Das Programm dde-session-initializer war zuvor Teil von dde-session-daemon. Wir haben hier eine Separierung durchgeführt um Dock und Launcher zu beschleunigen.

Die Programme dde-session-daemon und dde-system-daemon sind zwei der Haupt-Daemon-Prozesse des gesamten Systems. Sie kümmern sich um den Status der Hardware, inklusive Netzwerkkarte, Stromversorung (Akku), Laufwerke, Bluetooh, Audio, Drucker, Authentifizierung, Freigabe, Tastatur und Maus, etc. Dabei werden alle Daemon-Prozesse gekapselt und bieten dem Benutzer eine Designorientierte Schnittstelle.

Das Programm dde-session-daemon enthält all die Befehle die keine Administrator-Rechte (root) benötigen, wie Audio, Tastatur/Maus sowie Urzeit. Das Programm dde-system-daemon enthält all die anderen Teile die Administrator-Berechtigungen (root) benötigen, wie Stromversorgung (Akku), Benutzerkonten, Dateioperationen, Bildschirmhelligkeit, etc. Dieses Design von Sandbox-Prozessen begrenzt die Zugriffsrechte und verhindert so eine Menge an Sicherheitsproblemen bereits vorweg.

Die Programme dde-session-daemon und dde-system-daemon erledigen die folgenden Aufgaben:

  • Das Anlegen, Löschen und Verwalten von Benutzerkonten;
  • Verwaltung der Zustände für mehrere Bildschirme, inklusive der Position, Reihenfolge, Helligkeit usw.;
  • Verwaltung von Standard-Dateitypzuordnungen und Theme-Einstellungen;
  • Verwaltung der Netzwerkeinstellungen für kabelgebundene und kabellose Netzwerkverbindungen, VPN und DSL;
  • Verwaltung der Einstellungen für Bluetooth, Audio, Uhrzeit, Zeitzone, etc.;
  • Verwaltung der Einstellungen für Stromversorgung, Tastatur und Maus;
  • Verwaltung von System-Upgrades und Systemstart-Operationen;
  • Bereitstellung von Diensten für Multi-Touch-Pads;

Die Programme dde-session-initializer, dde-session-daemon und dde-system-daemon arbeiten wie es gnome-session-daemon unter GNOME tut, jedoch verwendet das Deepin-Team die Programmiersprache GoLang um all diese Daemon-Prozesse nocheinmal neu für die Bedürfnisse der Benutzer zu implementieren, neben verbesserter Ausführungsgeschwindigkeit. Der Deepin Desktop verwendet wie GNOME und KDE die gleichen Infrastruktur-Bibliotheken (network-manager, upower, udisk, bluez, pulseaudio, cups, polkitd, gvfsd) um abstrakte und erweiterte Dienste für die Desktop-Umgebung und Anwendungen bereitzustellen.

DDE API

Die Desktop-Umgebung wird einen API-Layer über dem Daemon-Prozess des Deepin Desktops bereitstellen, der ein Entwickler-Toolkit für Grafik, Binary-Tools und eine DBus-API enthält, damit Direktaufrufe vom Desktop aus möglich sind und nicht alles jedes mal selbst erneut dafür implementiert werden muss. Der Teil der DBus-API wird dynamisch von DBus-Diensten aufgerufen (und verbleibt nicht im Speicher) und die Schnittstelle kann in jeder Programmiersprache aufgerufen werden. Wir werden wie auf dem Bild von links nach rechts dargestellt einführen:

DTK

DTK (Deepin Tool Kit) ist eine UI-Toolkit-Suite auf Basis von Qt5 zur Vereinheitlichung und zum Entwickeln von Deepin Desktop und Deepin Desktop Original-Anwendungen. Seine Hauptfunktionalitäten sind:

  • Bereitstellung eines Single-Instance-Interface, damit keine eigene Implementierung gemacht werden muss.
  • Bereitstellung einer Reihe von Funktionen für Bewegung und Zoomen mithilfe der XCB-Bibliothek. Damit wird es überflüssig, mithilfe von X11/XCB-Funktionen ein randloses Fenster zu erstellen.
  • Bereitstellung einer Sammlung von wunderschönen, speziell angefertigten Steuerelementen, ohne selbst welche mit der Qt-Bibliothek erstellen zu müssen. Sie sind sofort einsatzbereit.

Bei Interesse kann der Quelltext hier eingesehen werden: https://github.com/linuxdeepin/deepin-tool-kit. Damit können sehr schnell elegante Produkte mit der DTK-Bibliothek umgesetzt werden, anstatt direkt auf Qt5 zu setzen. Wir rufen außerdem dazu auf, für DTK Kommentare und Patches (Pull-Requests) einzureichen.

dde-api binary utils

Es sind hauptsächlich die Entwicklerwerkzeuge dde-session-daemon und dde-system-daemon, die es den folgenden Werkzeugen erlauben direkt auf die Kernfunktionalitäten zuzugreifen ohne das Rad neu zu erfinden:

  • greeter-helper: Bereitstellung der Oberfläche für Einstellungen, Sprache, Tastatur, usw. beim Sperrbildschirm;
  • image-blur-helper: Stellt die Funktionalität zur Darstellung von Verschwommenen Hintergrundbildern bereit, damit diese direkt wiederverwendet werden kann und nicht erneut selbst implementiert werden muss. Der Algorithmus zum Verschwimmen des Bildes vom Deepin Team benötigt nur 30ms zur Ausführung und ist damit schneller als die meisten Community-Lösungen;
  • lunar-calendar: Bereitstellung eines Dienstes zur Abfrage von Datum und Zeit;
  • powersupply: Bereitstellung eines High-Level-Interface zur Energie-Information; Durch Verwendung von udev wird der Status der Stromversorgung und der Batterie-Info abgefragt;
  • soundutils: Bereitstellung einer Schnittstelle um Sound-Effekte auf dem Desktop abzuspielen;
  • validator: Bereitstellung einer Gültigkeitsprüfung für Benutzernamen ohne selbst mit regulären Ausdrücken sich etwas eigenes zu „basteln“;
  • cursor-helper: Bereitstellung der Einstellungen für ein Mauszeiger-Theme;
  • drandr: Bereitstellung eines High-Level-Interfaces für die X11-randr-API um detaillierte Informationen über den Monitor abzurufen;
  • dxinput: Bereitstellung eines High-Level-Interfaces für X11 xi/xi2-API um IO-Geräte abzufragen und festzulegen;
  • Und viele andere erweiterte Dienste werden von diesem Projekt bereitgestellt: https://github.com/linuxdeepin/dde-api. Jeder ist aufgerufen dort am Ausbau der Funktionalitäten mitzuwirken.

dde-daemon dbus API

In diesem Teil ging es um das Deepin Kontrollzentrum, in Hinsicht auf dde-session-daemon und dde-system-daemom, hauptsächlich mit ein paar DBus-Interfaces. Andere Anwendungen können diesen Teil der API auch ohne Hintergrundwissen verwenden und damit auch auf Low-Level-Funktionalitäten zugreifen. Wir werden einfach ein paar der Funktionen vorstellen. Falls Sie Interesse haben, finden Sie den Quelltext des Kontrollzentrums hier: https://github.com/linuxdeepin/dde-control-center

  • Abfrage der Anzahl der Bildschirme, welcher der Hauptbildschirm ist und welche Auflösungen gerade beim aktuellen System eingestellt sind.
  • Abfrage der Einstellungen für Sprache, Bildschirmhelligkeit und Lautstärke, etc. vom aktuellen System.
  • Abfrage des aktuellen Systems über den Netzwerkstatus, ob kabelgebundene oder kabellose Verbindungen bestehen oder ein VPN geöffnet ist.
  • Abfrage von Datum und Uhrzeit, Zeitzone, Tastatur und Maus, etc. beim aktuellen System.

Alle Hardware-Informationen, die das Kontrollzentrum anzeigt, können über das DBus-Interface von dde-api abgefragt werden. Das Deepin Developer Team hat diese DBus-API schon seit langem überarbeitet und so verbessert, sodass man sie ganz einfach verwenden kann ohne extra ein Low-Level-Code (wie z.B. network-manager, pulseaudio, bluez, upower, udisk, etc.) selbst zu schreiben und sich anstattdessen dem Entwickeln zusätzlicher Funktionalitäten widmen kann.

DDE UI

Der letzte Teil des Deepin Desktop ist der UI-Layer, bestehend aus den folgenden Teilen:

deepin-wm Es gibt zwei Fenstermanager: deepin-metacity und deepin-wm. Das System wählt automatisch den besser passenden, abhängig von der vorhandenen Hardware-Leistung und des installierten Grafiktreibers. deepin-metacity ist ein 2D-Fenstermanager, basierend auf metacity für schwachbrüstige Rechner oder solcher ohne richtig installierten Grafiktreiber. Er verbraucht sehr wenig Ressourcen und unterstützt lediglich sehr einfache Animationseffekte. deepin-wm ist hingegen ein 3D-Fenstermanager auf Basis von mutter und für gewöhnlich der Standard-Fenstermanager unter Deepin. Er eignet sich für leistungsfähigere Geräte, bzw. wenn die richtigen Grafiktreiber installiert sind und stattet den Desktop mit eleganten Animationseffekten aus.
dde-desktop Es stellt das Basis-Grid-File der Arbeitsfläche bereit sowie einfache Datei-Operationen. dde-desktop verwendet die Bibliothek libdde-file-manager um den gleichen Dialog wie Deepin Dateimanager (dde-file-manager) beizubehalten.
dde-dock Bereitstellung von grafischen Dock-Icons und deren Statusmanagement, sowie die Möglichkeit zur Anpassung der Position und des Aussehens der Icons.
dde-launcher Bereitstellung von Funktionen zum Anzeigen von installierten Anwendungen, sowie deren Durchsuchung und Ausführung.
dde-control-center Bereitstellung einer Benutzeroberfläche für Hardware-Ressourcen, Benutzerverwaltung, Netzwerk, Bluetooth, Audio, IO, Standardanwendungen, Datum und Uhrzeit, Energieverwaltung, System-Upgrades, etc.
dde-osd Bereitstellung eines OSD-Interface für Lautstärke, Helligkeit, etc.
deepin-menu Bereitstellung eines einheitlich dargestellten Kontext-Menüs.
deepin-notificaiton Bereitstellung eines Benachrichtigungsdienstes für das System. Mit Öffnen-Buttons für jede Anwendung, die eine Info bereithält.
deepin-policykit-agent Bereitstellung eines einheitlichen Passwort- und Authentifizierungs-Dialogs für alle Anwendungen gemäß den Design-Richtlinien der Deepin UI um sowohl GTK+- als auch Qt-Anwendungen mit dem gleichen Dialog auszustatten.
deepin-icon-theme Das weltweit am stärksten vereinheitliche Icon-Set, mit tausenden von Anwendungen im Deepin Store. Hier liegt es ab: https://github.com/linuxdeepin/deepin-icon-theme/tree/master/deepin
deepin-gtk-theme Das Fenster-Theme gemäß den Design-Richtlinien von Deepin UI (GTK+, GTK+ 3, Qt4 und Qt5)
deepin-default-settings Bereitstellung der Standardeinstellungen für den Deepin Desktop wie Hintergrundbilder und Icon-Theme, etc.
qt5-integration Bereitstellung der einheitlichen Oberfläche und Theme für GTK+- und Qt-Anwendungen, indem einfach die beiden Bibliotheken entsprechend erweitert wurden. So muss ein Programm nur einmal geschrieben und kompiliert werden um sowohl auf GTK+ als auch Qt gleich auszusehen.

Deepin Store

Deepin Store ist die erste App Store, die gute Produktqualität und ausgezeichnete Interaktionserfahrung bei Linux bietet.

Neben den Deepin Original-Anwendungen unterstützen wir über 50 Windows-Programme mit unserem Projekt deepin-wine, über 200 Android-Apps (z.B. Angry Birds und so manchen Video-Client) mithilfe der eingebauten Android-Runtime und HTML5-Anwendungen (z.B. Gliffy) mithilfe von deepin-xwalk, in Kooperation mit Intel. Die HTML5-Anwendung merkt sich zudem seine eigene Fenstergröße.

Der Deepin Store ist aufgeteilt in lastore-daemon, lastore-session-helper und deepin-appstore:

  • lastore-daemon: Hierbei handelt es sich um den Kern des App-Store, der Aufgaben wie das Herunterladen von Paketen, Hash-Prüfung, Abhängigkeitenprüfung, lokales Cache-Management, das Installieren/Entfernen und Upgraden von Software übernimmt. Dieser Daemon-Prozess kommuniziert mit den entfernten Repositorys und stellt den Upgrade- und Sicherheitsprozess des ganzen Systems sicher. lastore-daemon enthält desweiteren Verbindungen (Hooks) zu apt/dpkg um Schäden durch die Installation über die Kommandozeile zu verhindern.
  • lastore-session-helper: Das ist der Helper des lastore-daemon zur Ausführung von Session-Operationen für Benutzer wie Benachrichtungen, um sicherzustellen dass bei der Installation der Software alles sicher ist. Dieser Teil vom Quelltext liegt getrennt im lastore-session-helper.
  • deepin-appstore: Das ist das Client-Programm und die Oberfläche des App-Stores. Es handelt sich dabei um eine einfache Application-Shell auf Basis von CEF zur Interaktion von Benutzer und eingebetteter Website. Es enthält auch die Schnittstelle für Kommentare und Bewertungsfunktionen. Technisch ist deepin-appstore nur ein einfacher Web-Browser, der sich wie ein nativer Client verhält.