在龙芯电脑上编写Python应用:动态壁纸

近日 , 美国商务部加码了对华为的封锁 , 让国内科技企业感到了一阵凉意 。 不得不说 , 虽然不想与美国脱钩 , 但是我们必须留有后手 , 国产备胎必须准备起来 。 作为国内最著名的自主研发CPU“龙芯” , 它发展到什么程度了?它能够支持Python的编写和运行吗?
龙芯发展到什么程度了?
这里我们摘取一段近期的新闻介绍:
去年底龙芯在北京推出了新一代龙芯3A4000/3B4000系列处理器 , 使用与上一代产品3A3000/3B3000相同的28nm工艺 , 采用龙芯最新研制的新一代处理器核GS464V , 主频1.8GHz-2.0GHz , SPECCPU2006定点和浮点单核分值均超过20分 , 是上一代产品的两倍以上 。 据胡伟武介绍 , 龙芯3A4000通用处理性能与AMD公司28nm工艺最后产品“挖掘机”处理器相当 。
从性能上看 , 应该可以说“能用”了 。 从生态上看 , 龙芯显然是Linux阵营 , 那它能支持Linux到什么程度呢?根据可查到的资料显示 , 龙芯对Firefox、Chromium、WPS、搜狗输入法的支持应该还算不错 , 因为需要支持党政机关的使用需求 。 对于Python , 龙芯也是一早就进行了支持 。 下面是一篇2017年的文章 , 介绍了《在龙芯上自己编写原创应用——“动态壁纸”》的过程 , 其中使用的编程语言就是Python 。 下面 , 大家一起来赏鉴一下 。
文章来源:http://www.loongson.cn/news/company/610.html
在龙芯上自己编写原创应用——“动态壁纸”(基于Python)
一、为什么要在龙芯平台上编写“动态壁纸”?龙芯3A3000桌面电脑的用户越来越多了 , 人们都想在龙芯电脑上有更好的使用体验 。 在PC机上 , 有很多动态切换电脑壁纸的软件 , 例如360壁纸、动态壁纸 , 等等 。 而在Linux上一直没有好的开源软件 , 短期内又不可能把这些PC机上的软件都移植到龙芯上 。 所以 , 我们需要自己动手 , 编写能够在龙芯平台运行的“动态壁纸” 。
只要有简单的编程基础 , 就可以轻松的实现 。
现在这个应用程序已经提交到“应用公社”了(app.loongnix.org) 。 使用loongnix新版本的用户可以在应用公社中找到这个应用 , 一键安装 。
在龙芯电脑上编写Python应用:动态壁纸
文章图片
▲龙芯应用公社中的原创应用“动态壁纸”
二、功能需求
在龙芯电脑上编写Python应用:动态壁纸
文章图片
▲定时切换桌面壁纸
简单来说 , 我们要编写的程序需要开机自动运行 , 可自动更换当前登录用户的登录界面图片、桌面背景图片 。 图片来源有两种:1、本机指定一个文件夹 , 存放要播放的背景图 。 2、指定一个网络位置的文件夹(比如说FTP服务器上的目录)
每隔一定时间自动更换桌面背景(时间可以默认2小时 , 支持修改) 。
除了桌面背景之外 , 开机登录图片、锁屏图片也要同时修改 。 三、为什么要使用Python?
▲如火如荼的Python
Python可以说是目前最火的语言 。 它几乎集成了所有现代编程语言的优点:免费、开源 , 面向高层问题 , 不需要编译 , 面向对象、可扩展性 , 具有丰富的第三方类库 。 由于Python的开源本质和可移植性的特点 , Python已经被移植在许多平台上 , 这些平台包括Linux、Windows、FreeBSD、Macintosh甚至还有Google的Android平台 。 所以Python程序无需修改就可以在上述任何平台上面运行 。 而且Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序 。
Python有活跃物社区和支持者 , 除了完成传统的系统管理、脚本任务等工作 , Python还能够进行本地图形界面开发、Web开发、数据库开发 , 甚至连新潮的大数据、人工智能都有丰富的第三方库 。 目前国内的中小学信息化课程都开始学习Python了 。
龙芯的所有操作系统都已经集成了Python语言环境 。
使用Python编写软件 , 发行时不需要编译 , 源码就是二进制 , 省去了以前使用C/C++所面临的编译器、运行库等一系列令人头疼的依赖关系 , 可以说是一劳永逸 。
可以说 , 只要不是对性能要求特别高的场合 , 使用Python是可以极大提供开发效率的选择 。 四、为什么使用JSON做配置文件?
我们的程序需要一个配置文件:.wallpaper.conf , 使用的是json的格式 。
JSON是一种轻量级的数据交换格式 , 它基于JavaScript的一个子集 。 JSON采用完全独立于语言的文本格式 , 但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等) 。 这些特性使JSON成为理想的数据交换语言 。 易于人阅读和编写 , 同时也易于机器解析和生成 。
所以 , 现在流行的软件几乎都是使用JSON格式 。
下面是我们定义的配置文件内容:
▲配置文件基于JSON语法 , 简洁直观
五、怎样实现修改桌面背景?龙芯的社区版Loongnix操作系统基于mate桌面 , 提供一个dconf命令可以更改桌面背景图片 。
但是 , 对于开机登录图片、锁屏图片 , 需要使用不同的方法 , 是修改系统中的配置文件/usr/share/backgrounds/f21/default/f21.xml 。 六、技术要点
在龙芯电脑上编写Python应用:动态壁纸
文章图片
▲“动态壁纸”的程序结构 , 在180行Python代码中实现
本程序的主要流程是一个循环结构:读取FTP上的图片 , 首先要根据FTP上存放图片的路径 , 把图片读取到本机上 , 再根据本机上的目录 , 读取该目录下的所有图片名称 , 再根据目录加集合里的图片名称用dconf命令更改桌面背景图片 , 和修改锁定屏幕的背景图片 。
具体实现技术有:1.开机后自动执行壁纸切换:向/etc/xdg/autostart/目录下 , 增加了wallpaper.desktop文件 , 那么登录桌面后就会自动启动运行动态壁纸的后台程序 。 2.访问FTP服务器:使用Python内置类库ftplib , 非常方便 。
3.定时执行:使用Python内置类库time.sleep 。 根据配置文件制定的时间 , 利用sleep()函数来执行定时切换图片的功能 。 4.配置文件:Python内置JSON语法解析器 。 5.更新配置:本程序的一个特色是 , 对于配置文件的修改 , 使用了信号机制通知后台进程重新加载配置文件 。 例如 , 用户手动修改.wallpaper.conf配置文件 , 进入终端执行命令:
#pythonchangeconfig.py
这样就会重新读取修改后的图片目录 , 重新开始播放新的图片 。 在主程序中 , 我们首先使用signal.signal()函数来预设信号处理函数 , 等待信号 。 当执行changeconfig.py命令时 , 发送信号SIGUSR1给主程序 , 从暂停中恢复 , 并根据预设 , 执行SIGTSTP的信号处理函数myHandler() 。 我们可以根据自己的需要更改myHandler()中的操作 , 以针对不同的信号实现个性化的处理 。 七、一切为了开放!
本项目已经在github开放源代码和文档资料:
https://github.com/renyafei-loongson/wallpaper
在龙芯电脑上编写Python应用:动态壁纸
文章图片
▲“动态壁纸”的源代码在github上开放
八、总结
【在龙芯电脑上编写Python应用:动态壁纸】“动态壁纸”为龙芯桌面提供了不亚于PC机软件的体验 。 龙芯已经具有自由开发应用程序的能力 , 龙芯应用生态必将蓬勃发展 。 大家有新的创意也可以自己实现 , 如果有新的心得体会或者更好的平台记得反馈给我们 , 或者在龙芯论坛(http://ask.loongnix.org)上提供新的技术成果 , 一起把龙芯软件生态完善起来!


    推荐阅读