#/bin/sh
CUPS_CONF="/etc/config/cups/cupsd.conf"
TEMP="/tmp/cupsd.conf"
LPADMIN="/usr/local/sbin/lpadmin"
BACKEND_USB="/usr/lib/cups/backend/usb"
#LPADMIN="./systemv/lpadmin"
#BACKEND_USB="./backend/usb"
set_config()
{
[ ! -d /var/spool/cups ] && /bin/mkdir -p /var/spool/cups
[ ! -d /var/run/cups ] && /bin/mkdir -p /var/run/cups
if [ -f $CUPS_CONF ]; then
/bin/cat $CUPS_CONF|/bin/grep "BrowseRemoteProtocols" &> /dev/null
[ $? = 0 ] && return
fi
/bin/mkdir -p /etc/config/cups
echo "#" > /etc/config/cups/cupsd.conf
echo "# \"$Id: cupsd.sh,v 1.24 2011-11-23 04:52:13 aixchou Exp $\"" >> /etc/config/cups/cupsd.conf
echo "#" >> /etc/config/cups/cupsd.conf
echo "# Sample configuration file for the CUPS scheduler. See \"man cupsd.conf\" for a" >> /etc/config/cups/cupsd.conf
echo "# complete description of this file." >> /etc/config/cups/cupsd.conf
echo "#" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Log general information in error_log - change \"warn\" to \"debug\"" >> /etc/config/cups/cupsd.conf
echo "# for troubleshooting..." >> /etc/config/cups/cupsd.conf
echo "LogLevel warn" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Administrator user group..." >> /etc/config/cups/cupsd.conf
echo "SystemGroup administrators" >> /etc/config/cups/cupsd.conf
echo "ServerAlias *" >> /etc/config/cups/cupsd.conf
echo "PreserveJobHistory Yes" >> /etc/config/cups/cupsd.conf
echo "Include /etc/config/cups/cupsd.conf.maxjobs" >> /etc/config/cups/cupsd.conf
echo "Include /etc/config/cups/cupsd.conf.allowip" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Only listen for connections from the local machine." >> /etc/config/cups/cupsd.conf
echo "Listen *:631" >> /etc/config/cups/cupsd.conf
echo "Listen /var/run/cups/cups.sock" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Show shared printers on the local network." >> /etc/config/cups/cupsd.conf
echo "Browsing On" >> /etc/config/cups/cupsd.conf
echo "BrowseOrder allow,deny" >> /etc/config/cups/cupsd.conf
echo "BrowseAllow all" >> /etc/config/cups/cupsd.conf
echo "BrowseLocalProtocols CUPS" >> /etc/config/cups/cupsd.conf
echo "BrowseRemoteProtocols none" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Default authentication type, when authentication is required..." >> /etc/config/cups/cupsd.conf
echo "DefaultAuthType Basic" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Restrict access to the server..." >> /etc/config/cups/cupsd.conf
echo "#" >> /etc/config/cups/cupsd.conf
echo "# Order allow,deny" >> /etc/config/cups/cupsd.conf
echo "# allow all" >> /etc/config/cups/cupsd.conf
echo "#" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Restrict access to the admin pages..." >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " Order allow,deny" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Restrict access to configuration files..." >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order allow,deny" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Set the default printer/job policies..." >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # Job-related operations must be done by the owner or an administrator..." >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo " Require user @OWNER @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # All administration operations require an administrator to authenticate..." >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # All printer operations require a printer operator to authenticate..." >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # Only the owner or an administrator can cancel or authenticate a job..." >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo " Require user @OWNER @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "# Set the authenticated printer/job policies..." >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # Job-related operations must be done by the owner or an administrator..." >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @OWNER @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # All administration operations require an administrator to authenticate..." >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # All printer operations require a printer operator to authenticate..." >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " # Only the owner or an administrator can cancel or authenticate a job..." >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo " AuthType Default" >> /etc/config/cups/cupsd.conf
echo " Require user @OWNER @SYSTEM" >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo " Order deny,allow" >> /etc/config/cups/cupsd.conf
echo " " >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "" >> /etc/config/cups/cupsd.conf
echo "#" >> /etc/config/cups/cupsd.conf
echo "# End of \"$Id: cupsd.sh,v 1.24 2011-11-23 04:52:13 aixchou Exp $\"." >> /etc/config/cups/cupsd.conf
echo "#" >> /etc/config/cups/cupsd.conf
echo "MaxJobsPerPrinter 500" > /etc/config/cups/cupsd.conf.maxjobs
echo "" > /etc/config/cups/cupsd.conf.allowip
echo " Order allow,deny" >> /etc/config/cups/cupsd.conf.allowip
echo " allow all" >> /etc/config/cups/cupsd.conf.allowip
echo "" >> /etc/config/cups/cupsd.conf.allowip
}
cups_del_all_printers()
{
for i in 1 2 3 4 5 6 7; do
/usr/local/sbin/lpstat -t|/bin/grep printer|/bin/cut -d' ' -f2|xargs /usr/local/sbin/lpadmin -x > /dev/null 2>&1
done
/bin/rm -f /var/log/cups/* 2> /dev/null
}
cups_del_printer()
{
index="$1"
[ "$index" = "1" ] && index=""
local printer=`/sbin/getcfg "Printers" "Name$index"`
$LPADMIN -x $printer 2> /dev/null
}
add_bonjour_printer()
{
index="$1"
[ "$index" = "1" ] && index=""
/sbin/getcfg "Bonjour Service" "PRINTER$index" > /dev/null 2>&1
if [ $? != 0 ]; then
/sbin/setcfg "Bonjour Service" "PRINTER$index" "1"
local name=`/sbin/getcfg "Printers" "Name$index" -d "printer$index"`
/sbin/setcfg "Bonjour Service" "PRINTER Service Name$index" "$name"
fi
}
cups_add_printer()
{
index="$1"
[ "$index" = "1" ] && index=""
local phy_exist=`/sbin/getcfg "Printers" "Phy exist$index"`
#echo "index = $index, phy_exit = $phy_exist"
[ "x$phy_exist" = "x" ] || [ "$phy_exist" = "0" ] && return
local printer=`/sbin/getcfg "Printers" "Name$index" -d "printer$index"`
local printer_model=`/sbin/getcfg "Printers" "Model$index"`
local printer_sn=`/sbin/getcfg "Printers" "SN$index" -d "unknow"`
if [ "$printer_sn" != "unknow" ]; then
local printer_uri=`$BACKEND_USB 2> /dev/null|/bin/grep "$printer_model"|/bin/grep "$printer_sn"|/bin/grep -v FAX|/bin/cut -d ' ' -f 2`
else
local printer_uri=`$BACKEND_USB 2> /dev/null|/bin/grep "$printer_model"|/bin/grep -v FAX|/bin/cut -d ' ' -f 2`
fi
if [ "$printer_uri" = "" ]; then
sleep 2
if [ "$printer_sn" != "unknow" ]; then
printer_uri=`$BACKEND_USB 2> /dev/null|/bin/grep "$printer_model"|/bin/grep "$printer_sn"|/bin/cut -d ' ' -f 2`
else
printer_uri=`$BACKEND_USB 2> /dev/null|/bin/grep "$printer_model"|/bin/cut -d ' ' -f 2`
fi
[ "$printer_uri" = "" ] && echo "can't get printer uri!" && exit 1
fi
#echo "printer = $printer uri = $printer_uri"
$LPADMIN -p $printer -v $printer_uri -o printer-error-policy=retry-job -E
add_bonjour_printer $index
}
start()
{
set_config
/usr/sbin/cupsd -c /etc/config/cups/cupsd.conf
#add or delete printers
for i in 1 2 3 4 5 6 7; do
index="$i"
[ "$index" = "1" ] && index=""
local phy_exist=`/sbin/getcfg "Printers" "Phy exist$index"`
if [ "x$phy_exist" = "x" ] || [ "$phy_exist" = "0" ]; then
cups_del_printer $i
elif [ "$phy_exist" = "1" ]; then
cups_add_printer $i
fi
done
}
stop()
{
/usr/bin/killall cupsd 2> /dev/null
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
add_printer)
cups_add_printer $2
;;
del_printer)
cups_del_printer $2
;;
del_all_printers)
cups_del_all_printers
;;
*)
/bin/echo $"Usage: $0 {start|stop|restart|add_printer|del_printer|del_all_printers}"
exit 1
esac
exit 0