deepinはcrontabを使用して壁紙を自動的に変更します

起因

ディープインの下に自動壁紙変更機能がありますが、最大間隔は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 ...などで実行されます。

無効な解決策

  1. すべてのファイルは絶対パスである必要があります
  2. たとえば、/ usr / bin / pythonなどのPythonコマンドにも絶対パスを使用する必要があります
  3. shファイルが無効な場合は、フォルダに入ってから実行してください。/test.sh
  4. 壁紙を変更するための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", "")

個人ファイルの設定例

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/zss192/article/details/105493009