OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [expect/] [example/] [lpunlock] - Rev 1767

Go to most recent revision | Compare with Previous | Blame | View Log

#!../expect -f

# This script unhangs a printer which claims it is "waiting for lock".
# Written by Don Libes.  Based on English instructions from Scott Paisley.

# lpunlock figures out if the printer is on a server, and if so which,
# by looking in the local printcap file.  (You can override this by
# supplying a server name as an additional argument.)  It then rlogins
# to the server, recreates the device and resets the queue via lpc.

# assumes user has root privs on remote host via /.rhosts

# assumes printer is name of device on remote system

proc usage {} {
        send_user "usage: lpunlock <printer> \[<server>\]\n"
        send_user "example: lpunlock lw-isg durer\n"
        exit
}

if $argc==0 usage
set printer [lindex $argv 0]

set client [exec hostname]

if {$argc == 1} {
        # if no arg2, look in local printcap for info
        spawn ed /etc/printcap
        expect "\n"                     ;# discard character count
        send "/$printer/\r"
        for {} 1 {} {
                expect -re ".*:rm=(\[^:]*):.*\r\n" {
                        set server $expect_out(1,string)
                        break
                } "\r\n*\\\r\n" {       ;# look at next line of entry
                        send "\r"
                } "\r\n*\n" {           ;# no more lines of entry - give up
                        set server $client
                        break
                }
        }
} else {
        if {$argc == 2} {
                set server [lindex $argv 1]
        } else usage
}

set whoami [exec whoami]
if {[string match $server $client] && [string match $whoami "root"]} {
        spawn csh
        expect "# "
} else {
        # login to the print server as root.
        # Set timeout high because login is slow.
        set timeout 60
        spawn rlogin $server -l root
        expect  timeout exit \
                eof exit \
                "Password*" {
                        send_user "\ncouldn't login to $server as root\n"
                        exit
                } "1#*"
        set timeout 10
}

# run lpc and 'stop printer'
send lpc\r                              ; expect "lpc>*"
send stop $printer\r                    ; expect "unknown*" exit \
                                                "disabled*lpc>*"

# exit lpc and cd /dev
send quit\r                             ; expect "#*"
send cd /dev\r                          ; expect "#*"

# figure out major/minor device numbers
send ls -l /dev/$printer\r              ; expect timeout {
        send_user "\nbad device - couldn't get major/minor numbers\n"; exit
                                                } "crw*#*"
scan $expect_out(buffer) "ls -l %*s %*s 1 root %d, %d" major minor

# delete the lock and the printer device itself
send rm /var/spool/$printer/lock /dev/$printer\r        ; expect #*

# recreate the printer device
send mknod $printer c $major $minor\r   ; expect #*

# run lpc and 'start printer'
send lpc\r                              ; expect lpc>*
send start $printer\r                   ; expect started*lpc>*
send quit\r                             ; expect #*

# logout
send exit\r                             ; expect eof

send_user Printer unlocked and restarted.\n

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.