トップページ | 過去記事(月別カテゴリー別) | 掲示板 | 野良DEB,RPM | 更新チェック | Twitter
<<  2011.12 >>
SMTWTFS
    123
45678910
11121314151617
18192021222324
25262728293031
 
リンク
その他
  • RSS2.0
  • Credit

  • SEO
    loading

    プライバシーポリシー
    Google

カテゴリー » Linux » Ubuntu December 24, 2011

OS選択画面の壁紙を定期的に変更する(GRUB 2) Ubuntu

ご存知のように、複数のOSが入っているとGRUBはパソコン起動時に選択画面を表示します。その画面の背景をランダムに変えたいなぁ、と思った今日この頃です。

Ubuntu用の簡単なシェルスクリプトを作ってみました。
指定フォルダにある画像のどれかを壁紙にします。
#!/bin/bash # GRUB2の壁紙を変更 # 画像があるフォルダ(png, jpg, tga) IMAGE_DIR="/home/sawa/画像" # 文字色/背景色 # http://www.gnu.org/software/grub/manual/grub.html#color_005fnormal # 背景色はblackで透明になる(black以外だと壁紙が表示されない) COLOR="white/black" # 選択しているOS部分の「文字色/背景色」 # 背景色はblackで透明になる COLOR_SELECTED="black/light-gray" # 今のGRUBは、インターレースPNG・プログレッシブJPEGに未対応 # 表示できない画像は適当に変換する必要がある # 初期設定に戻すには # sudo rm /usr/share/desktop-base/grub_background.sh # sudo update-grub # ----------------------------------------- [ -n "$1" ] && IMAGE_DIR="$1" if [ "$(id -u)" -ne 0 ]; then echo "$0: root only" 1>&2 ; exit 1 elif [[ ! -d "$IMAGE_DIR" || -L "$IMAGE_DIR" ]];then # シンボリックリンクだとパスが合わない可能性が echo "$0: $IMAGE_DIR : No such directory" 1>&2 ; exit 1 fi ini="/usr/share/desktop-base/grub_background.sh" if [ -r "$ini" ]; then source "$ini" && current="$WALLPAPER" fi list=$(find "${IMAGE_DIR}" -type f -iregex '.*\.\(png\|jpe?g\|tga\)$' 2> /dev/null)  list_n=$(wc -l <<< "$list") new=$(shuf -n1 <<< "$list") # 連続で同じ画像になるのを回避する # ファイルが一つしかない場合は気にしない if (( list_n > 1 )); then while [ "x${new}" = "x${current}" ]; do new=$(shuf -n1 <<< "$list") done fi if [ ! -r "$new" ]; then echo "$0: Not Found image file" 1>&2 ; exit 1 fi [ -d "${ini%/*}" ] || mkdir -p "${ini%/*}" echo "WALLPAPER='${new}'" > "$ini" [ -n "$COLOR" ] && echo "COLOR_NORMAL='${COLOR}'" >> "$ini" [ -n "$COLOR_SELECTED" ] && echo "COLOR_HIGHLIGHT='${COLOR_SELECTED}'" >> "$ini" pgrep -f grub-mkconfig > /dev/null && exit # 念の為 update-grub 2> /dev/null || echo "$0: Failed update-grub" 1>&2  
これを何らかの方法で自動実行させます。/etc/cron.daily/ に置くのが一番簡単かな?
★使用例★
$ sudo wget http://linux.ikoinoba.net/file/script/change-grubwall -O /etc/cron.daily/change-grubwall 
$ sudo chmod +x /etc/cron.daily/change-grubwall
$ gksudo gedit /etc/cron.daily/change-grubwall
→ IMAGE_DIR の場所を書き換える
→ お好みで文字色/背景色も

$ sudo /etc/cron.daily/change-grubwall (一度手動で実行して動作確認)
おおよそ一日一回、cron(anacron)がスクリプトを回してくれるはず。再起動のたびに変更したいなら、違う場所に置いたり書いたりテキトーに。

まぁとにかく背景が変われば成功です。
上の拙作スクリプトはUbuntu 11.04以降で使えると思います。それより前で動くかは不明。そういえば…Ubuntu 10.10の頃、moebuntuさんのブログに同じような記事があったっけ。ちゃんと読んでませんけど…大掛かりな作業が必要っぽいですな。

ちなみに、普通に画像を壁紙にするだけなら、/boot/grub/にファイルを置けばいいです(Ubuntu 11.04以降)
02:48 pm | コメントする |

上の記事に対するコメント

1. こで@なごみ大明神 (Website)  2011/12/25 14:50
FedoraもGRUB2になったんですが、真っ黒なんですよねー
そのうち来るかしらとか思って放置してたんですがなかなか来ないのでなんか適当に画像置こうかしら。。。

2. Owner CommentSawa  2011/12/29 00:43
そういえばFedoraもGRUB2になったのでしたっけ。
なぜかGRUBに関しては、Fedoraは保守的でしたねー

ん? 昔のFedoraのgrubって、背景がありましたよね?
grub2への移行で無くなっちゃったのか。

3. 初心者  2016/09/23 14:23
2016年現在、Kona Linux2.0-ubuntu_editionでも、このやり方でうまくいきました。ありがとうございます。
壁紙が定期的に変わる、というのは良いですね。

4. 初心者  2016/09/26 07:43
上の3.の続きですが、OSがsystemdなので、/etc/cron.daily/がちゃんと働いているかどうかわからなかったので、パッケージsystemd-cronをインストールし、cron.serviceをenableにしました。結果オーライだったようです。

5. haru  2018/10/06 19:56
[Unit]
Description=Change Grub-Wall
[Service]
Type=oneshot
ExecStart=/usr/local/bin/change-grubwall
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target


累計:1794090、今日:43、昨日:3684
Created in 0.0352 sec.