spass mit HP druckern
authorMichael 'PoempelFox' Meier <unrz191@legolas.rrze.uni-erlangen.de>
Mon, 11 Oct 2010 12:15:22 +0000 (14:15 +0200)
committerMichael 'PoempelFox' Meier <unrz191@legolas.rrze.uni-erlangen.de>
Mon, 11 Oct 2010 12:15:22 +0000 (14:15 +0200)
pjltest.pl [new file with mode: 0755]

diff --git a/pjltest.pl b/pjltest.pl
new file mode 100755 (executable)
index 0000000..824c856
--- /dev/null
@@ -0,0 +1,88 @@
+#!/usr/bin/perl -w
+
+# Configuration stuff
+# Timeout in seconds
+$mytimeout=10;
+
+# Random nonsense messages
+@nonsensemessages = (
+  #                    |20                 |40
+  "FEED ME WITH LITTLE PUPPIES",
+  "All your base are   belong to us.",
+  "You're printing way too much.",
+  "Paper jam? How does that taste?",
+  "Zum Weiterdrucken   Muenze einwerfen",
+  "Initiating robot    uprising",
+  "E: You have exceededyour print quota"
+);
+
+use IO::Socket;
+$|=1; # Autoflush
+# Parameter 1: Socket
+# Parameter 2: PJL status readback command
+# Returns: printers reply, or undef.
+sub sendpjlstatusreadback($$) {
+  my $sock = $_[0];
+  my $cmd = $_[1];
+  my $res = ''; my $ll;
+  print($sock "\033%-12345X\@PJL $cmd\n\033%-12345X");
+  local $SIG{'ALRM'} = sub {
+    die("Status readback timed out after $mytimeout seconds.\n");
+  };
+  alarm($mytimeout);
+  while (sysread($sock, $ll, 1)) {
+    #printf("0x%02x ", ord(substr($ll, 0, 1)));
+    if ($ll eq "\x0C") { # "form feed" = official End of status.
+      alarm(0);
+      return $res;
+    }
+    #print("'$ll\n'");
+    $res .= $ll;
+  }
+  print("Warning: status read ended with EOF or error\n");
+  alarm(0);
+  return $res;
+}
+
+# Parameter 1: Socket
+# Parameter 2: PJL status readback command
+# Parameter 3: 0 = No Open oder Close, 1 = Send "start of PJL command",
+#              2 = Send "end of PJL commands", 3 = Send both
+# Returns: nothing
+sub sendpjlcommand($$$) {
+  my $sock = $_[0];
+  my $cmd = $_[1];
+  my $tosnd = '';
+  if ($_[2] & 1) {
+    $tosnd .= "\033%-12345X";
+  }
+  $tosnd .= "\@PJL $cmd\n";
+  if ($_[2] & 2) {
+    $tosnd .= "\033%-12345X";
+  }
+  print("Sending command: '$tosnd'\n");
+  print($sock $tosnd);
+}
+
+if (@ARGV != 1) {
+  print("Syntax: $0 [printerip]\n");
+  exit(1);
+}
+$printerad = $ARGV[0];
+my $SOCKET = new IO::Socket::INET(
+              PeerAddr => $printerad,
+              PeerPort => '9100',   # 9100 = jetdirect
+              Proto => 'tcp',
+             );
+unless ($SOCKET) {
+  print("Failed to connect to printer $printerad Port 9100: $!.\n");
+  exit(1);
+}
+print("Connected.\n");
+binmode($SOCKET, ':raw');
+print(sendpjlstatusreadback($SOCKET, "INFO STATUS"));
+print(sendpjlstatusreadback($SOCKET, "INFO PAGECOUNT"));
+#        print($SOCKET "\033%-12345X\@PJL INFO STATUS\r\n\@PJL INFO PAGECOUNT\r\n\@PJL RDYMSG DISPLAY = \"test 2 3 4\"\033%-12345X\r\n");
+sendpjlcommand($SOCKET, 'RDYMSG DISPLAY = "'.$nonsensemessages[rand(@nonsensemessages)].'"', 3);
+close($SOCKET);
This page took 0.119203 seconds and 4 git commands to generate.