$min=49;  # Minimum value of R, G, or B colour
$max=174; # Maximum value of R, G, or B colour
$step=5;  # Amount to step colour by on each step
$sleeptime=15; # Interval in seconds between each step

@start = ($max, $min, $min);
@colour = @start;

while (1) {
        foreach (0..5) {
                my $which = $_ % 3; # Which colour (R, G or B) to change
                my $updown = $_ % 2; # Whether to increase or decrease the colour value
                do {
                        if ($updown == 0) { $colour[$which]+=$step; }
                        if ($updown == 1) { $colour[$which]-=$step; }
                        my $dcopcall=sprintf "dcop kdesktop KBackgroundIface setColor '#%x%x%x' true\n", @colour;
                        system($dcopcall);
                        sleep $sleeptime;
                        } while (($colour[$which] 
>= $min) and ($colour[$which] <= $max));
                }
}