Systemd user timer
Systemd user timerを使ってBing壁紙を定期的にダウンロードして壁紙を変更してみます。
Hyprland/CaelestiaのSchemeをdynamicに設定することで、壁紙画像の色合いに連動してGUIのテーマ色が自動で調整されます。
https://wiki.archlinux.org/title/Systemd/Timers
環境
- CachyOS
- Hyprland
- Caelestia
- Hyprland
構築
定期的に実行する処理の作成
- Bing壁紙をダウンロード
今日の壁紙画像を~/Pictures/Wallpapers/bing/にダウンロードして壁紙に設定します。
Systemd user timerは登録したユーザアカウントで実行され、環境変数が引き継がれるらしい。/home/arch/bin/download_bing_wallpaper.py #!/usr/bin/env python
import requests
import json
import subprocess
import shutil
import os
REGION = 'en-US'
BASE_URL = f'https://bing.biturl.top/?resolution=UHD&format=json&index=0&mkt={REGION}'
BASE_PATH = os.getenv('HOME') + '/Pictures/Wallpapers/bing/'
u = requests.get(BASE_URL).json()
r = requests.get(u['url'], stream=True)
name = u['url'].split('=')[-1]
filename = os.path.join(BASE_PATH, name)
with open(filename, 'wb') as file:
for chunk in r.iter_content(chunk_size=8192):
file.write(chunk)
subprocess.run(["caelestia", "wallpaper", "-f", filename])chmod 755 /home/arch/bin/download_bing_wallpaper.py
ユニットファイル
- サービスユニット
/home/arch/bin/download_bing_wallpaper.pyを実行します。~/.config/systemd/user/download-bing-wallpaper.service [Unit]
Description=Download Bing wallpaper
[Service]
Type=oneshot
ExecStart=/home/arch/bin/download_bing_wallpaper.py
[Install]
WantedBy=default.target - タイマーユニット
毎日5時に実行します。~/.config/systemd/user/download-bing-wallpaper.timer [Unit]
Description=Run daily
[Timer]
OnCalendar=*-*-* 05:00:00
Persistent=true
[Install]
WantedBy=timers.targetシステムの電源が切られていたなどの理由で、最後の起動時間を過ぎていた場合、すぐに実行されます (Persistent=true オプション)
ユーザタイマーの登録
- ユーザタイマーを有効化
systemctl --user daemon-reload
systemctl --user enable --now download-bing-wallpaper.timer - スケジュールされたユーザタイマーを確認
systemctl --user list-timers --all
NEXT LEFT LAST PASSED UNIT ACTIVATES
Sun 2025-12-21 05:00:00 JST 4min 25s - - download-bing-wallpaper.timer download-bing-wallpaper.service
1 timers listed.
Comments