記事のディレクトリ
起因
ディープインの下に自動壁紙変更機能がありますが、最大間隔は1時間、自動変更の最大範囲は15枚です。
解決
pythonスクリプトを使用して壁紙を変更してから、crontabを使用してpythonスクリプトを定期的に実行し、壁紙の自動置換機能を完了します。Crontabは、他のshスクリプトやpythonスクリプトを定期的に実行することもできます。また、crontabに連絡するのは初めてです。それを使用して、githubブログを毎日自動的に更新するか、ローカルノートをgithubに毎日自動的にプッシュすることをお勧めします。
Pythonスクリプト
#!/usr/bin/python3
import os
import random
import subprocess
"""
利用linux下的crontab工具实现半小时切换一次,
*/30 * * * * python /xxx/changebackground.py
"""
# 更换壁纸指令,此为deepin更换指令,不代表所有linux发行版更换指令
cmd = "gsettings set com.deepin.wrap.gnome.desktop.background picture-uri "
# 图片目录,用户可自主更换
path = "/home/zss/Pictures/"
# 利用os.listdir()方法获取图片目录下的所有文件名的列表
pic_list = os.listdir(path)
# 确切的文件位置,以及确切的更换指令
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 +"\""
# 执行
pid = subprocess.check_output(["pgrep", "dde-session"]).decode("utf-8").strip()#获取到dde-session的PID具体请看上面的那个问题与回答
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", "")
os.system(real_cmd)
スクリプトはブログで見つかりましたが、元のスクリプトはローカルで実行され、corntabに配置されると機能しませんでした。その理由を以下に説明します。
crontab
crontab -e //进入corntab文件
crontab -l //查看corntan文件
f1 f2 f3 f4f5プログラム
- ここで、f1は分、f2は時間、f3は日、f4は月、f5は曜日です。programは、実行されるプログラムを表します。
- f1が*の場合、プログラムは1分ごとに実行されることを意味し、f2が*の場合、プログラムは1時間ごとに実行されることを意味します。
- f1がabの場合は、a分からb分まで実行されることを意味し、f2がabの場合は、a時間からb時間まで実行されることを意味します。等々。
- f1が* / nの場合、n分ごとに実行されることを意味し、f2が* / nの場合、n時間ごとに実行されることを意味し、残りは類推によって推定できます。
- f1がa、b、c、...の場合、分a、b、c、...で実行されることを意味し、f2がa、b、c、...の場合、それは時間a、b、c ...などで実行されます。
無効な解決策
- すべてのファイルは絶対パスである必要があります
- たとえば、/ usr / bin / pythonなどのPythonコマンドにも絶対パスを使用する必要があります
- shファイルが無効な場合は、フォルダに入ってから実行してください。/test.sh
- 壁紙を変更するためのdeepinについては、次のコードに注意する必要があります。特定の理由については、コンピューターの壁紙をPythonクローラー+ Crontabに自動的に置き換えるを参照してください。
pid = subprocess.check_output(["pgrep", "dde-session"]).decode("utf-8").strip()#获取到dde-session的PID具体请看上面的那个问题与回答
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", "")