Sommaire

Afin de permettre aux développeurs d'en savoir plus sur deepin, cet article fournit des descriptions avec des images pour expliquer la conception architecturale de deepin et la fonction des modules de base. Cela aidera les développeurs à avoir une vision globale de l'idée et des orientations du design. Tous les codes d'implémentation et modules détaillés seront omis ici, pour plus d'informations sur le code, veuillez vous référer à la section https://github.com/linuxdeepin.

Aperçu de l'Architecture

Un système d'exploitation de bureau complet peut être divisé comme les couches suivantes:

Kernel/Driver C'est pour le matériel comme le CPU, la mémoire et le disque, etc. et il doit être compatible avec différentes cartes réseau, cartes d'affichage, cartes son et périphériques IO, etc.
Serveur d'Affichage Démarrage à partir du noyau, nous pouvons voir le plymouth (aussi l'écran de démarrage du système), et quand vous voyez l'écran de connexion et qu'il vous invite à entrer le mot de passe, le pilote d'affichage, aussi X Server, vient de démarrer. C'est le dieu de l'interface graphique du système Linux. Toute la demande de peinture sera envoyée au serveur X pour traitement. C'est aussi la couche abstraite pour la saisie et l'affichage, les développeurs peuvent utiliser les API X11/XCB sans se soucier des informations détaillées des pilotes. Mais maintenant la plupart des utilisateurs vont utiliser la bibliothèque GTK+/Qt pour écrire leurs applications.
Gestionnaire d'Affichage C'est simplement l'interface où vous pouvez entrer le mot de passe, l'écran de connexion
Gestionnaire de Ressources Il s'agit d'une série de processus démon pour surveiller l'état du matériel et il fournira des informations à l'environnement de bureau et les applications comme le réseau, l'alimentation, disque, Bluetooth, son, clavier et imprimante, etc.
Environnement de Bureau L'environnement de bureau deepin, quant à lui, contient des services backend et des processus daemon. Un environnement de bureau complet fournira le développement graphique tookit, des outils binaires et l'API DBus. Nous expliquerons plus tard ces parties.
App Store Il fournit des opérations pour l'installation, le retrait et la mise à niveau de logiciels, etc. et il permet à l'utilisateur de gérer le logiciel de façon pratique et peut commenter et évaluer le logiciel.
Applications Il s'agit principalement des applications originales Deepin, des applications collaboratives, Android, Windows et même des applications Web.

Gestionnaire d'Affichage

Nous allons d'abord présenter le display manager. Le gestionnaire d'affichage démarre une fois que le serveur X a démarré avec succès.

deepin utilise le LightDM, développé par Ubuntu. Les autres principaux gestionnaires d'affichage sont GDM de GNOME et KDM de KDE. L'utilisation de LightDM est qu'il est très léger et ne liera aucun environnement de bureau, et il a fourni une interface personnalisée pour GTK+, Qt et HTML5, etc. C'est très pratique.

Le gestionnaire d'affichage fournit principalement les fonctions d'authentification et de changement d'utilisateur pour les utilisateurs qui se connectent maintenant en fonction des permissions utilisateur configurées par le système. Une fois que l'utilisateur a passé la vérification, il exécute le programme de démarrage suivant (généralement le programme d'initialisation pour l'environnement de bureau) à partir du greeter (configurer l'interface pour LightDM) pour afficher l'environnement de bureau.

Deepin a développé une interface frontend basée sur Qt5, appelée deepin-greeter, comme celle-ci:

Outre les fonctions d'authentification de base, de commutation utilisateur, d'heure de date et d'arrêt, il fournira également des fonctions d'authentification de base:

  • L'interface de contrôle multimédia (en bas à droite), pour permettre aux utilisateurs de commuter ou de mettre en pause la musique lorsque l'écran est verrouillé ou de changer d'utilisateur.
  • Lors du démarrage ou du déverrouillage avec plusieurs écrans, l'interface de verrouillage principale bascule en fonction du curseur.
  • Il démarrera directement certains des services système lors de la saisie du mot de passe, comme l'alimentation, le compte et de luminosité, etc Après que l'utilisateur a tapé le mot de passe, ces services peuvent être chargés à l'avance. Cela raccourcit de 30% le temps de démarrage par rapport aux autres environnements de bureau.

DDE Daemon Services

Après avoir réussi l'authentification par le gestionnaire d'affichage, le système appellera les arguments exec du greeter. Pour Deepin, cet argument sera startdde. startdde est l'application pour démarrer l'environnement de bureau Deepin. Cette commande exécute les opérations suivantes pour démarrer et afficher l'environnement de bureau:

  • Exécutez la gestion de base des sessions du bureau, comme les opérations de déconnexion et de redémarrage;
  • Définir le thème dans l'échelle du système par xsettings, afin que l'environnement de bureau et les applications GTK+ / Qt puissent charger le thème personnalisé par l'utilisateur. Le DPI d'écran est aussi ajusté à ce stade;
  • Gérer la méthode de démarrage d'application selon les spécifications fournies par Freedesktop, y compris l'exécution des fichiers *.desktop et la signalisation des évènement d'alarme.
  • Gérer plusieurs écrans, afficher le dock et le bureau dans l'écran principal;
  • Gérer l'ordre de démarrage d'applications. Par exemple, les composants principaux de DDE sont lancé avant les autres applications, afin d'éviter le problème de manque de services du système par les applications d'utilisateur. En outre, le programme startdde détermine si un programme doit être lancé ou pas, pour bien garder le processus de démarrage;

Après le programme startdde est chargé, il lance dde-session-initializer afin de fournir un service backend pour le dock et le lanceur. Ce service est responsable de :

  • Gérer les processus résidents du dock et du lanceur;
  • Gérer les statuts de démarrage d'application;
  • Gérer les statuts de l'espace de travail et l'emplacement d'application;
  • Gérer les statuts et les icônes des applications installées;

dde-session-initializer est un processus démon qui fournit la fonction de base pour le dock et le lanceur. Il est nécessaire pour la réponse d'évènement utilisateur, le démarrage d'application et la commutation de fenêtre d'application.

dde-session-initializer était une partie de dde-session-daemon. Nous les séparons pour stimuler la performance du dock et du lanceur.

dde-session-daemon et dde-system-daemon sont les deux processus démon principaux du système deepin. Ils gèrent tout le statut du matériel, y compris la carte réseau, l'alimentation, les disques, le Bluetooth, la périphérique audio, l'imprimeur, l'authentification, le partage, le clavier et le souris, afin de intégrer toutes les interfaces de processus démon puis offrir une interface unifiée et orientée vers l'utilisateur.

dde-session-daemon est chargé de toutes les opérations sans privilèges root, comme l'évènement de son, de clavier, de souris et la date et l'heure. dde-system-daemon, d'autre part, est chargé d'opérations avec privilèges root : la gestion d'alimentation, de compte, de fichiers, de luminosité de l'écran, etc. Cette conception de mécanisme de bac à sable est pour limiter la permission accordée et éviter beaucoup de problèmes de sécurité.

Quelques exemples pour dde-session-daemon et dde-system-daemon :

  • Gérer la création et la suppression de compte;
  • Gérer les différents états pour plusieurs écrans, y compris l'emplacement, la direction, la résolution et la luminosité;
  • Gérer les associations de fichiers et les paramètres de thème;
  • Gérer les paramètres de réseau pour les connexion filaire ou sans filaire, VPN et DSL;
  • Gérer les paramètres de Bluetooth, de périphérique audio, de la date et l'heure, de fuseau horaire, etc;
  • Gérer les paramètres d'alimentation, de claviers et souris;
  • Gérer les mises à jour de système et les paramètres de démarrage de système;
  • Fournir des services pour un pad multi-touch.

dde-session-initalizer, dde-session-daemon et dde-system-daemon actent comme gnome-session-daemon dans GNOME, mais l'équipe de Deepin a réécrit tout le code de processus démon en Golang pour répondre aux besoins des utilisateurs et améliorer la performance. DDE, comme GNOME et KDE, dépend des bibliothèques de base (network-manager, upower, udisk, bluez, pluseaudio, cups, polkitd, gvfsd) pour fournir des services abstraits et avancés à l'environnement de bureau et les applications.

DDE API

L'environnement de bureau offre une couche d'API sur ses processus démon, qui combine la boîte à outils de développement graphique, les outils binaires et une interface d'API DBus pour appel direct par l'environnement de bureau et les applications, sans besoin de les implémenter à partir de rien. L'API DBus est appelé dynamiquement par les service DBus (et n'occupe pas d'espace de mémoire), accessible via n'importe quel langage de programmation. Nous les introduisons dans les images suivantes:

DTK

DTK (Deepin Tool Kit) est une boître à outils de l'interface utilisateur basée sur Qt5, conçu pour l'Environnement de Bureau Deepin et les applications originales de Deepin. Les fonctions principales sont :

  • Fournir une interface d'instance unique, éviter le développement à partir de rien.
  • Fournir une série de fonctions de XCB comme déplacement et zoom de fenêtre. Vous pouvez en profiter pour créer une fenêtre sans bordure très facilement !
  • Fournir une série de beaux contrôles personnalisés, sans besoin de les créer à partir de la bibliothèque Qt. Tous sont prêts à utiliser !

Si cela vous intéresse, vous pouvez donner un coup d’œil sur le code source: https://github.com/linuxdeepin/deepin-tool-kit. Vous avez le pouvoir de créer un produit élégant plus rapidement avec la bibliothèque DTK (plutôt que Qt5) ! Et tous les commentaires et patchs sont les bienvenues.

dde-api outils binaires

Cet outil binaire était conçu pour le développement de dde-session-daemon et dde-system-daemon. Vous pouvez en profiter afin d'éviter les travaux redondants de fonctions de base:

  • greeter-helper : Fournir une interface de paramètres de langue, de disposition du clavier et de verrouillage d'écran;
  • image-blur-helper : Fournir une service de flou de fond d'écran, pour brouiller rapidement une image sans implémentation à partir de rien. L'algorithme conçu par l'équipe Deepin ne prend que 30ms pour finir la tâche, ce qui est beaucoup plus rapide que d'autres implémentations par la communauté;
  • lunar-calendar : Une service pour obtenir la date et l'heure;
  • powersupply : Fournir une interface de haut niveau pour les information d'alimentation, utilisant udev pour obtenir l'état de l'alimentation et de la batterie;
  • soundutils: Fournir une interface pour jouer des effets sonores de bureau;
  • validator : Fournir un validateur pour le nom d'utilisateur, sans besoin d'introduire beaucoup de regex;
  • cursor-helper : Fournir les paramètres du thème du curseur;
  • drandr : Fournir une interface de haut niveau d'API randr du X11, pour obtenir les information détaillée du moniteur;
  • dxinput : Fournir une interface de haut niveau d'API xi/xi2 du X11 pour obtenir et définir les propriétés de périphérique d'entrée / sortie;
  • De nombreux autres services sont également fournis par ce projet: https://github.com/linuxdeepin/dde-api. Vous pouvez y apporter votre contribution !

dde-daemon dbus API

Cette partie est conçu pour le Centre de contrôle Deepin, offert par dde-session-daemon et dde-system-daemon, concernant principalement les interfaces DBUS. D'autres applications peuvent utiliser cet API aussi, sans connaître le détail du code sous-jacent. Nous introduisons ici quelques fonctions comme exemple, et vous-laissez faire des étude profondée du code du centre de contrôle : https://github.com/linuxdeepin/dde-control-center

  • Interroger les numéros des écrans, déterminer l'écran principal et la résolution pour le système actuel.
  • Interroger les paramètres de langue, de luminosité et de volume pour le système actuel.
  • Interroger l'état du réseau, comme l'usage du connexion filaire ou sans filaire, du proxy etc., pour le système actuel.
  • Interroger la date et l'heure, le fuseau d'horaire, les paramètres du clavier et de la souris pour le système actuel.

Toutes les information du matériel affichées dans le centre de contrôle sont accessible par interroger les interfaces DBus de dde-api. L'équipe Deepin les affine depuis longtemps, afin que vous puissiez en profiter sans travailler sur le code de la bibliothèque de bas niveau (comme network-manager, pulseaudio, bluez, upower and udisk) et que vous concentriez sur les fonctions avancés.

DDE UI

La dernière partie de l'Environnement de Bureau Deepin est la couche UI, qui comprend les éléments suivants :

dde-kwin Basé sur KWin, ce gestionnaire de fenêtres est compatible avec les applications DDE et GTK, prend en charge l’interaction avec divers composants dans DDE et implémente l’interface utilisateur dans le style Deepin. KWin prend nativement en charge le changement de mode 2D / 3D, qui peut remplacer toutes les fonctions de deepin-wm et de deepin-metacity.
dde-desktop Il supporte une grille de fichiers sur le bureau et l'opération de base des fichiers. dde-desktop utilise la bibliothèque libdde-file-manager pour unifier le style de dialogue comme celui dans Gestionnaire de Fichiers Deepin (dde-file-manager).
dde-dock Il gère les icônes graphiques et les états sur le dock. L'emplacement et le style sont tous personnalisables.
dde-launcher Il offre des fonctions pour afficher les applications installées, ainsi que pour les rechercher et les lancer.
dde-control-center Il offre une interface frontale pour les ressources matérielles, comme le compte, le thème, le réseau, le Bluettoth, le son, l'entrée / sortie, les applications par défaut, la date et l'heure, l'alimentation, la mise à jour du système, etc.
dde-osd Il offre une interface d'OSD pour les notifications de volume, de lumunosité d'écran, etc.
ddepin-menu Il offre une interface utilisateur unifée pour le menu contextuel.
deepin-notificaiton Il offre une service de notification pour afficher un bouton de redirection selon le type d'application.
ddepin-policykit-agent Il fournit un dialogue unifié d'authentification (avec le nom d'utilisateur et le mot de passe) pour toutes les applications, selon les spécifications de conception d'UI Deepin. Ceci permet aux applications GTK+ et Qt d'utiliser le même dialogue.
deepin-icon-theme L'icône du style le plus unifié sur le monde, y compris des milliers d'applications dans la Deepin Logithèque. Vous pouvez le vérifier ici : https://github.com/linuxdeepin/deepin-icon-theme/tree/master/deepin
deepin-gtk-theme Un thème conçu par l'équipe Deepin selon les spécifications de conception d'UI Deepin, pour les applications GTK+ 2/3, Qt 4/5.
deepin-default-settings Il offre les paramètres par défaut de l'Environnement de Bureau Deepin, comme le fond d'écran et le thème de l'icône.
qt5-integration Il offre un thème et une interface unifiés pour les applications GTK+ et Qt, en corrigeant vers la bibliothèque GTK+ et Qt. Vous en profitez pour créer une interface utilisateur unifiée sans élaborer pour différentes bibliothèques graphiques.

Deepin Logithèque

La Deepin Logithèque est le premier App Store qui a une bonne qualité de produit et une excellente expérience d'interaction de l'utilisateur dans Linux.

En plus des applications originales de Deepin, nous fournissons 50+ applications Windows par le projet deepin-wine, 200+ applications Android (comme Angry Birds et les clients vidéo) par intégrer l'environnement d'exécution Android, et les applications HTML5 (comme Giffy) par deepin-xwalk avec Intel. Les applications HTML5 peuvent également restaurer sa taille de fenêtre lorsqu'il est ouvert la prochaine fois.

La Deepin Logithèque se compose de trois parties : lastore-daemon, lastore-session-helper et deepin-appstore.

  • C'est la partie centrale de l'App Store, qui fait le travail de téléchargement de paquet, de somme de contrôle, d'analyse de dépendance, de gestion de cache locale, d'installation, suppression et mise à niveau de logiciel. Ce processus de démon communique avec les dépôts distants, gardant le processus de mise à niveau et de sécurité pour l'ensemble du système. lastore-daemon ajoute également des hooks au programme apt / dpkg pour éviter les dégâts d'installation issu des commandes dans le terminal.
  • lastore-session-helper: C'est l'assistant de lastore-daemon, qui exécute certaines opérations de session utilisateur comme l'envoi de notifications aux utilisateurs. Pour assurer la sécurité lors de l'installation du logiciel, nous avons séparé la partie du code sans privilège root à lastore-session-helper.
  • deepin-appstore: C'est le client et l'interface de l'app store, un shell d'application basé sur CEF pour gérer l'interaction de l'utilisateur et afficher les pages web. Une fois que le serveur a mis à jour un nouveau logiciel, il dira à deepin-appstore d'actualiser la page Web. Il contient également l'interface pour les opérations de commentaire et de notation. Techniquement, le deepin-appstore est un simple navigateur web imitant un client natif.