Резюме

Чтобы разработчики могли больше узнать о deepin, в этой статье будут представлены описания с рисунками, объясняющими архитектурный дизайн deepin и функции базовых модулей. Это поможет разработчикам взглянуть на идеи и направления дизайна в глобальном масштабе. Весь подробный код реализации и модули будут представлены здесь, для получения дополнительной информации о коде см. https://github.com/ Linuxdeepin .

Обзор архитектуры

Полную настольную операционную систему можно разделить на следующие уровни:

Kernel/Driver Он предназначен для оборудования, такого как процессор, память и диск и т. Д., И он должен быть совместим с различными сетевыми картами, картами дисплея, звуковой картой и устройствами ввода-вывода и т. Д.
Сервер отображения Загрузившись из ядра, мы можем видеть plymouth (известный как системный экран-заставка), а когда вы видите экран входа в систему, и он предлагает вам ввести пароль, драйвер дисплея запускает X Server. Это основа для графического интерфейса системы Linux. Весь запрос на рисование будет отправлен на X-сервер для обработки. Кроме того, это абстрактный слой для ввода и отображения, разработчики могут использовать API X11 / XCB без дополнительной информации о драйверах. Но теперь большинство пользователей будут использовать более высокую библиотеку GTK + / Qt для написания своих приложений.
Диспетчер отображения Просто это интерфейс, в который вы можете ввести пароль, экран входа в систему
Менеджер Ресурсов Это серия процессов демона для мониторинга состояния оборудования, и она будет предоставлять информацию для среды рабочего стола и приложений, таких как сеть, питание, диск, Bluetooth, звук, клавиатура и принтер и т. Д.
Desktop Environment Что касается Deepin Desktop Environment, он содержит backend-сервисы и процессы-демоны. Полноценная настольная среда обеспечит графическую разработку takeit, двоичные инструменты и DBus API. Позже мы объясним эти части
Магазин приложений Он обеспечивает операции по установке, удалению и обновлению программного обеспечения и т. Д., И он позволяет пользователю легко управлять программным обеспечением и может комментировать и оценивать программное обеспечение.
Приложения It is mainly Deepin Original Applications, cooperated applications, Android, Windows and even Web applications

Диспетчер отображения

Сначала мы представим диспетчер дисплеев. Диспетчер отображения будет запущен после успешного запуска X-сервера.

Deepin использует LightDM, разработанный Ubuntu. Другими основными менеджерами отображения являются GDM из GNOME, KDM из KDE. Использование LightDM заключается в том, что он очень лёгкий и не связывает среду рабочего стола, и он предоставляет пользовательский интерфейс для GTK +, Qt и HTML5 и т. Д. Это очень удобно.

Диспетчер отображения в основном предоставляет функции аутентификации и пользовательского переключателя для пользователей входа в систему в соответствии с системными разрешениями пользователя. Как только пользователь прошел проверку, Он будет запускать следующую программу запуска (обычно программу инициализации для среды рабочего стола) из greeter (config interface для LightDM), чтобы показать среду рабочего стола.

Deepin разработал интерфейсный интерфейс на основе Qt5, называемый deepin-greeter, например:

Помимо базовой аутентификации, пользовательского переключателя, функции даты и времени выключения, он также обеспечивает:

  • Интерфейс управления мультимедиа (в правом нижнем углу), позволяющий пользователям переключаться или приостанавливать музыку, когда экран заблокирован или переключается пользователем.
  • При запуске или разблокировке с несколькими экранами, он переключит основной интерфейс блокировки в соответствии с курсором.
  • Он напрямую запускает некоторые системные службы при вводе пароля, например, мощность, учетную запись, яркость и т. Д. После ввода пользователем пароля эти службы могут быть загружены заранее. Это сократит 30% времени запуска по сравнению с другими настольными средами.

DDE Daemon Services

После успешной авторизации диспетчера дисплеев система вызовет аргументы команды greeter. Для deepin этот аргумент будет startdde. Startdde — это приложение для запуска Deepin Desktop Environment. Эта команда будет выполнять следующие операции для запуска и отображения среды рабочего стола:

  • Выполните базовое управление сеансом рабочего стола, например, выйдите из системы и перезагрузите компьютер;
  • Задайте всю системную тему с помощью xsettings, чтобы среда рабочего стола и приложения GTK + и Qt могли успешно загружать тему пользователя. DPI экрана также загружается на этом этапе;
  • Обрабатывать метод запуска приложений по спецификациям, предоставляемым freedesktop, в том числе выполнять файлы * .desktop и делать события тревоги;
  • Управление несколькими экранами, которые обычно показывают док-станцию и рабочий стол на главном экране;
  • Обрабатывать порядок запуска приложений. Например, он сначала запустит компоненты ядра dde, а затем другое приложение, чтобы избежать одновременного запуска других приложений, поскольку некоторые системные службы не загружены, это может привести к состоянию гонки. И программа startdde может определить, может ли загружаться одна программа или нет, чтобы процесс запуска был в правильном порядке;

Когда загружена программа startdde, она запустит процесс инициализации dde-session, чтобы предоставить бэкэнд-сервис для док-станции и запуска, включая:

  • Управление резидентными программами дока и выбора программ;
  • Поддержка статуса запуска приложений;
  • Поддерживать статус рабочей области и места для приложений;
  • Поддерживать статус и значки установленных приложений;

Dde-session-initializer является процессом-демоном для док-станции и запуска и предоставляет для них базовую функцию. Мы не можем кликать на значки приложений и переключаться между окнами программ без этого процесса.

Dde-session-initializer ранее был частью демона dde-session-daemon, мы разделили этот процесс для увеличения док-станции и запуска.

Dde-session-daemon и dde-system-daemon — это два основных процесса демона для всей системы. Они поддерживают весь статус оборудования, включая сетевую карту, питание, диск, Bluetooth, звук, принтер, аутентификацию, совместное использование, клавиатуру и мышь и т. Д., Чтобы инкапсулировать весь процесс демона и предоставить интерфейс, ориентированный на пользовательский дизайн.

Dde-session-daemon содержит операции, которые не требуют привилегий root, таких как звук, клавиатура и мышь и дата. Dde-system-daemon содержит другую часть, требующую привилегии root, такую как полномочия, учетные записи, операции с файлами и яркие и т. Д. Эта конструкция процесса песочницы может ограничить разрешения и избежать многих проблем безопасности.

Dde-session-daemon и dde-system-daemon делают следующие части:

  • Выполните функцию создания, удаления и управления учетной записью;
  • Управление различным статусом для нескольких экранов, включая местоположение, направление, разрешение и яркость и т. Д .;
  • Управлять ассоциациями по умолчанию и настройками темы;
  • Управлять настройками сети для проводной и беспроводной сети, VPN и DSL;
  • Управление настройками Bluetooth, звука, времени и часового пояса и т. Д .;
  • Управление настройками питания, клавиатуры и мыши;
  • Управление обновлениями и загрузкой системы;
  • Предоставлять услуги для мультитач-пэдов.

Dde-session-initalizer, dde-session-daemon и dde-system-daemon выполняют как gnome-session-daemon в GNOME, но Deepin Team использует golang для перезаписи всего кода процесса демона для нужд пользователя и повышения производительности. DDE, так же как GNOME и KDE вызывают библиотеку инфраструктуры (сетевой менеджер, upower, udisk, bluez, pluseaudio, cups, Polkitd, gvfsd) для предоставления абстрактных и расширенных служб для среды рабочего стола и приложений.

DDE API

Среда рабочего стола обеспечит уровень API над процессом демона Deepin Desktop Environment, который содержит графический инструментарий разработки, бинарные инструменты и интерфейс API DBus для прямого вызова среды рабочего стола и приложений без их внедрения с нуля. Часть API DBus будет динамически вызвана службами DBus (и не будет находиться в памяти), вы можете вызывать inteface любым языком программирования. Введем картинку слева направо:

DTK

DTK (набор инструментов Deepin Tool Kit) представляет собой набор инструментальных средств пользовательского интерфейса на основе Qt5 для написания и унификации Deepin Desktop и Deepin Original Application, его основными функциями являются:

  • Предоставляет единый экземпляр интерфейса, чтобы не писать его с нуля.
  • Предоставит ряд функций для перемещения и масштабирования с помощью библиотеки 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: предоставляйте сервис размытия обоев, вы можете быстро размыть изображение, не написав собственную реализацию. Для алгоритма размытия Deepin Team тратится всего 30 мс, это быстрее, чем большинство реализаций сообщества;
  • lunar-calendar: предоставление службы для запроса даты и времени;
  • powersupply:Обеспечивает интерфейс высокого уровня для информации о мощности, используя udev для получения информации о состоянии питания и аккумулятора;
  • soundutils: Предоставляет интерфейс для воспроизведения звуковых эффектов на рабочем столе;
  • validator: Предоставляет валидатор для имени пользователя, не выполняя много регулярных выражений;
  • cursor-helper: Предоставляет настройки для темы курсора;
  • drandr: Предоставляет высокоуровневый интерфейс для x11 randr api для получения подробной информации о мониторе;
  • dxinput: Предоставляет интерфейс высокого уровня для x11 xi / xi2 api для получения и установки устройств ввода-вывода;
  • И множество передовых услуг, предоставляемых этим проектом: https://github.com/linuxdeepin/dde-api, Вы приветствуете расширение своей функции

dde-daemon dbus API

Эта часть была предоставлена для Центра управления Deepin, с помощью dde-session-daemon и dde-system-daemon, в основном с некоторыми интерфейсами DBus. Другие приложения также могут использовать эту часть API без знания и написания кода более низкого уровня. Мы просто введем некоторые из этих функций, если вы заинтересованы в них, Вы можете направить код центра управления сюда:https://github.com/linuxdeepin/dde-control-center

  • Запросить номера экранов, которые являются основным экраном и какими разрешениями они обладают в текущей системе.
  • Запросите настройки языка, яркости, громкости и т. Д. текущей системы.
  • Запросить статус сети, например, используя проводное или беспроводное соединение, и если открыто VPN текущей системы.
  • Запросите дату и время, часовой пояс, клавиатуру и мышь и т. Д. текущей системы.

Вся информация об оборудовании, показанная диспетчерским центром, может быть запрошена с помощью интерфейса DBus команды dde-api. Команда разработчиков Deepin долго обновляла эти DBus API, вы можете просто использовать их без написания библиотеки нижнего уровня (network-manager, Pluseaudio, bluez, upower и udisk и т. Д.) чтобы тратить больше времени на написание расширенных функций.

DDE UI

Последняя часть рабочего пространства Deepin — это слой пользовательского интерфейса, который содержит следующие части:

deepin-wm Есть два менеджера окон: deepin-metacity и deepin-wm, система будет автоматически выбирать в зависимости от производительности оборудования и драйвера дисплея. Deepin-metacity — это 2D-менеджер окон, основанный на metacity для компьютера с низкой конфигурацией или без установки соответствующего драйвера дисплея. Это низкое потребление ресурсов и плохие эффекты анимации. Deepin-wm — это трехмерный оконный менеджер, основанный на mutter, и он также является менеджером окон по умолчанию. Он подходит для правильного драйвера дисплея и компьютера с высокой конфигурацией с элегантными анимационными эффектами
dde-desktop Он предоставляет базовую файловую сетку рабочего стола и основные операции с файлами. Dde-desktop с помощью библиотеки libdde-file-manager, чтобы сохранить такой же диалог, как Deepin File Manger (dde-file-manager)
dde-dock Это предоставляет графический значок дока и управление статусом, пользователь может изменить свое положение и стиль
dde-launcher Это предоставляет функции для показа установленных приложений, а также для их поиска и запуска
dde-control-center Это предоставляет интерфейсный интерфейс для аппаратных ресурсов, таких как учетная запись, тема, сеть, Bluetooth, звук, ввод-вывод, приложения по умолчанию, дата и время, питание и обновление системы и т. Д.
dde-osd Это обеспечивает интерфейс OSD для громкости и яркости и т. Д.
deepin-menu Это provides a unified context menu UI
deepin-уведомление Это предоставляет службу уведомлений для системы, чтобы отображать различные кнопки перехода для различных приложений
deepin-policykit-agent Это предоставляет унифицированный пароль и аутентификационный диалог для всех приложений в соответствии с техническими требованиями дизайна интерфейса Deepin, чтобы поддерживать как приложения GTK +, так и Qt, используя тот же диалог
deepin-icon-theme Самый унифицированный набор значков стиля в мире, включая тысячи приложений в Deepin Store, вы можете проверить здесь: https://github.com/linuxdeepin/deepin-icon-theme/tree/master/deepin
deepin-gtk-theme Это тема окна, соответствующая спецификации дизайна Deepin UI (GTK + 2, GTK + 3, Qt4 и Qt5)
deepin-default-settings Он предоставляет настройки по умолчанию для Deepin Desktop Environment, такие как обои и тема значков и т. Д.
qt5-integration Он предоставляет унифицированный интерфейс и тему для приложений GTK + и Qt, внося исправления в библиотеки GTK + и Qt. Вы можете написать один раз, чтобы получить одинаковый интерфейс в обоих приложениях GTK + и Qt

Deepin Store

Deepin Store — первый магазин приложений, который имеет хорошее качество продукции и отличное взаимодействие с Linux.

Кроме Deepin Original Applications, мы поддерживаем более 50 приложений Windows в рамках проекта deepin-wine, более 200 Android-приложений (например, Angry Birds и некоторый видео-клиент) с помощью встроенной среды Android Android и приложений HTML5 (например, Gliffy) от deepin-xwalk сотрудничали с Intel. Приложение HTML5 также может запомнить его размер окна.

Deepin Store можно разделить на: lastore-daemon, lastore-session-helper и deepin-appstore:

  • Lastore-daemon: это основная часть хранилища приложений, которая выполняет работу по загрузке пакетов, проверке хеша, анализу зависимостей, локальному управлению кэшем, установке программного обеспечения, удалению и обновлению. Этот процесс-демон будет взаимодействовать с удаленными репозиториями и поддерживать процесс обновления и безопасности всей системы. Lastore-Daemon также добавит некоторые крючки в программу apt / dpkg, чтобы предотвратить повреждение от установки в терминале.
  • Lastore-session-helper: это помощник lastore-daemon, который будет выполнять некоторые операции пользовательского сеанса, такие как отправка уведомлений пользователям, чтобы гарантировать безопасность при установке программного обеспечения, мы делим эту часть кода на lastore-session- Помощник.
  • Deepin-appstore: это клиент и интерфейс хранилища приложений, просто оболочка приложения на основе CEF для обработки взаимодействия пользователя и встраивания веб-страницы. Как только на сервере будет обновлено новое программное обеспечение, оно скажет deepin-appstore обновить веб-страницу. Он также содержит интерфейс для комментариев и операций с тарифами. Технически deepin-appstore — это простой веб-браузер, как родной клиент.