Linuxユーザの立場から、役立つ情報や困ったときの解決方法を分かりやすく、かつ簡潔に記事にまとめています。主に、Ubuntu 8.04(→9.04)やCentOS 5.2(→5.3)で確認したことですが、他のディストリビューションでも応用できると思います。内容は(1)設定ファイルの書き方(2)役立つソフトウェア紹介やインストール方法(3)便利なコマンドの使い方や活用例(4)困ったときの解決方法です。このページの末尾にキーワード別で記事を分類してあります。また、真上の「ブログ検索」フォームからブログ内の記事を検索できます。

ラベル スクリプト の投稿を表示しています。 すべての投稿を表示
ラベル スクリプト の投稿を表示しています。 すべての投稿を表示

2008年11月23日日曜日

壁紙をランダムに変更するスクリプト このエントリーを含むはてなブックマーク

本記事では、Ubuntuで壁紙をランダムに変更するスクリプトを紹介する。

このスクリプトは、Ubuntuでなくても、gnomeをウィンドウマネージャとして使っているならば利用できる(Ubuntuでgnomeを使っていなかったら使えない)。

設定

スクリプトを実行する前に、画像ファイルを置くためのディレクトリの作成が必要です。 ~/picsにジャンル別に画像ファイルを入れるディレクトリを作成しておきます。下の例では、cat, nature, airplane, carの4つのディレクトリを作成しています。それらのディレクトリの下にさらにサブディレクトリを作成してもOKです。ディレクトリの名前は任意です。

$ cd ~/pics
$ ls
cat  nature  airplane  car
$ cd nature
$ ls
liver mountain sea foreast
ちなみに、~/picsを別のディレクトリにしたいときは、下のスクリプトの$dirを編集すればOKです。

処理内容

スクリプトを実行すると、~/pics以下のディレクトリをランダムに下って行き、jpg形式の画像ファイルをランダムに選んで壁紙に設定します。

使用方法

スクリプトファイルの名称(任意に指定して良い)をchwpaper.plにするとき、まず実行可能ファイルにする。

$ chmod u+x chwpaper.pl

そして、実行する。

$ ./chwpaper.pl

背景画像を指定したいときは、スクリプトを実行する場所からの相対PATHあるいは絶対PATHで画像ファイルを指定します。

$ ./chwpaper.pl   goo/foo/boo/hoge.jpg

gcongtool-2の説明

壁紙の設定は、gconftool-2で行っている。2つ目のgconftool-2では、壁紙の貼り付け方を設定している。貼り付け方は、

  • scaled(等幅サイズ変更)、
  • stretched(フルスクリーン)、
  • centered(中央に配置)、
  • wallpaper(サイズ均等、並べて表示)
の4通りから選べる。

#!/usr/bin/perl -w
#Usage: $ chwpaper.pl
use strict;
use Cwd;

my $wd=Cwd::getcwd();
my $dir = "$ENV{HOME}/pics";
$dir=$1 if $dir =~ m!(.+)\/$!;
chdir $dir or die "cannot chdir $dir: $!";

while (1) {
        my @dirlist;
        foreach (<*>) {
                push @dirlist, $_  if -d $_;
        }
        last unless $#dirlist >= 0;

    # Note:     
        # 0 <= rand($#dirlist) <= $#dirlist
        # $#dirlist = the length -1
        $dir = "$dir" . "/" . "$dirlist[int(rand($#dirlist))]";
        chdir $dir or die "cannot chdir $dir: $!";
}

my @imglist=<*.jpg>;
die "picture not found: $!" unless ($#imglist >= 0);
my $img=$imglist[int(rand($#imglist))];
my $path_img=$dir . "/" . $img;
# Overwrite selected_img if specified.
if ($#ARGV == 0) {
        $_=$ARGV[0];
        unless (-e $_) {
                $_ = $wd . "/" . $ARGV[0];
                die "File not found: $ARGV[0]" unless -e $_;
        }

         $path_img=$_;
         $img=$1 if m!([^\/]*)$!;
}

print "\n$img\n";
system "gconftool-2 --type string --set '/desktop/gnome/background/picture_filename'  \"$path_img\" ";
system "gconftool-2 --type string --set '/desktop/gnome/background/picture_options' stretched";

チップス

~/.bashrcにこのスクリプトを記述しておくと、端末を起動する度にこの壁紙をランダムに変更することができる。 例えば、/usr/local/binにこのスクリプトを置いておくとすると、次の1行を~/.bashrcの末尾に挿入すれば良い。
/usr/local/bin/chwpaper.pl
また、fortuneをインストールし、同じように~/.bashrcに記述すると、端末を起動する度に気の利いた言葉がランダムに表示されるようになる。
# apt-get install fortune-mod  <---インストール

次のように.bashrcに記述する。

/usr/games/fortune
/usr/local/bin/chwpaper.pl

2008年11月21日金曜日

一括で更新pingを打つスクリプト このエントリーを含むはてなブックマーク

本記事は、複数のpingサーバに一括で更新pingを打つスクリプトを紹介する。

ブログに記事を投稿した際に、それをpingサーバにping送信を行うことでブログの更新を知らせる。bloggerでは、pingの送り先はWeblogs.comだけなので、他のpingサーバに更新pingを送ることができない。そこで、更新pingを送るスクリプトをperlで作りました。

スクリプトの紹介

他の多くのサイトで同様のスクリプトが公開されていますが、私はプロキシ経由でネットに接続しているので、プロキシの指定が別途必要になります。といっても、大したことは何もしないのですが、プロキシ指定をしたスクリプトは次のようになります。

このように、「あなたの使用しているプロキシ」のところにプロキシを指定します。そして、@pingserverに更新pingを送りたいサーバを列挙します。ここでは、例としてpingooとかblogpeopleなどいくつかのpingサーバを書いてあります。そして、「あなたのブログの名前」と「あなたのブログのURL」をそれぞれ指定します。これで、スクリプトは完成です。

ちなみに、プロキシを使わない場合のスクリプトは次のようになります。

XMLRPC::Liteモジュールのインストール

上で紹介したスクリプトでは、XMLRPC::Liteモジュールを使用しています。このモジュールをインストールするには、以前の記事「CPANの設定」に従ってCPANの初期設定を行います。そして、次の手順でモジュールをインストールします。

cpanを起動します。

$ cpan

XMLRPC::Liteをインストールします。

cpan> install XMLRPC::Lite

cpanを終了します。

cpan> quit

スクリプトの実行

上で紹介したスクリプトをテキストファイルに書きます。そのファイル名を簡単のためblgping.plとして、ホームディレクトリの下のbinに置いておきます。

$ mv ~/bin
$ ls
blgping.pl
$ chmod u+x blgping.pl ←ファイルの所有者に実行可能権限を与えます。

以上で、blgping.plを実行できるようになります。ちなみに、~/binにPATHを通しておけば、どこからでもそのスクリプトファイルを実行できるようになるので、便利です。

2008年10月26日日曜日

ファイルディスクリプタとリダイレクト このエントリーを含むはてなブックマーク

本記事では、シェルスクリプトでの標準入出力のリダイレクトについてまとめる。

標準出力はfile.txtに書き込まれる。(標準エラー出力は画面に表示される)

$ command1 >  file.txt

標準出力はfile.txtの末尾に追加する形で書き込まれる。

$ command1 >>  file.txt

標準出力はfile.txtに書き込まれ、標準エラー出力はerr.txtに書き込まれる。

$ command1 > file.txt 2> err.txt

標準出力とエラー出力はともにfile.txtに書き込まれる。

$ command1 > file.txt  2>&1

(注)最初に>file.txtが評価される。command1の標準出力がfile.txtに書き込まれる。次に、command1の標準エラー出力が標準出力に向けられる。この時点で標準出力=file.txtである!ので、標準エラー出力はfile.txtに書き込まれる。

標準エラー出力は画面に表示され、標準出力はfile.txtに出力される。

$ command1 2>&1 > file.txt

(注)最初に2>&1が評価される。そのとき、command1の標準エラー出力は標準出力に向けられる。この時点で標準出力=画面である!ことに注意する。その後に、command1の標準出力はfile.txtに書き込まれる。

まず、command1の標準出力がcommand2の標準入力に結合される。そして、command1の標準エラー出力は標準出力に向けられる。すなわち、標準出力とエラー出力がともにcommand2に渡される。

$ command1 2>&1 | command2

(注)まず初めにパイプでコマンド同士の入出力が結合される!その後にリダイレクトが評価される。

参考サイト:「シェルを使おう -応用編-」に非常に分かりやすい説明が載っている。

キーワード

キーワード別に記事を分類してあります。クリックすると各キーワードに該当する記事たちが表示されます。

過去の記事

筆者について

自分の写真
趣味はコンピュータ、音楽、写真などです。