Qtile 每 10 分钟更换一次壁纸

Qtile 每 10 分钟更换一次壁纸

我想用 Qtile 每 10 分钟(或任何其他任意时间)更改桌面壁纸。我目前有一个用 bash 编写的脚本,用于feh设置壁纸,但这并不理想,因为如果 Qtile 启动多次(注销、登录),则该脚本的多个实例将在后台运行。

所以,我想在 Qtile 的配置中实现这个。

ScreenQtile 允许您通过属性设置对象的壁纸wallpaper_image。它还有一个用于其脚本外壳的命令,允许您对其进行设置。

所以,我需要的是一个每 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)

相关内容