awesome wmでの壁紙変更設定を変更(crontabからDISPLAY番号取得)

awesome wm環境での壁紙自動変更にcrontab経由で feh コマンドを利用しています．

30分ごとに~/Pictures/wp/以下のファイルをダンダムに設定

*/30 * * * * DISPLAY=:0 feh --bg-scale "$(find ~/Pictures/wp/ -type f | shuf -n 1)"

このときXのディスプレイ番号を固定で書いているのですがディスプレイ番号が変わることもあってその時エラーになってしまいます．
ウィンドウマネージャを変更したときもよくなさそう．

ということでcronからユーザのawesome wmのディスプレイ番号を探すようにしてみました．

まずは対象ユーザのawesome wmのプロセス番号を調べます．

$ pgrep -u $(id -u) awesome
2932

/proc/$PID/environ からDISPLAYを探します．

$ cat /proc/2932/environ 2> /dev/null | tr '\0' '\n' | grep ^DISPLAY=:
DISPLAY=:1

カレントユーザのawesome wmのディスプレイ番号が :1 なのが解りました :)

これを組み合わせてこのようにしてみました．これでディスプレイ番号が変わっても大丈夫で，awesome以外のウィンドウマネージャを使ったときには何もしないはず( xargs --no-run-if-empty )です．
同じユーザでawesomeを複数起動した場合は先に起動した方しか反映されないはずですが，あまりそういったことはしないと思うので大丈夫かなと．

*/30 * * * * cat /proc/$(pgrep -u $(id -u) awesome)/environ 2> /dev/null | tr '\0' '\n' | grep ^DISPLAY=: | xargs --no-run-if-empty -I{} sh -c '{} feh --bg-scale "$(find ~/Pictures/wp/ -type f | shuf -n 1)"'

2020-07-17 ADD
fehに -z, --randomize と言うオプションがありました．これを使うとコマンドが2つ減って少しわかりやすく……あまり変わらないか．

*/30 * * * * cat /proc/$(pgrep -u $(id -u) awesome)/environ 2> /dev/null | tr '\0' '\n' | grep ^DISPLAY=: | xargs --no-run-if-empty -I{} {} feh --bg-scale -z ~/Pictures/wp/

環境

$ dpkg-query -W awesome feh procps findutils grep
awesome 4.3-4
feh 3.4.1-1
findutils 4.7.0-1
grep 3.4-1
procps 2:3.3.16-5
$ lsb_release -dr
Description: Debian GNU/Linux bullseye/sid
Release: unstable
$ uname -m
x86_64