systemdのタイマーで壁紙をランダムに変更する
systemdの勉強も兼ねてLinuxで壁紙をランダムで変更するユニットファイルを作りました。似たような拡張機能はあるのですが、Gnome Shellのバージョンアップで使えなくなることがよくあるので、環境に依存せず使えるように自分で作ることにしました。
コマンド本体はgsetting
を使用しています。他環境の場合はfeh
等に置き換えてください。
$ gsettings set org.gnome.desktop.background picture-uri file:///home/user/Pictures/Background/file01.png
ユニットファイル
ユニットファイルはユーザー環境(.config/systemd/user/
)に作成します。システム環境(/etc/systemd/system/
)に置いても大丈夫です。ユニット名は任意ですが、.servce
と.timer
で一致している必要があります。
.service
のExecStart
に実行するコマンドを記載します。今回はワンライナーで実行していますが、外部のシェルスクリプトを実行することも可能です。
実行頻度は.timer
で設定します。下記の例では起動5分後(OnBootSec=5min
)と前回実行から5分後(OnUnitActiveSec=5min
)に設定しています。
[Unit]
Description=Random wallpaper switch
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'gsettings set org.gnome.desktop.background picture-uri file://"$(ls ~/Pictures/Background/* | shuf | head -n 1)"'
# ExecStart=/home/user/bin/wallpapa-switch.sh
[Unit]
Description=Random wallpaper switch
[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
[Install]
WantedBy=default.target
有効化
ユニットファイルを作成したらdaemon-reload
で設定を適用してください。
動作確認のため、start *.service
でサービスを1回だけ実行します。正しく設定できていれば壁紙が変更されるはずです。
問題なければenable *.timer
を実行して再起動すると有効化されます。
$ systemctl --user daemon-reload
$ systemctl --user start wallpaper-switch.service
$ systemctl --user enable wallpaper-switch.timer
ログ確認
systemctl list-timers
やjournalctl
で実行履歴を確認することができます。
$ journalctl --user -f -u wallpaper-switch.service
12月 09 14:36:05 hostname systemd[1141]: Starting Random wallpaper switch...
12月 09 14:36:05 hostname systemd[1141]: Finished Random wallpaper switch.
12月 09 14:41:55 hostname systemd[1141]: Starting Random wallpaper switch...
12月 09 14:41:55 hostname systemd[1141]: Finished Random wallpaper switch.
12月 09 14:47:05 hostname systemd[1141]: Starting Random wallpaper switch...
12月 09 14:47:05 hostname systemd[1141]: Finished Random wallpaper switch.
12月 09 14:53:05 hostname systemd[1141]: Starting Random wallpaper switch...
12月 09 14:53:05 hostname systemd[1141]: Finished Random wallpaper switch.
12月 09 14:59:05 hostname systemd[1141]: Starting Random wallpaper switch...
12月 09 14:59:05 hostname systemd[1141]: Finished Random wallpaper switch.
$ systemctl --user list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Sat 2023-12-09 15:04:05 JST 1min 17s Sat 2023-12-09 14:59:05 JST 3min 42s ago wallpaper-switch.timer wallpaper-switch.service
...
参考
https://wiki.archlinux.jp/index.php/Systemd
https://wiki.archlinux.jp/index.php/Systemd/タイマー
https://github.com/zoqaeski/systemd-user-units/blob/master/user/wallpaper.service
Discussion