不再單調(diào)!快來(lái)自定義你的專屬背景~
目前優(yōu)麒麟操作系統(tǒng)的登錄界面風(fēng)格比較統(tǒng)一,我們個(gè)人用戶可不可以開(kāi)發(fā)一款獨(dú)具一格的,具有特殊意義的登錄程序呢?例如開(kāi)機(jī)登錄時(shí)幻燈片播放自己喜歡的照片、展示自己喜歡的人生格言等,這當(dāng)然是可以的!
接下來(lái)就為大家簡(jiǎn)要介紹下開(kāi)發(fā)人員如何在優(yōu)麒麟上定制自己的登錄界面。
壁紙素材來(lái)自網(wǎng)絡(luò),僅用作視頻演示,如若侵權(quán)可聯(lián)系刪除。
一、DIY 優(yōu)麒麟登錄界面開(kāi)發(fā)基礎(chǔ)與開(kāi)發(fā)環(huán)境介紹
1.開(kāi)發(fā)基礎(chǔ)(需要但不限于)
熟悉 C/C++ 計(jì)算機(jī)編程語(yǔ)言、了解 Qt 跨平臺(tái)的 C++ 圖形用戶界面應(yīng)用程序框架以及 QtCreator 開(kāi)發(fā)工具包。
2.開(kāi)發(fā)環(huán)境
20.04 版本系統(tǒng)上登錄界面的啟動(dòng)、展示以及登錄認(rèn)證是在 LightDM 基礎(chǔ)上搭配 liblightdm-qt5-3-dev 庫(kù)(QT 應(yīng)用程序與 LightDM 交互的橋梁)實(shí)現(xiàn)的,今天我們就在此開(kāi)發(fā)環(huán)境基礎(chǔ)上自定義登錄界面。
二、了解 LightDM--桌面顯示管理器
1.什么是 LightDM ?
LightDM 是運(yùn)行在 Debian 系列操作系統(tǒng)上的桌面顯示管理器,它的全名是 LightDisplay Manager ,表面含義是輕量級(jí)桌面顯示管理器。它是 FreeDesktop 工程的一部分。FreeDesktop 是一個(gè)致力于 Linux 和其他類 Unix 上的 X 窗口系統(tǒng)的桌面環(huán)境之間的互操作性和基礎(chǔ)技術(shù)共享的項(xiàng)目,由 Red Hat 公司 的 HavocPennington 于 2000 年 3 月創(chuàng)立。官方網(wǎng)站是:https://www.freedesktop.org 。優(yōu)麒麟社區(qū) 20.04 版本就是使用 LightDM 作為默認(rèn)的窗口管理器。
2.LightDM 與登錄界面程序的關(guān)系及配置修改
操作系統(tǒng)初始化時(shí)會(huì)拉起 LightDM 服務(wù),LightDM 服務(wù)初始化時(shí)會(huì)啟動(dòng) Xserver 圖形桌面服務(wù),再根據(jù) LightDM 的一系列配置拉起一些自定義腳本、服務(wù)、或程序,登錄界面程序就在其中,涉及到如下幾個(gè)配置文件夾,配置詳細(xì)定義見(jiàn)參考文檔:
● /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.配置自定義登錄程序
編輯文件(不存在則需創(chuàng)建)/usr/share/lightdm/lightdm.conf.d/96-mydiygreeter.conf如下:
[Seat:*] #greeter-session=ukui-greeter greeter-session=mydiygreeter user-session=ukui
三、登錄界面程序?qū)崿F(xiàn)
1.在 QtCreator 工具中創(chuàng)建工程 mydiygreeter 工程并利用 QT 應(yīng)用程序框架初始化登錄主窗口

2.實(shí)現(xiàn)與 LightDM 交互類得到交互接口

● 獲取當(dāng)前選中即將登錄的用戶名:userName
● 設(shè)置即將登錄的用戶名:setUserName
● 通知 LightDM 異步啟動(dòng) user-session(用戶會(huì)話):startSession

● 獲取用戶與 LightDM 共享目錄:getEnsureShareDir
3.獲取系統(tǒng)用戶列表并初始化用戶列表菜單控件
● 實(shí)例化 QLightDM::UsersModel 用戶數(shù)據(jù)模型獲取系統(tǒng)用戶列表
● 根據(jù)用戶列表信息初始化菜單控件供選擇登錄用戶
4.用戶登錄交互實(shí)現(xiàn)
● 實(shí)例化 MyGreeterWrapper:m_greeter,并監(jiān)聽(tīng)認(rèn)證交互狀態(tài)信號(hào)(認(rèn)證過(guò)程中消息提示、認(rèn)證狀態(tài)機(jī)狀態(tài)變更、認(rèn)證結(jié)果)

● 通過(guò) MyGreeterWrappe r實(shí)例調(diào)用 LightDM 開(kāi)始認(rèn)證接口:
m_greeter->authenticate(username);
● 通過(guò) MyGreeterWrapper 實(shí)例調(diào)用LightDM密碼認(rèn)證:
m_greeter->respond(pwd);
● 認(rèn)證完成后啟動(dòng)用戶會(huì)話:
m_greeter->startSession();
5.自定義主窗口背景圖
● 遍歷自定義背景照片路徑中圖片路徑

● 定時(shí)器變更即將更新的背景圖路徑

● 主窗口背景刷新圖片--重寫(xiě) QMainWindow 類的 paintEvent 方法

6.編譯 mydiygreeter 工程得到二進(jìn)制程序 mydiygreeter
7.將自定義登錄程序拷貝到系統(tǒng)默認(rèn)可執(zhí)行程序目錄:
cpmydiygreeter /usr/sbin/ (需sudo提權(quán))
8.配置 mydiygreeter.desktop 文件,并拷貝到 /usr/share/xgreeters/ 目錄下

9.終端重啟 LightDM 服務(wù)即可見(jiàn)自定義登錄界面
注意
1、上述流程中代碼邏輯僅供參考,詳細(xì)demo源碼及打deb包可登錄優(yōu)麒麟論壇(或點(diǎn)擊“閱讀原文”)領(lǐng)?。?/p>
2、使用 QLightDM 需在 Qt 工程中增加配置:
PKGCONFIG+= liblightdm-qt5-3)
參考文檔
● LightDM 文檔:
http://people.ubuntu.com/~robert-ancell/lightdm/reference/
● 他山之石:
https://blog.csdn.net/caoshiying/article/details/107242980
● Qt 官方文檔:
感興趣的小伙伴,趕緊學(xué)起來(lái)吧!如有更多疑問(wèn),可至優(yōu)麒麟論壇留言告訴我們哦~