← Back to team overview

sslug-teknik team mailing list archive

Printerkø-administration

 

Der var nogle stykker der spurgte efter et script til at holde øje med
printerkøer, inden jeg tog på ferie for et par uger siden... her kommer
det så :)

--- start print.pl ---
#!/usr/bin/perl

use CGI qw/:standard/;
$ENV{PATH} = "/usr/bin";
undef $ENV{ENV};

# Printernavne - kun til pynt
$names{lp} = "HP Deskjet 670C";
$names{hpl4} = "HP LaserJet 4";

print header, start_html("Printerkø-editor"), h1("Printerkø-editor"), hr, "\n";
open PRINTCAP, "/etc/printcap" or RIP("Kan ikke åbne /etc/printcap");

foreach (<PRINTCAP>) 
  {
  if (/^(\w+):/)
    {
    push @printers, $1;
    }
  }

if ($kill = param("kill")) 
  {
  $< = 0;
  $> = 0;
  $( = 0;
  $) = 0;
  $lp = param("lp");
  ($kill) = ($kill =~ /^(\d+)/);
  ($lp) = ($lp =~ /^(\w+)/);
  $command = "lprm -P $lp $kill";
  $_ = `$command`;
  if (/dequeue/)
    {
    print h3("Afbr&oslash;d job nr. $kill p&aring; $lp-k&oslash;en."), hr, "\n";
    }
  else
    {
    print h3("Kunne ikke afbryde job nr. $kill p&aring; $lp-k&oslash;en."), hr, "\n";
    }
  }

if (scalar @printers > 0) 
  {
  print h4("Fandt " . scalar @printers . " printere."), hr, "\n";
  }
else
  {
  RIP(h2("Fandt ingen printere!") . "\n");
  }

foreach $printer (@printers) 
  {
  print h3("K&oslash;navn: $printer, Printernavn: $names{$printer}"), "\n";
  open LPQ, "lpq -P $printer |";
  print h4("Printerstatus: " . <LPQ>);
  if (<LPQ>) 
    {
    print "<table border=1>\n";
    print "<tr><td>Nummer i k&oslash;en:</td><td>Ejer:</td><td>Jobnummer:</td><td>Filnavn:</td><td>St&oslash;rrelse</td><tr>\n";
    foreach (<LPQ>)
      {
      ($rank,$owner,$job,$file,$size) = /(.{7})(.{11})(.{5})(.{38})(.+)/;
      $rank =~ s/^(\d+).*/$1/;
      $owner =~ s/^(\w+).*/$1/;
      $job =~ s/^(\d+).*/$1/;
      $file =~ s/\ *$//;
      $size =~ s/\ *$//;
      print "<tr><td>$rank</td><td>$owner</td><td>$job</td><td>$file</td><td>$size</td><td><a href=\"print.pl?kill=$job&lp=$printer\">Kill</a></td></tr>\n";
      }
    print "</table>\n";
    }
  print hr;
  } 

sub RIP {
  die h1(join(" ", @_)) . "\n" . end_html;
  }
--- end print.pl ---

Programmet skal være suid root for at kunne myrde printerjobs...


Jesper

/---------------------------------------\
| "We know where we want to go today!!" |
|    Go Linux! http://www.linux.org/    |
|---------------------------------------|
| Help us convince the US government to |
| allow strong cryptography...          |
|                 - www.distributed.net |
\---------------------------------------/