本篇能达到目的,但踩坑较多,可以直接看更新后的文章

情境

感觉桌面壁纸太单调, 没有合适的壁纸来源, 手动更新太麻烦…不难发现, 每天必应的首页图片都会更新, 而且图片可以直接拿来作壁纸. 所以, 动动手就可以解决上面的问题

思路

  • 获取必应首页图片 (python requests 库 )
  • 保存为本地文件
  • 文件自动命名: 依据当天日期即可 (python time 库)
  • 通过命令将图片设置为壁纸 (ubuntu环境, gnome桌面, python os 库)
  • 让代码每天跑一遍 (crontab命令)

代码实现

#!/usr/bin/python3
# -*- "encoding: utf-8" -*-import requests
import time
import os#图片为必应首页图片, 此链接来源于知乎搜索
img_url = "https://area.sinaapp.com/bingImg/"
#根据日期自动确定文件名
date = time.localtime()
year = date.tm_year
month = date.tm_mon
day = date.tm_mday
filename = "bing_%s_%s_%s.jpg" % (year, month, day)#获取图片并保存在本地
r = requests.get(img_url)
with open("/home/ubuntu/Wallpapers/%s"%filename, "wb") as f:f.write(r.content)#执行shell命令更换壁纸
os.system("gsettings set org.gnome.desktop.background picture-uri 'file:///home/ubuntu/Wallpapers/%s'" % filename)

接下来测试一下代码能否正确执行

在命令行直接执行这段代码没有问题, 图片能够正常下载并保存. 壁纸被正常更换

ubuntu@ubuntu-X550VQ:~$ ./autoUpdateWallpapers.py

但是, 不能每天都自己执行一遍这个程序吧, 所以借助 cronanacron 让代码每天跑一遍就行了

然而到最后才发现, crongsetting 并不友好
—>所以如果不愿试错不想折腾, 请跳过下面将程序放入 cron.daily 目录的方法<—

具体动作:

  • 给脚本赋予执行权限
chmod 755 autoUpdateWallpapers.py
  • 把脚本放到 /etc/cron.daily 目录下
sudo mv ./autoUpdateWallpapers.py /etc/cron.daily/autoUpdateWallpaperssudo chown root /etc/cron.daily/autoUpdateWallpapers
sudo chgrp root /etc/cron.daily/autoUpdateWallpapers

脚本放到cron.daily下没有被执行…检查了下面的几个问题:

  1. 放到 cron.*/ 目录下的文件由 run-parts 执行, 所以文件名有一定要求, 如不能带 点(dots) 等, 所以将脚本移动到目标文件夹之后就不要写后缀了;

(检查文件是否符合规范使用命令 run-parts --test /etc/cron.daily/ 在命令输出列表中的才是符合要求的) 详细查看 run-parts 文档

  1. 这个目录下的所有可执行文件的所有者都必须是root, 所以要将脚本的拥有者(owner)改为root

    这是节选的cron 官方文档说明:

    As described above, the files under these directories have to be pass some sanity checks including the following: be executable, be owned by root, not be writable by group or other and, if
    symlinks, point to files owned by root. Additionally, the file names must conform to the filename requirements of run-parts: they must be entirely made up of letters, digits and can only con‐
    tain the special signs underscores (’_’) and hyphens (’-’). Any file that does not conform to these requirements will not be executed by run-parts. For example, any file containing dots will
    be ignored. This is done to prevent cron from running any of the files that are left by the Debian package management system when handling files in /etc/cron.d/ as configuration files (i.e.
    files ending in .dpkg-dist, .dpkg-orig, and .dpkg-new).

  2. 放入 cron.daily/ 文件夹中的文件系统会保证每天执行一次, 具体时间由 crontabanacron 配置情况决定. 配置文件分别为 /etc/crontab/etc/anacrontab .

还是不能成功更换壁纸…那就不借助 cron.daily/ 了, 直接用crontab设置循环任务

  • 将脚本从 cron.daily/ 文件夹移出至其他文件夹, 比如 /usr/bin/ 目录下
  • $HOME 下新建一个shell脚本 autoUpdateWallpapers , 通过shell脚本来调用python程序
#!/bin/sh
python3 /usr/bin/autoUpdateWallpapers.py
  • 使用 crontab -e 将shell脚本写入当前用户的定时任务列表中, 此时时间是明确确定的. 缺点是一旦到了执行时间而此时计算机没有正常工作, 那么此次任务就会被跳过. 相反, 放在 cron.*/ 系列文件夹下的脚本会由 anacron 进行时间间隔的确认, 能进行 “弥补” .
#命令行输入 crontab -e 回车, 在打开的文件中加入下面这行
0 22 * * * /home/ubuntu/autoUpdateWallpapers

再次测试, 图片能正常下载, 但是壁纸还是没有更换

  • 最终在 一个网站的评论 找到了问题所在:

gsettings won’t work from cron, however. you need to set the DBUS_SESSION_BUS_ADDRESS environment >variable in order for gsettings to work. You can do that by adding these two lines before gsettings
PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
– willbradley Jan 13 at 0:25

  • 按照上面所说, 在shell脚本中增加了两条shell命令 (具体含义不是很懂)
#!/bin/shPID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)python3 /usr/bin/autoUpdateWallpapers.py
  • 然后壁纸终于能正常每天自动更换了

Python实用: 让桌面壁纸每日自动更新为必应首页图片相关推荐

  1. Python办公自动化(七)|自动更新不对称表格

    需求分析 现在我们有类似如下一份记录了口袋妖怪名字的分组名单:(未全部展示,实际有A-U组+1个"未分组") 现在有一份更新的名单(仅含名字) 需要根据这份新名单对原来的总表进行更 ...

  2. Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片

    Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片 其实没太大用,就是方便一些,因为现在各个平台之间的图片都不能共享,比如说在 CSDN 不能用简书的图片, ...

  3. github电脑壁纸_GitHub - jadepeng/bing-wallpaper: Bing每日壁纸,自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事...

    Bing每日壁纸 发布一个开源小软件,Bing每日壁纸. 该小软件可以自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事. 欢迎大家下载使用,点star!有问题请留言或者提i ...

  4. github电脑壁纸_GitHub - githubtaotao/bing-wallpaper: Bing每日壁纸,自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事...

    Bing每日壁纸 发布一个开源小软件,Bing每日壁纸. 该小软件可以自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事. 欢迎大家下载使用,点star!有问题请留言或者提i ...

  5. Python——实现Windows桌面壁纸和bing背景的同步

    目的 实现Windows桌面壁纸和bing背景的同步 如何实现 requests(获取url) json(解析对象) os.path(设置图片保存路径以及日志信息) ctypes(设置Windows壁 ...

  6. python定时换桌面壁纸

    使用Python从本地文件夹中直接调取图片,自动定时更换桌面壁纸,于是试了一试,效果贼棒! import random import ctypes import time import os path ...

  7. 使用python定时更换桌面壁纸

    有时候漫画网站看到了一个挺好看的壁纸,就想着换成桌面壁纸,再过几天,又看到了另一个,还想再换,这样就很麻烦,虽说网上有很多程序,但还得下载,注册登录啥的,特别麻烦,今天就教大家用python简单实现这 ...

  8. python自动化:桌面壁纸下载器,满足你对桌面壁纸的无限畅想!

    随着计算机性能的提升,人们对计算机个性化的要求也越来越高了,自己使用的计算机当然要设置成自己喜欢的风格! 对于桌面壁纸有着强烈要求的朋友们有福了,推荐一个微软免费畅玩无限高清壁纸的官网. https: ...

  9. DTK 每日自动更新其 API 文档

    文章目录 楔子: 记录: 更新: 系列地址: 简 述: 记录一下如何更新 DTK 的 API 的 文档手册 楔子: 时间流逝.却总是询问相同的问题:DTK 有没有帮助手册文档? 于是就顺手扔了一个其 ...

  10. python设置windows桌面壁纸

    每天换一个壁纸,每天好心情. # -*- coding: UTF-8 -*- from __future__ import unicode_literals import Image import d ...

最新文章

  1. Linux系统新手学习的11点建议
  2. CentOS 5.3 安装nginx+mysql+php
  3. grid比flex更强大的属性
  4. 超过响应缓冲区限制_Nginx如何限制并发连接数和连接请求数?
  5. 安卓系统按键映射修改
  6. mybatis-plus实现自定义字段修改数据 后续更新CRUD
  7. 【I】ZF2安装 和 创建一个新项目
  8. 键盘上在方向键上面的9个键是干什么的?
  9. SQL Server:关键字搜索
  10. POJ - 2891 中国剩余定理
  11. [文档]CSS中文字体对照表
  12. 新疆财大计算机科学,新疆财经大学计算机科学与工程学院学生参加了多项专业赛事...
  13. 基于wincc的虚拟电梯设计_基于WinCC的电梯PLC控制仿真.doc
  14. iOS Touch ID 简易开发教程
  15. Lenovo 10w 平板评测
  16. iOS Instrument使用之Core Animation(图形性能)
  17. 签名服务器支付系统,基于短签名的电子银行支付认证系统设计与实现
  18. 激活windows系列地址
  19. 计算机网络 路由器的端口ip,教您如何修改路由器LAN端口的IP地址
  20. 从X86架构来源开始:谈CPU

热门文章

  1. C++变量前面加下划线的含义
  2. 老狗——python求中位数
  3. 获取iOS设备的型号(iPhone4,iphone5,iPhone5s......)
  4. VISUAL STUDIO INSTALLER下载速度过慢的解决办法
  5. cad画直线长度与实际不符_cad画直线尺寸不对
  6. 路飞学城python电子书闲鱼_路飞学城-python开发集训-第一章之用户登陆做业
  7. 关于STM32单片机延时微妙(delay_us)函数-hal库
  8. 怎么避开平台多ip检测
  9. Office XP 试用感受
  10. 慧科技:要做小池塘里最大的鱼