Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / v8plus / bin / lpunlock
CommitLineData
920dae64
AT
1#!/bin/sh
2# \
3exec expect -f "$0" ${1+"$@"}
4
5# This script unhangs a printer which claims it is "waiting for lock".
6# Written by Don Libes. Based on English instructions from Scott Paisley.
7
8# lpunlock figures out if the printer is on a server, and if so which,
9# by looking in the local printcap file. (You can override this by
10# supplying a server name as an additional argument.) It then rlogins
11# to the server, recreates the device and resets the queue via lpc.
12
13# assumes user has root privs on remote host via /.rhosts
14
15# assumes printer is name of device on remote system
16
17proc usage {} {
18 send_user "usage: lpunlock <printer> \[<server>\]\n"
19 send_user "example: lpunlock lw-isg durer\n"
20 exit
21}
22
23if {$argc==0} usage
24set printer [lindex $argv 0]
25
26set client [exec hostname]
27
28if {$argc == 1} {
29 # if no arg2, look in local printcap for info
30 spawn ed /etc/printcap
31 expect "\n" ;# discard character count
32 send "/$printer/\r"
33 for {} {1} {} {
34 expect -re ".*:rm=(\[^:]*):.*\r\n" {
35 set server $expect_out(1,string)
36 break
37 } "\r\n*\\\r\n" { ;# look at next line of entry
38 send "\r"
39 } "\r\n*\n" { ;# no more lines of entry - give up
40 set server $client
41 break
42 }
43 }
44} else {
45 if {$argc == 2} {
46 set server [lindex $argv 1]
47 } else usage
48}
49
50set whoami [exec whoami]
51if {[string match $server $client] && [string match $whoami "root"]} {
52 spawn csh
53 expect "# "
54} else {
55 # login to the print server as root.
56 # Set timeout high because login is slow.
57 set timeout 60
58 spawn rlogin $server -l root
59 expect timeout exit \
60 eof exit \
61 "Password*" {
62 send_user "\ncouldn't login to $server as root\n"
63 exit
64 } "1#*"
65 set timeout 10
66}
67
68# run lpc and 'stop printer'
69send lpc\r ; expect "lpc>*"
70send stop $printer\r ; expect "unknown*" exit \
71 "disabled*lpc>*"
72
73# exit lpc and cd /dev
74send quit\r ; expect "#*"
75send cd /dev\r ; expect "#*"
76
77# figure out major/minor device numbers
78send ls -l /dev/$printer\r ; expect timeout {
79 send_user "\nbad device - couldn't get major/minor numbers\n"; exit
80 } "crw*#*"
81scan $expect_out(buffer) "ls -l %*s %*s 1 root %d, %d" major minor
82
83# delete the lock and the printer device itself
84send rm /var/spool/$printer/lock /dev/$printer\r ; expect #*
85
86# recreate the printer device
87send mknod $printer c $major $minor\r ; expect #*
88
89# run lpc and 'start printer'
90send lpc\r ; expect lpc>*
91send start $printer\r ; expect started*lpc>*
92send quit\r ; expect #*
93
94# logout
95send exit\r ; expect eof
96
97send_user Printer unlocked and restarted.\n