博客 / 詳情

返回

不再單調!快來自定義你的專屬背景~

關注優麒麟,更多幹貨等着你!

目前優麒麟操作系統的登錄界面風格比較統一,我們個人用户可不可以開發一款獨具一格的,具有特殊意義的登錄程序呢?例如開機登錄時幻燈片播放自己喜歡的照片、展示自己喜歡的人生格言等,這當然是可以的!

接下來就憑藉我個人的一點淺薄知識,來給大家做個拋磚引玉,簡要介紹下開發人員如何在優麒麟上定製自己的登錄界面。

https://www.youku.com/video/X...

壁紙素材來自網絡,僅用作視頻演示,如若侵權可聯繫刪除。

一、DIY 優麒麟登錄界面開發基礎與開發環境介紹

1.開發基礎(需要但不限於)

熟悉 C/C++ 計算機編程語言、瞭解 Qt 跨平台的 C++ 圖形用户界面應用程序框架以及 QtCreator 開發工具包。

2.開發環境

20.04 版本系統上登錄界面的啓動、展示以及登錄認證是在 LightDM 基礎上搭配 liblightdm-qt5-3-dev 庫(QT 應用程序與 LightDM 交互的橋樑)實現的,今天我們就在此開發環境基礎上自定義登錄界面。

二、瞭解 LightDM--桌面顯示管理器

1.什麼是 LightDM ?

LightDM 是運行在 Debian 系列操作系統上的桌面顯示管理器,它的全名是 LightDisplay Manager ,表面含義是輕量級桌面顯示管理器。它是 FreeDesktop 工程的一部分。FreeDesktop 是一個致力於 Linux 和其他類 Unix 上的 X 窗口系統的桌面環境之間的互操作性和基礎技術共享的項目,由 Red Hat 公司 的 HavocPennington 於 2000 年 3 月創立。官方網站是:https://www.freedesktop.org。優麒麟社區 20.04 版本就是使用 LightDM 作為默認的窗口管理器。

2.LightDM 與登錄界面程序的關係及配置修改

操作系統初始化時會拉起 LightDM 服務,LightDM 服務初始化時會啓動 Xserver 圖形桌面服務,再根據 LightDM 的一系列配置拉起一些自定義腳本、服務、或程序,登錄界面程序就在其中,涉及到如下幾個配置文件夾,配置詳細定義見參考文檔:

  • /usr/share/lightdm/lightdm.conf.d/
  • /etc/lightdm/
  • /etc/lightdm/lightdm.conf.d/
  • 全局通用配置修改文件:/etc/lightdm/lightdm.conf
  • 自定義配置修改文件:/usr/share/lightdm/lightdm.conf.d/96-mydiygreeter.conf
3.配置自定義登錄程序

編輯文件(不存在則需創建)/usr/share/lightdm/lightdm.conf.d/96-mydiygreeter.conf如下:

[Seat:*]
#greeter-session=ukui-greeter
greeter-session=mydiygreeter
user-session=ukui

三、登錄界面程序實現

1.在 QtCreator 工具中創建工程 mydiygreeter 工程並利用 QT 應用程序框架初始化登錄主窗口

2.實現與 LightDM 交互類得到交互接口

  • 獲取當前選中即將登錄的用户名:userName
  • 設置即將登錄的用户名:setUserName
  • 通知 LightDM 異步啓動 user-session(用户會話):startSession

  • 獲取用户與 LightDM 共享目錄:getEnsureShareDir

3.獲取系統用户列表並初始化用户列表菜單控件

  • 實例化 QLightDM::UsersModel 用户數據模型獲取系統用户列表
  • 根據用户列表信息初始化菜單控件供選擇登錄用户

4.用户登錄交互實現

  • 實例化 MyGreeterWrapper:m\_greeter,並監聽認證交互狀態信號(認證過程中消息提示、認證狀態機狀態變更、認證結果)

  • 通過 MyGreeterWrappe r實例調用 LightDM 開始認證接口:
m_greeter->authenticate(username);
  • 通過 MyGreeterWrapper 實例調用LightDM密碼認證:
m_greeter->respond(pwd);
  • 認證完成後啓動用户會話:
m_greeter->startSession();

5.自定義主窗口背景圖

  • 遍歷自定義背景照片路徑中圖片路徑

  • 定時器變更即將更新的背景圖路徑

  • 主窗口背景刷新圖片--重寫 QMainWindow 類的 paintEvent 方法

6.編譯 mydiygreeter 工程得到二進制程序 mydiygreeter

7.將自定義登錄程序拷貝到系統默認可執行程序目錄:

cpmydiygreeter /usr/sbin/ (需sudo提權)

8.配置 mydiygreeter.desktop 文件,並拷貝到 /usr/share/xgreeters/ 目錄下

9.終端重啓 LightDM 服務即可見自定義登錄界面

注意

1、上述流程中代碼邏輯僅供參考,詳細demo源碼及打deb包可登錄優麒麟論壇領取;

2、使用 QLightDM 需在 Qt 工程中增加配置:

PKGCONFIG+= liblightdm-qt5-3)

參考文檔

  • LightDM 文檔:

http://people.ubuntu.com/~rob...

  • 他山之石:

https://blog.csdn.net/caoshiy...

  • Qt 官方文檔:

https://doc.qt.io/qt.html#qt5

感興趣的小夥伴,趕緊學起來吧!如有更多疑問,可至優麒麟論壇留言告訴我們哦~

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.