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)