Sommario

Per favorire la conoscenza di Deepin agli sviluppatori, questo articolo fornisce delle illustrazioni per spiegare il design dell’architettura di Deepin e le funzioni base dei Moduli. Il tutto aiuterà gli sviluppatori ad avere una visione globale dell’idea e direzione del design prescelto. Tutto il codice implementato ed i moduli sono omessi, ma per ulteriori informazioni si faccia riferimento a https://github.com/linuxdeepin.

Panoramica dell’architettura

Un sistema operativo può esser suddiviso nei seguenti livelli:

Kernel/DriverRiguarda l’hardware, quindi CPU, RAM, storage ecc. E’ necessario che sia compatibile con differenti tipologie di schede di rete, schede grafiche, schede audio, dispositivi di I/O in genere, ecc..
Display ServerCol boot da Kernel è possibile vedere il plymount (e lo splash screen di sistema), e dal momento in cui si visualizza la login screen, inserendo la password, i display driver e l’X Server risultano avviati. Tutte le richieste grafiche sono inviate all’X Server per la loro gestione. Inoltre è il layer astratto per l’ingresso e la visualizzazione, gli sviluppatori possono utilizzare le API X11 / XCB senza focalizzarsi sulle informazioni dettagliate dei driver. Ad oggi la maggior parte degli utenti utilizza le librerie GTK + / Qt per sviluppare le proprie applicazioni..
Display ManagerE’ l’interfaccia in cui inserire la password nella login screen/td>
Gestione delle risorseE’ una serie di demoni di processi per monitorare lo stato dell’hardware che fornisce informazioni sul Desktop Environment e le varie applicazioni di gestione rete, alimentazioni, dischi, Bluetooth, audio, tastiera e stampanti, ecc.
Desktop EnvironmentPer ciò che concerne il Deepin Desktop Environment, contiene i servizi backend ed i demoni di processo. Un desktop enviconment fornisce un toolkit grafico dell’environment, strumenti binari e DBus API. Spiegheremo dopo queste componenti.
App StoreFornisce i processi di installazione, rimozione ed aggiornamento dei software, permettendo all’utenza di gestiore il software, applicare commenti o rating.
ApplicazioniComprende principalmente le app originali Deepin, altre applicazioni, comprendendo quelle destinate ad Android, Windows ed inoltre quelle di tipo web based.

Display Manager

Inizieremo con l’illustrazione del display manager. Il display manager si avvia dopo X Server.

Deepin utilizza LightDM, sviluppato da Ubuntu. Gli altri popolari display manager sono GDM da Gnome, KDM da KDE. Utilizzando LightDM si è scelta l’opzione più leggera che non impatti sull’utilizzo di altri desktop environment, mettendo a disposizione interfacce personalizzate GTK+, Qt ed HTML5, ecc. E’ stata una buona scelta.

Il display manager fornisce principalmente le funzioni di autenticazione e cambio utente in accordo con i permessi utente di sistema. Una volta superata l’autenticazione, vengono avviati gli altri programma (solitamente si avviano i programmi relativi al desktop environment) dal greeter (interfaccia di configurazione per LightDM) per mostrare il desktop environment.

Deepin ha sviluppato la propria interfaccia su Qt5, chiamandola deepin-greeter, ovvero:

Oltre all’autenticazione, il cambio utente, l’ora e le funzionalità di spegnimento, inoltre offre:

  • L’interfaccia di controllo multimediale (in basso a destra), permette il cambio utente o la gestione del player musicale quando è attivo il blocco schermo.
  • Nell’avvio o nello sblocco con più schermate, viene modificata la schermata di blocco in base al cursore.
  • Avvia alcuni servizi di sistema prima dell’inserimento della password, come la gestione alimentazione, la gestione account, ma anche la gestione luminosità, ecc. Dopo che l’utente ha inserito la password, questi servizi sono avviati in modo completo. Tale procedura diminuisce del 30% il tempo di avvio rispetto ad altri Desktop Environment.

DDE Daemon Services

Dopo l’autenticazione via display manager, il sistema chiama alcuni argomenti exec del greeter. Per Deepin, questi argomenti riguardano lo startdde. Startdde è l’applicazione che avvia il Deepin Desktop Environment. Questi comandi eseguono le operazioni per avviare correttamente il desktop environment.

  • Esegue e gestisce le sessioni desktop base, come il logout ed il riavvio del sistema;
  • Impostare l’intero tema di sistema con xsettings per permettere al desktop environment ed alle applicazioni GTK+ e Qt di esser avviate secondo il tema scelto dall’utente. I DPI dello schermo vengono caricati in questa fase;
  • Gestire il metodo di startup delle applicazioni secondo le specifiche definite dal freedesktop, inclusa l’esecusione dei file *.desktop e gli eventi di notifica;
  • Gestisce gli schermi multipli che solitamente mostrano la dock ed il desktop;
  • Gestire l’ordine di avvio delle applicazioni. Ad esempio, avviare prima i componenti core del DDE e dopo le altre applicazioni per avitare l’esecuzione contemporanea delle varie applicazioni, dato che alcuni servizi di sistema non sono caricati, questo potrebbe creare problemi di priorità. Il programma startdde permette di prioritizzare il caricamento dei programmi in modo che la fase di startup proceda nel corretto ordine;

Quando il programma startdde è caricato, questo avvierà il processo dde-session-initializer per fornire i servizi di backend della dock e del launcher, inclusi:

  • Gestisce i programmi residuali della dock e del launcher;
  • Mantiene attive le applicazioni;
  • Mantiene attivi gli spazi di lavoro e le posizioni delle applicazioni;
  • Mantiene lo stato e le icone delle applicazioni installate;

dde-session-initializer è un demone per la dock ed il launcher e fornisce le funzioni base per questi ultimi. Non è possibile cliccare sulle icone dell’applicazione e cambiare finestra dei programmi senza tale processo.

In precedenza, dde-session-initializer faceva parte del dde-session-daemon, ma è stato separato per migliorare il funzionamento della dock e del launcher.

dde-session-daemon e dde-system-daemon sono i due principali demoni dell’intero sistema. Gestiscono tutto l’hardware, quindi scheda di rete, alimentazione, dischi rigidi, Bluetooth, audio, stampanti, login, le condivisioni, tastiera e mouse, ecc. al fine di gestire tutti i processi e fornire un’interfaccia utente ben precisa.

Il dde-session-daemon gestisce diverse operazioni che non richiedono permessi di root come l’audio, tastiera e mouse, data ed ora. Il dde-system-daemon gestisce inoltre alcune operazioni che necessitano dei permessi di root, come l’alimentazione, la gestione account, la gestione files, la luminosità, ecc. Questa gestione separata permette di limitare i permessi ed evitare eventuali rischi di sicurezza.

dde-session-daemon e dde-system-daemon eseguono:

  • Riguardo l’account permettono la creazione, gestione ed eliminazione;
  • Gestione multischermo, posizione e spostamento icone, risoluzione e luminosità, ecc.;
  • Gestione associazioni predefinite ed impostazioni del tema;
  • Gestione rete per connessioni cablate o wireless, VPN e DSL;
  • Gestione impostazioni Bluetooth, audio, data ed ora, fuso orario, ecc.;
  • Gestione impostazioni alimentazione, tastiera e mouse;
  • Gestione aggiornamenti ed operazioni riguardanti il boot;
  • Gestione servizi riguardanti il pad multi-touch.

dde-session-initalizer, dde-session-daemon e dde-system-daemon si comportano come gnome-session-daemon in GNOME, ma il Deepin Team usa golang per riscrivere tutti i codici dei processi demoni per l’utenza al fine di ottenere migliori performance. DDE come GNOME e KDE chiama l’infrastruttura delle librerie (network-manager, upower, udisk, bluez, pluseaudio, cups, polkitd, gvfsd) per offrire i servizi necessari al desktop environment ed alle applicazioni.

DDE API

Il desktop environment fornisce un Layer API soprastante ai demoni di processo del Deepin Desktop Environment, che contengono il graphical development toolkit, gli strumenti binari e l’interfaccia delle API DBus per le chiamate dirette del desktop environment e delle applicazioni senza dover implementarli da zero. L’API DBus è chiamato dinamicamente DBus services (e non risiede nella memoria), è possibile richiamarne l’interfaccia mediante qualsiasi linguaggio di programmazione. Introdurremo il tutto con la seguente figura:

DTK

DTK (Deepin Tool Kit) è un toolkit della UI basato su Qt5 per scrivere ed unificare il Deepin Desktop e le Deepin Original Application, le cui funzioni principali sono:

  • Fornisce una singola istanza dell’interfaccia per evitare la scrittura da zero.
  • Fornisce una serie di funzioni di spostamento e zoom con la libreria XCB, oltre che funzioni che non necessitano di X11/XCB per la creazione di finestre senza bordi.
  • Forniscono un set di controlli personalizzati senza doverli creare da zero con la libreria Qt, insomma user friendly.

Per informazioni sul codice sorgente: https://github.com/linuxdeepin/deepin-tool-kit, potrai sviluppare rapidamente un tuo progetto con la nostra libreria DTK o direttamente con la libreria Qt5. E sappi che i tuoi commenti o patch sono le benvenute!

Utility binari dde-api

E’ il principale tool binario per lo sviluppo del dde-session-daemon e dde-system-daemon, aprendo i binari è possibile far si che le altre applicazioni utilizzino la sua tecnologia base in modo diretto e senza dover reinventare la ruota:

  • greeter-helper: Fornisce l’interfaccia delle impostazioni di lingua, tastiera, ecc. della schermata di blocco;
  • image-blur-helper: Fornisce il servizio blur del wallpaper, rendendo opaca un’immagine senza doverla modificare manualmente. L’algoritmo sviluppato dal Deepin Team richiede solo 30 ms per l’esecuzione, è molto più veloce di tante altre implementazioni simili disponibili;
  • lunar-calendar: Fornisce il servizio di interrogazione data ed ora;
  • powersupply: Fornisce un’interfaccia adeguata alla gestione dell’alimentazione, utilizzando udev è possibile ottenere info sull’alimentazione e lo status batteria;
  • soundutils: Fornisce un’interfaccia per eseguire gli effetti sonori del desktop;
  • validator: Fornisce la validazione di username senza testare i log di regex;
  • cursor-helper: Fornisce le impostazioni del tema del cursore;
  • drandr: Fornisce un’interfaccia avanzata di x11 randr api per ottenere informazioni dettagliate del monitor;
  • dxinput: Fornisce un’interfaccia avanzata per x11 xi/xi2 api per avere informazioni ed impostare i dispositivi IO;
  • Ci sono una serie di servizi avanzati offerti da questo progetto: https://github.com/linuxdeepin/dde-api, sei il benvenuto per estendere le sue funzionalità!

dde-daemon dbus API

Questa parte è fornita dal Deepin Control Center, dal dde-session-daemon e dde-system-daemon, e dall’interfaccia del DBus. Altre applicazioni possono utilizzare queste API senza che si renda necessaria una loro scrittura a livello di codice. Saranno introdotte alcune funzionalità ed altri dettagli mediante la condivisione del codice sorgente del control center a questo link : https://github.com/linuxdeepin/dde-control-center

  • Fornisce informazioni sui numeri di schermi attivi, quale sia lo schermo principali e quale sia la loro risoluzione attuale.
  • Fornisce informazioni sulla lingua di sistema, la luminosità ed il volume, ecc. del sistema.
  • Fornisce lo status della rete, se si sta usando una connessione cablata o wireless e se si ha attiva una VPN.
  • Fornisce informazioni su data ed ora, fuso orario, tastiera e mouse, ecc.

Tutte le informazioni dell’hardware mostrate dal control center possono esser interrogate dall’interfaccia del DBus grazie alle dde-api, il team di sviluppo ha evoluto queste API DBus per molto tempo, potrai utilizzarle senza dover modificare il codice delle librerie (network-manager, pluseaudio, bluez, upower and udisk, etc.), potendo quindi spendere il tuo tempo per le funzioni avanzate.

DDE UI

L’ultima parte del Deepin Desktop Environment è il layer UI, che contiene le seguenti componenti:

deepin-wmCi sono due windows manager: deepin-metacity e deepin-wm, il sistema sceglie il migliore in base alle performance hardware ed ai driver di sistema. deepin-metacity è un windows manager 2D basato sulle metacity per le configurazioni hardware di basso livello o di cui non sono installati gli opportuni diplay driver. E’ a basso consumo ed ha animazioni inferiori. Invece, deepin-wm è un windows manager 3D basato su Mutter ed è solitamente il gestore predefinito. E’ disponibile per gli opportuni display driver e le configurazioni hardware di buon livello, con degli effetti visivi eleganti e di alto livello
dde-desktopFornisce l’allineamento dei file sulla griglia del desktop e le operazioni base. dde-desktop utilizza la libreria libdde-file-manager per ottenere le medesime funzioni del Deepin File Manger (dde-file-manager)
dde-dockFornisce l’icona grafica della dock e lo status management, l’utente può modificare la sua posizione e lo stile
dde-launcherFornisce le funzionalità per mostrare le applicazioni installate, ma anche cercare ed avviare le app in questione
dde-control-centerFornisce un’interfaccia per le risorse hardware, l’account, il tema, la rete, il bluetooth, l’audio, I/O, le applicazioni predefinite, l’ora, l’alimentazione, gli aggiornamenti di sistema, ecc.
dde-osdFornisce l’interfaccia OSD per il volume, la luminosità, ecc.
deepin-menuFornisce un’interfaccia unificata del menu contestuale
deepin-notificaitonFornisce il servizio di notifica di sistema per mostrare i vari rimandi alle varie applicazioni
deepin-policykit-agentFornisce un password unificata ed un dialog di autenticazione delle applicazioni secondo le specifiche della Deepin UI per far si che le applicazioni GTK+ e Qt utilizzino lo stesso dialog
deepin-icon-themePer dare uno sguardo ai vari stili ed icone mondiali, incluse migliaia di applicazioni presenti nel Deepin Store, fare riferimento al seguente link: https://github.com/linuxdeepin/deepin-icon-theme/tree/master/deepin
deepin-gtk-themeE’ il tema delle finestre che rispetta il design indicato dalla Deepin UI (GTK+ 2,GTK+ 3, Qt4 e Qt5)
deepin-default-settingsFornisce le impostazioni predefinite del Deepin Desktop Environment come lo sfondo ed il tema delle icone, ecc.
qt5-integrationFornisce un’interfaccia unificata ed i temi per le applicazioni GTK+ e Qt patchando le librerie GTK+ e Qt. Puoi quindi sviluppare in un colpo solo la medesima interfaccia per le applicazioni in GTK+ e Qt

Deepin Store

Deepin Store è il primo App Store contenente applicazioni di qualità ed un’eccellente esperienza utente in GNU/Linux.

Assieme alle Deepin Original Applications, supportiamo più di 50 applicazione grazie al deepin-wine project, più di 200 applicazioni Android (come Angry Birds ed alcuni client video) scrivendo le Android runtime e le applicazioni HTML5 (es. Gliffy) mediante deepin-xwalk in cooperazione con Intel. Le applicazioni HTML5 si ricordano della dimensione della finestra nel tempo.

Deepin Store è diviso in lastore-daemon, lastore-session-helper e deepin-appstore:

  • lastore-daemon: E’ il cuore dell’app store, che esegue il download dei pacchetti, il controllo di integrità, l’analisi delle dipendenze, la gestione della cache, l’installazione del software, l’aggiornamento o l’eliminazione di quest’ultimo. Questo processo comunica con i repository remoti e rileva gli aggiornamenti dell’intero sistema. Inoltre, lastore-daemon aggiunge alcuni gangi ai programma pt/dpkg per prevenire la corruzione durante l’installazione da terminale.
  • lastore-session-helper: E’ il supporto per lastore-daemon, che esegue alcune operazioni come l’invio delle notifiche agli utenti, gestisce i permessi di sicurezza nei processi di installazione del software, ed è diviso a livello di codice come lastore-session-helper.
  • deepin-appstore: E’ il client ed interfaccia dell’app store, una semplice applicazione basata su CEF per gestire l’interazione utente con le varie pagine. Quando sul server son caricati gli aggiornamenti, questo comunica col deepin-appstore al fine di aggiornare la pagina. Contiene inoltre la pagine dei commenti e di ratings. Tecnicamente il deepin-appstore è un browser web che funge da client nativo.