• 时间:2018-07-16 记录:byzqy

介绍:

  在管理多台计算机时,将每台计算机的ID或者计算机名醒目的显示在电脑桌面,往往是一个不错的选择。下面记录一下在Ubuntu 16.04上使用Python2.7如何实现这一功能。

工具/原料:

  操作系统:Ubuntu 16.04 ,

  编辑工具:gedit,

  开发语言:Python 2.7

  python库:Pillow-5.2.0-cp27-cp27mu-manylinux1_x86_64.whl

  Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。

代码/逻辑:

  1、创建python脚本,脚本包含两个动作:利用电脑自带图片合成新的图片、将新的图片设置为当前桌面背景;

  2、创建desktop文件和bash脚本,用来执行调用python脚本,实现鼠标双击图标运行,方便操作;

  3、修改ubuntu系统开机运行文件:/etc/rc.local,实现电脑开机自运行更换壁纸的python脚本。

文件:Create_Image.py

 1 import os
2 import socket
3 from PIL import Image,ImageDraw,ImageFont
4
5
6 def ModifyImage(img_path, StationID):
7 img = Image.open(img_path)
8 print dir(img)
9 draw = ImageDraw.Draw(img)
10 draw_font = ImageFont.truetype('/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-L.ttf', 280)
11 txtsize = draw_font.getsize(StationID)
12 imgsize = img.size
13 x = (imgsize[0] - txtsize[0]) / 2
14 y = (imgsize[1] - txtsize[1]) / 2
15 draw.text([x, y], StationID, font=draw_font)
16 img.save('/home/user/CustomWallpaper/Temp/warty-final-ubuntu-temp.png')
17 os.system('gsettings set org.gnome.desktop.background picture-uri file:/home/user/CustomWallpaper/Temp/warty-final-ubuntu-temp.png')
18
19
20 if __name__ == '__main__':
21 pc_name = socket.gethostname()
22 pc_name = pc_name.upper()
23 pc_name = pc_name.replace('-', '_')
24 ModifyImage('/usr/share/backgrounds/warty-final-ubuntu.png', pc_name)

文件:run_changewallpaper.sh

 1 #!/bin/bash -x
2 CURR_DIR=`dirname $0`
3 TEST_MODE=$1
4 if [[ ! $CURR_DIR =~ ^/ ]]; then
5 CURR_DIR="$PWD/$CURR_DIR"
6 fi
7
8 pkill -9f python
9 cd $CURR_DIR
10 python ./Create_Image.py

文件:rc.local (修改后的)

 1 #!/bin/sh -e
2 #
3 # rc.local
4 #
5 # This script is executed at the end of each multiuser runlevel.
6 # Make sure that the script will "exit 0" on success or any other
7 # value on error.
8 #
9 # In order to enable or disable this script just change the execution
10 # bits.
11 #
12 # By default this script does nothing.
13
14 #auto change wallpaper
15 /home/user/CustomWallpaper/ChangeWallpaper/run_changewallpaper.sh
16 #auto change wallpaper
17
18 exit 0

打开终端(Terminal)输入:sudo gedit /etc/rc.local ,在文本编辑器中打开系统文件rc.local,在文件中 exit 0 的上方添加如下内容:

#开机自动更换壁纸
/home/user/CustomWallpaper/ChangeWallpaper/run_changewallpaper.sh
#开机自动更换壁纸

文件:ChangeWallpaper.desktop

 1 #!/usr/bin/env xdg-open
2
3 [Desktop Entry]
4 Version=1.0
5 Type=Application
6 Terminal=true
7 Exec=/home/user/CustomWallpaper/ChangeWallpaper/run_changewallpaper.sh
8 Name=Change Wallpaper
9 Comment=Change Wallpaper
10 Icon=/home/user/CustomWallpaper/ChangeWallpaper/wallpaper_128px.png
11 Name[zh_CN]=Change Wallpaper

此外,为了方便操作和部署,还创建了几个另外的desktop文件:

文件:Install Pillow.desktop (双击安装pillow库的快捷方式文件)

 1 #!/usr/bin/env xdg-open
2
3 [Desktop Entry]
4 Version=1.0
5 Type=Application
6 Terminal=true
7 Exec=sudo pip install '/home/user/CustomWallpaper/ChangeWallpaper/Pillow-5.2.0-cp27-cp27mu-manylinux1_x86_64.whl'
8 Name=Install Pillow
9 Comment=Install Pillow
10 Icon=/home/user/CustomWallpaper/ChangeWallpaper/wallpaper_128px.png
11 Name[en]=Install Pillow

文件:Set Auto Start.desktop (用修改好的rc.local文件直接替换掉原来的文件)

 1 #!/usr/bin/env xdg-open
2
3 [Desktop Entry]
4 Version=1.0
5 Type=Application
6 Terminal=true
7 Exec=sudo cp '/home/user/CustomWallpaper/ChangeWallpaper/rc.local' '/etc/rc.local'
8 Name=Set Auto Ssart
9 Comment=Set Auto Ssart
10 Icon=/home/user/CustomWallpaper/ChangeWallpaper/wallpaper_128px.png
11 Name[en]=Set Auto Ssart
12 Name[en_US]=Set Auto Start

备注:

  1、以上文件(脚本)在使用时,记得要打开可执行权限:在文件上鼠标右键,点击属性勾选可执行权限。否则无法使用;

  2、文件中出现的CustomWallpaper/ChangeWallpaper和CustomWallpaper/Temp是我在/home/user目录下创建的文件夹,前者存放脚本,后者存放新的桌面背景;

  3、有时候会出现开机后电脑桌面没有更换的情况,观察发现python脚本有运行,新的图片也成功生成,但是设置为当前壁纸的时候没有成功,目前还没找到原因。遇到这种情况需要手动运行一下ChangeWallpaper.desktop文件便可成功更换壁纸。

预览:

更新:(2018-11-23)

上面的代码中没有设置字体的颜色,默认为白色,当然也可以自定义颜色,只需对代码稍作修改:

fillcolor = 'lightcyan'
#red红色/blue蓝色/lightcyan浅蓝色/grey灰色/black黑色/gold金色/limegreen暗绿/white白色/...
draw.text([x, y], StationID, font=draw_font, fill=fillcolor)

--the end--

最新文章

  1. SequoiaDB 系列之二 :SequoiaDB的简单CRUD操作
  2. ucenter 显示通信成功的条件
  3. scaleform mobile sdk for android 多点触摸 修正
  4. POJ 2075 Tangled in Cables (c++/java)
  5. (转载)XML Tutorial for iOS: How To Choose The Best XML Parser for Your iPhone Project
  6. hdu 2504
  7. jg-table 过程2 ( jgTable )
  8. 新版Azure CDN HTTPS加速服务正式上线
  9. 关于HTTP协议,这一篇就够了
  10. Python-接口自动化(四)
  11. canvas代替imgage,可以有效的提高大图片加载的速度!
  12. Python:将数组中的元素导出到变量中 (unpacking)
  13. CSS 选择器继承和层叠
  14. JavaScript类的写法
  15. Eclipse launch configuration----Eclipse运行外部工具
  16. 图片加载库Glide的封装工具类,方便以后使用
  17. html和css入门 (一)
  18. 20162328蔡文琛 Bag类
  19. html中嵌入flvplayer.swf播放器,播放视频
  20. 深入理解java虚拟机(十四)正确利用 JVM 的方法内联

热门文章

  1. 足不出户,一探古今,打造线上3D数字博物馆!
  2. SpringBoot Aop 详解和多种使用场景
  3. div 模拟alert弹出框
  4. 关于win7+cenos 7双系统安装
  5. Netty入门(一):ByteBuf
  6. JUC学习笔记(四)
  7. 给每个li延时添加样式动画效果(setInterval,clearInterval)
  8. 虚拟机中桥接模式和NAT模式以及仅主机模式的区别
  9. AQS学习(一)自旋锁原理介绍(为什么AQS底层使用自旋锁队列?)
  10. windows和linux传输小技巧——FTP服务