文章目录起因解决方法python脚本crontab无效解决方法个人文件配置示例 起因 deepin下有自动更换壁纸功能,但是最多间隔1小时且最多自动更换范围为15张图片。 解决方法 用python脚本更换壁纸,再利用crontab定时执行python脚本完成自动更换壁纸功能。crontab也可定时执行其他sh脚本、python脚本。我也是第一次接触crontab,后将其用于github博客每天自动更新,或者每天自动把本地笔记推到github都是不错的选择。 python脚本 #!/usr/bin/python3 import os import random import subprocess 【起因】 在Deepin操作系统中,内置的自动更换壁纸功能虽然方便,但存在一些限制,比如最多只能设置每小时更换一次壁纸,并且壁纸的选取范围最多只有15张图片。这对于喜欢频繁更换壁纸以保持桌面新鲜感的用户来说,可能不太够用。 【解决方法】 为了解决这个问题,可以采用自定义的方法,即编写一个Python脚本来更换壁纸,然后利用Linux的定时任务工具`crontab`来定时执行这个脚本,从而实现更灵活的壁纸更换频率和选择范围。 **Python脚本解析** 脚本的主要工作是随机选择一张图片并将其设置为壁纸。它导入了`os`, `random`, 和 `subprocess`三个Python库。`os`库用于处理文件和目录操作,`random`库用于随机选择图片,`subprocess`库则用于执行系统命令。 ```python # 脚本中定义了更换壁纸的命令,这通常是Deepin系统特有的命令,其他Linux发行版可能会有所不同 cmd = "gsettings set com.deepin.wrap.gnome.desktop.background picture-uri" # 指定图片所在的目录 path = "/home/zss/Pictures/" # 获取该目录下所有图片文件的列表 pic_list = os.listdir(path) # 随机选择一张图片,并确保它是支持的格式(如.jpg或.png) while(True): real_path = path + str(random.choice(pic_list)) if(real_path[-3:]=="jpg" or real_path[-3:]=="png"): break # 构建完整的更换壁纸的命令,并执行 real_cmd = cmd + "\"" + real_path + "\"" os.system(real_cmd) ``` **Crontab的使用** `crontab`是Linux下的定时任务调度器,可以按照设定的时间间隔执行指定的程序或脚本。要设置定时任务,首先需要通过`crontab -e`命令编辑crontab文件。在文件中,每一行都代表一个定时任务,其格式如下: ``` f1 f2 f3 f4 f5 command ``` - `f1`表示分钟(0-59) - `f2`表示小时(0-23) - `f3`表示日期(1-31) - `f4`表示月份(1-12) - `f5`表示星期(0-7,0和7均代表周日) - `command`是要执行的命令或脚本 例如,如果想每半小时更换一次壁纸,可以设置`*/30 * * * * python /xxx/changebackground.py`,这里的`/xxx/changebackground.py`是你的Python脚本的绝对路径。 **无效解决方法** 有时,将Python脚本放入crontab中运行可能会遇到问题。这通常是因为环境变量和执行上下文的不同。例如,crontab执行时可能没有正确的环境变量,比如`DBUS_SESSION_BUS_ADDRESS`,这是Deepin系统中设置壁纸所必需的。因此,需要在脚本中添加如下代码来获取并设置这个环境变量: ```python # 获取dde-session的PID pid = subprocess.check_output(["pgrep", "dde-session"]).decode("utf-8").strip() # 设置DBUS_SESSION_BUS_ADDRESS环境变量 cmd = "grep -z DBUS_SESSION_BUS_ADDRESS /proc/" + pid + "/environ|cut -d= -f2-" os.environ["DBUS_SESSION_BUS_ADDRESS"] = subprocess.check_output(['/bin/bash', '-c', cmd]).decode("utf-8").strip().replace("\0", "") ``` 此外,确保在crontab中使用脚本的绝对路径,对于.sh脚本,可能需要先切换到脚本所在目录再执行,如`cd /path/to/folder && ./test.sh`。 总结起来,通过编写Python脚本和配置`crontab`,我们可以突破Deepin默认壁纸更换功能的限制,实现更自由的壁纸更换策略。同时,这也是学习和理解Linux自动化任务管理的一个好例子。
- 粉丝: 7
- 资源: 995
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0