Qtileを使用して10分ごと(または任意の時間)デスクトップの壁紙を変更したいと思います。現在の壁紙を設定するbashで書かれたスクリプトがありますが、feh
Qtileが複数回起動されると(ログアウト、ログイン)、スクリプトの複数のインスタンスがバックグラウンドで実行されるため、これは理想的ではありません。
だからこれをQtileの設定に実装したいと思います。
Screen
Qtileを使用すると、プロパティを介してオブジェクトの壁紙を設定できますwallpaper_image
。また、これを設定できるスクリプトシェルのコマンドもあります。
したがって、必要なのは(もちろん、OS全体を停止せずに)10分ごとに実行して設定するPython関数です。私は何をすべきですか?
答え1
次のコードスニペットを使用してこれを正常に達成しました。
import os
import random
from libqtile import qtile
from typing import Callable
from settings import WALLPAPERS_PATH
class Timer():
def __init__(self, timeout: int, callback: Callable) -> None:
self.callback = callback
self.timeout = timeout
self.call()
def call(self) -> None:
self.callback()
self.setup_timer()
def setup_timer(self) -> None:
self.timer = qtile.call_later(self.timeout, self.call)
def set_random_wallpaper() -> None:
wallpapers = [
os.path.join(WALLPAPERS_PATH, x) for x in os.listdir(WALLPAPERS_PATH) if x[-4:] == ".jpg"
]
wallpaper = random.choice(wallpapers)
set_wallpaper(wallpaper)
def set_wallpaper(file_path: str) -> None:
for screen in qtile.screens:
screen.cmd_set_wallpaper(file_path, 'fill')
Timer
自動的に設定するクラスを作成しました。オブジェクトを作成すると、Timer
コールバックがトリガされるとオブジェクトは自動的に再起動されます。また、作成時にコールバックを呼び出しますが、必要に応じて簡単に変更できます。
起動時に実行するには:
@hook.subscribe.startup_once
def setup_wallpaper_timer():
wallpaper.Timer(
WALLPAPER_TIMEOUT_MINUTES * 60, wallpaper.set_random_wallpaper)