Xmonad + nitrogenで壁紙を設定する

  • ~/Pictures/wallpaper/以下にある画像をランダムに表示
  • ディスプレイサイズは1920x1080 + 1200x800
  • 使用する画像サイズは1920x1200
  • WMはXmonad

こういう壁紙設定をしたかった。

壁紙集め


こっから一括ダウンロードさせてもらいました。
ダウンロードにはブラウザのアドオン使いました。
硬派な方はwgetでオプション駆使してください。
【2ch】ニュー速クオリティ:[壁紙]壁紙画像スレ

1920x1200サイズのものを抽出する


1920x1080のディスプレイ使ってるからそれよりサイズ小さいと絵が伸びたりでいや。
1920x1200のものを抽出します。


画像のサイズの取得ですが、PHPにgetimagesize()っていう関数がありました。PHP
PHP: getimagesize - Manual


で、こんな感じのスクリプト書いて、1920x1200サイズのファイルを抽出しました。

<?php
$home = "/home/toshi";
$src_dir = $home . "/Downloads/wallpaper";
$dest_dir = $home . "/Pictures/wallpaper";

$d = opendir($src_dir);
if ($d === false) {
  print("Error");
  exit(1);
}

while (false !== ($file = readdir($d))) {
  if ($file === "." || $file === ".." ) continue;
  $src = $src_dir . "/" . $file;
  $dest = $dest_dir . "/" . $file;
  list($height, $width) = getimagesize($src);
  if ($height === 1920 && $width === 1200) {
    if (copy($src, $dest) === false) {
      print "Error\n";
      exit(1);
    }
  }

}

closedir($d);

nitrogenを使う

壁紙の設定アプリはいくつか試した中からnitrogenというものを使うことにしました。
マルチディスプレイに対応しているのが決め手。


インストールはyumでできます。

 # yum -y install nitrogen


使い方はこう。

 $ nitrogen ~/Pictures/wallpaper

引数はファイルではなくディレクトリです。
これでGUIの設定パネルが立ち上がります。



設定方法はぽちぽちやればわかると思うので割愛します。

nitrogenの設定ファイル

現在の設定は ~/.config/nitrogen/bg-saved.cfg に保持されています。

[xin_0]
file=/home/toshi/Pictures/wallpaper/tmp.jpg
mode=5
bgcolor=#000000

[xin_1]
file=/home/toshi/Pictures/wallpaper/tmp.jpg
mode=5
bgcolor=#000000

この設定を再読込するには--restoreオプションを使います。
だからCUIから設定したいときは壁紙変えたいときはfileの値を変えて

 $ nitrogen --restore


ってやればできます。

shuffleスクリプト

雰囲気はだいたいこんな感じです


nitrogenの設定で壁紙はtmp.jpgを使うようにしておく。
180秒ごとにwallpaperディレクトリからランダムに一枚画像を選び、コピーしてtmp.jpg新しいものにする。
その後すぐnitrogen --restoreで新しいtmp.jpgが読み込まれる。
ファイル名は同じだけど実体は変わっているので画像が切り替わる。


簡単に言うとアンパンマンの顔みたいな感じです。(え

#!/bin/sh
DIR=$HOME/Pictures/wallpaper

while :; do
    NUM_JPG=`ls $DIR | wc -l`
    TIMESTAMP=`date +%s`
    RAND=`expr $TIMESTAMP % $NUM_JPG`
    TMP=`ls $DIR | head -$RAND | tail -1`
    SLEEP=180

    cp -f $DIR/$TMP $DIR/tmp.jpg
    nitrogen --restore

    sleep $SLEEP;
done

名前はshuffle_wallpaperとでもしておきましょうか。

Xmonadの設定


最後にxmonad.hsのstartuphookに登録して、自動で起動するようにします。

myStartupHook = spawn "shuffle_wallpaper"

問題点


設定したは良いけどXmonadだと壁紙とか全然見えねえよっ!