awesome wm や i3 wm で feh と Unsplash を使ってランダムな壁紙を設定

Unsplash という画像サービスを知りました．

Beautiful Free Images & Pictures | Unsplash

License | Unsplash

無料で利用できる写真が提供されています．どうもアップロードされた写真を人力で選別しているようです．そのため高品質な写真が集まっているようです．

そして，URL指定だけで使える簡易APIが提供されています．これと feh コマンドを使ってランダムな壁紙を設定してみました．

Unsplash Source | A Simple API for Embedding Free Photos from Unsplash

Unsplash API Documentation | Free HD Photo API | Unsplash

Unsplash の https://source.unsplash.com/ の後ろにパラメーターを追加していって条件に合う画像を取得できるようです．

例えば https://source.unsplash.com/random/likes?linux,penguin このURLではユーザーにLikeされたLinuxやpenguinをキーワードに検索されたランダムな画像が取得できます．
このURLを feh コマンドに渡すと壁紙が設定できました :)

$ feh --bg-max https://source.unsplash.com/random/likes?linux,penguin

最近使っている壁紙設定scriptです．crontabからでも呼べるようにWMのDISPLAY番号を調べて設定するようになっています． PICTURES に壁紙の格納されたディレクトリを設定して，WMNAME を利用するWMのプロセス名に書き換えて使います．壁紙ディレクトリの中の画像をランダムに設定します．

#!/bin/sh

PICTURES="${HOME}/Pictures/wp"
WMNAME="i3"
USERID=$( id -u )
DISPLAYPID=$( pgrep -u "${USERID}" "${WMNAME}"$ )
DISPLAYNO=$( strings /proc/"$DISPLAYPID"/environ | grep ^DISPLAY= )
sh -c "$DISPLAYNO feh --bg-max -z ${PICTURES}"

これを流用して，以下のように書き換えてcrontabから呼ぶようにしてみました．

#!/bin/sh

PICTURESURL="https://source.unsplash.com/random/likes?linux,penguin"
WMNAME="i3"
USERID=$( id -u )
DISPLAYPID=$( pgrep -u "${USERID}" "${WMNAME}"$ )
DISPLAYNO=$( strings /proc/"$DISPLAYPID"/environ | grep ^DISPLAY= )
sh -c "$DISPLAYNO feh --bg-max ${PICTURESURL}"

いつもはJPLのギャラリーや気に入った画像をダウンロードして使っていましたが似たような画像を集めてしまいがちです．ランダムな画像にすることで自分ではあまり選ばないような壁紙が設定されるようになって新鮮な気持ちになれました．

環境

$ dpkg-query -W feh procps binutils
binutils 2.35.2-2
feh 3.6.3-1
procps 2:3.3.17-5
$ lsb_release -dr
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
$ arch
x86_64