龙芯俱乐部开源技术社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3725|回复: 3

在龙芯上自己编写原创应用 ——“动态壁纸

[复制链接]

84

主题

465

帖子

44万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
440441
发表于 2018-1-16 11:17:58 | 显示全部楼层 |阅读模式

http://www.loongson.cn/news/company/610.html

一、为什么要在龙芯平台上编写“动态壁纸”

[size=18.018px]

[size=18.018px]    龙芯3A3000桌面电脑的用户越来越多了,人们都想在龙芯电脑上有更好的使用体验。在PC机上,有很多动态切换电脑壁纸的软件,例如360壁纸、动态壁纸,等等。而在Linux上一直没有好的开源软件,短期内又不可能把这些PC机上的软件都移植到龙芯上。所以,我们需要自己动手,编写能够在龙芯平台运行的“动态壁纸”。

[size=18.018px]    只要有简单的编程基础,就可以轻松的实现。

[size=18.018px]    现在这个应用程序已经提交到“应用公社”了(app.loongnix.org)。使用loongnix新版本的用户可以在应用公社中找到这个应用,一键安装。
[size=18.018px]
[size=18.018px]▲ 龙芯应用公社中的原创应用“动态壁纸”
[size=18.018px]

二、功能需求[size=18.018px]
[size=18.018px]▲ 定时切换桌面壁纸
[size=18.018px]

[size=18.018px]    简单来说,我们要编写的程序需要开机自动运行,可自动更换当前登录用户的登录界面图片、桌面背景图片。图片来源有两种:

[size=18.018px]

[size=18.018px]    1、 本机指定一个文件夹,存放要播放的背景图。

[size=18.018px]

[size=18.018px]    2、 指定一个网络位置的文件夹(比如说FTP服务器上的目录)

[size=18.018px]

[size=18.018px]    每隔一定时间自动更换桌面背景(时间可以默认2小时,支持修改)。

[size=18.018px]    除了桌面背景之外,开机登录图片、锁屏图片也要同时修改。

[size=18.018px]

三、为什么要使用Python[size=18.018px]
[size=18.018px]▲ 如火如荼的Python
[size=18.018px]

[size=18.018px]    Python可以说是目前最火的语言。它几乎集成了所有现代编程语言的优点:免费、开源,面向高层问题,不需要编译,面向对象、可扩展性,具有丰富的第三方类库。由于Python的开源本质和可移植性的特点,Python已经被移植在许多平台上,这些平台包括Linux、Windows、FreeBSD、Macintosh甚至还有Google的Android平台。所以Python程序无需修改就可以在上述任何平台上面运行。而且Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。

[size=18.018px]    Python有活跃物社区和支持者,除了完成传统的系统管理、脚本任务等工作,Python还能够进行本地图形界面开发、Web开发、数据库开发,甚至连新潮的大数据、人工智能都有丰富的第三方库。目前国内的中小学信息化课程都开始学习Python了。

[size=18.018px]    龙芯的所有操作系统都已经集成了Python语言环境。

[size=18.018px]    使用Python编写软件,发行时不需要编译,源码就是二进制,省去了以前使用C/C++所面临的编译器、运行库等一系列令人头疼的依赖关系,可以说是一劳永逸。

[size=18.018px]    可以说,只要不是对性能要求特别高的场合,使用Python是可以极大提供开发效率的选择。

[size=18.018px]

四、为什么使用JSON做配置文件?
[size=18.018px]     我们的程序需要一个配置文件:.wallpaper.conf ,使用的是json的格式。

[size=18.018px]    JSON是一种轻量级的数据交换格式,它基于JavaScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

[size=18.018px]    所以,现在流行的软件几乎都是使用JSON格式。

[size=18.018px]    下面是我们定义的配置文件内容:

{
       "intervals": "10",
       "directorys":
       [
              {
                     "type": "directory",
                     "value": "/usr/share/backgrounds/mate/nature"
              },
              {
                     "type": "directory",
                     "value": "/usr/share/backgrounds/mate/desktop"
              },
              {
                     "type": "url",
                     "value": "ftp://10.2.5.28/tmp/ryf"
              }

       ]
}
[size=18.018px]▲ 配置文件基于JSON语法,简洁直观
[size=18.018px]

五、怎样实现修改桌面背景?
[size=18.018px]

[size=18.018px]       龙芯的社区版Loongnix操作系统基于mate桌面,提供一个dconf命令可以更改桌面背景图片。

[size=18.018px]

$ dconf write /org/mate/desktop/background/picture-filename <图片文件名>
[size=18.018px]

[size=18.018px]       但是,对于开机登录图片、锁屏图片,需要使用不同的方法,是修改系统中的配置文件 /usr/share/backgrounds/f21/default/f21.xml。

[size=18.018px]

六、技术要点[size=18.018px]
[size=18.018px]▲ “动态壁纸”的程序结构,在180行Python代码中实现
[size=18.018px]

[size=18.018px]    本程序的主要流程是一个循环结构:读取FTP上的图片,首先要根据FTP上存放图片的路径,把图片读取到本机上,再根据本机上的目录,读取该目录下的所有图片名称,再根据目录加集合里的图片名称用dconf命令更改桌面背景图片,和修改锁定屏幕的背景图片。

[size=18.018px]    具体实现技术有:

[size=18.018px]    1.
开机后自动执行壁纸切换
[size=18.018px]:向/etc/xdg/autostart/目录下,增加了wallpaper.desktop文件,那么登录桌面后就会自动启动运行动态壁纸的后台程序。

[size=18.018px]    2.
访问FTP服务器
[size=18.018px]:使用Python内置类库ftplib,非常方便。

[size=18.018px]    3.
定时执行
[size=18.018px]:使用Python内置类库time.sleep。根据配置文件制定的时间,利用sleep()函数来执行定时切换图片的功能。

[size=18.018px]    4.
配置文件
[size=18.018px]:Python内置JSON语法解析器。

[size=18.018px]    5.
更新配置
[size=18.018px]:本程序的一个特色是,对于配置文件的修改,使用了信号机制通知后台进程重新加载配置文件。例如,用户手动修改.wallpaper.conf配置文件,进入终端执行命令:

[size=18.018px]    # python changeconfig.py

[size=18.018px]    这样就会重新读取修改后的图片目录,重新开始播放新的图片。在主程序中,我们首先使用signal.signal()函数来预设信号处理函数,等待信号。当执行changeconfig.py命令时,发送信号SIGUSR1给主程序,从暂停中恢复,并根据预设,执行SIGTSTP的信号处理函数myHandler()。我们可以根据自己的需要更改myHandler()中的操作,以针对不同的信号实现个性化的处理。

[size=18.018px]

七、一切为了开放!
[size=18.018px]

[size=18.018px]    本项目已经在github开放源代码和文档资料:

[size=18.018px]
[size=18.018px]▲ “动态壁纸”的源代码在github上开放
[size=18.018px]

[size=18.018px]

八、
[size=18.018px]

[size=18.018px]    “动态壁纸”为龙芯桌面提供了不亚于PC机软件的体验。龙芯已经具有自由开发应用程序的能力,龙芯应用生态必将蓬勃发展。大家有新的创意也可以自己实现,如果有新的心得体会或者更好的平台记得反馈给我们,或者在龙芯论坛(http://ask.loongnix.org)上提供新的技术成果,一起把龙芯软件生态完善起来!

28

主题

260

帖子

16万

积分

论坛元老

Rank: 8Rank: 8

积分
169669
发表于 2018-1-17 07:56:37 | 显示全部楼层
感谢你的分享

0

主题

22

帖子

953

积分

高级会员

Rank: 4

积分
953
发表于 2018-1-17 09:02:16 | 显示全部楼层
感谢分享,可惜没能实验下。

26

主题

150

帖子

4038

积分

超级版主

Rank: 8Rank: 8

积分
4038
发表于 2018-2-14 15:53:50 | 显示全部楼层
很棒,龙芯可以用动态壁纸了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|龙芯俱乐部开源技术社区

GMT+8, 2024-4-27 06:33 , Processed in 0.145852 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表