Qtileは10分ごとに壁紙を変更します。

Qtileは10分ごとに壁紙を変更します。

Qtileを使用して10分ごと(または任意の時間)デスクトップの壁紙を変更したいと思います。現在の壁紙を設定するbashで書かれたスクリプトがありますが、fehQtileが複数回起動されると(ログアウト、ログイン)、スクリプトの複数のインスタンスがバックグラウンドで実行されるため、これは理想的ではありません。

だからこれをQtileの設定に実装したいと思います。

ScreenQtileを使用すると、プロパティを介してオブジェクトの壁紙を設定できます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)

関連情報