不再单调!快来自定义你的专属背景~

贾元春
• 阅读 1213

关注优麒麟,更多干货等着你!

目前优麒麟操作系统的登录界面风格比较统一,我们个人用户可不可以开发一款独具一格的,具有特殊意义的登录程序呢?例如开机登录时幻灯片播放自己喜欢的照片、展示自己喜欢的人生格言等,这当然是可以的!

接下来就凭借我个人的一点浅薄知识,来给大家做个抛砖引玉,简要介绍下开发人员如何在优麒麟上定制自己的登录界面。

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

感兴趣的小伙伴,赶紧学起来吧!如有更多疑问,可至优麒麟论坛留言告诉我们哦~

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
贾元春
贾元春
Lv1
青春因为纯真,方才难以忘怀。
文章
1
粉丝
0
获赞
0
热门文章

暂无数据