#! /bin/sh # # Brother Print filter # Copyright (C) 2005-2011 Brother. Industries, Ltd. # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # this program; if not, write to the Free Software Foundation, Inc., 59 Temple # Place, Suite 330, Boston, MA 02111-1307 USA # # modified for voidlinux by Carlo Dormeletti carlo.dormeletti email.it # 2014/04/26 -- first version # 2014/08/25 -- adapted to runit # printer_model=""dcp197c"" cups_printer_name=`echo $printer_model | tr '[a-z]' '[A-Z]'` device_name=`echo $cups_printer_name | eval sed -e 's/MFC/MFC-/' -e 's/DCP/DCP-/' -e 's/FAX/FAX-/'` # pcfilename=`echo $cups_printer_name | tr -d '[A-Z]'` device_model="Printers" tmp_filter=/var/tmp/brlpdwrapper${printer_model} ppd_file_name=/usr/share/ppd/cupsfilters/brother_${printer_model}_printer_en.ppd brotherlpdwrapper=/usr/lib/cups/filter/brlpdwrapper${printer_model} if [ "$1" = "-c" ]; then echo "---------- Printer ----------" echo "printer_model => " $printer_model echo "cups_printer_name => " $cups_printer_name echo "device_name => " $device_name echo "device_model => " $device_model echo "-------- Filters File --------" echo "tmp_filter => " $tmp_filter echo "ppd_file_name => " $ppd_file_name exit 0 fi if [ "$1" = '-e' ]; then lpadmin -x ${cups_printer_name} rm -f $ppd_file_name rm -f $brotherlpdwrapper sv restart cups exit 0 fi if [ "$1" = "-r" ]; then lpadmin -x ${cups_printer_name} sv restart cups exit 0 fi if [ "$1" = "help" ] || [ "$1" = "-h" ]; then echo 'option -h : help' echo ' -i : install' echo ' -e : uninstall' echo ' -r : remove printer' echo ' -c : check variables' exit 0 fi if [ -e "/opt/brother/${device_model}/${printer_model}/lpd/filter${printer_model}" ]; then : else echo "ERROR : Brother LPD filter is not installed." echo "ERROR : please install it." fi cp "/opt/brother/${device_model}/${printer_model}/cupswrapper/brother_${printer_model}_printer_en.ppd" $ppd_file_name chmod 644 $ppd_file_name # # create temporary CUPS Filter # cat <$tmp_filter #! /bin/sh # # Brother Print filter >> # Copyright (C) 2005-2011 Brother. Industries, Ltd. # Ver1.10 # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # this program; if not, write to the Free Software Foundation, Inc., 59 Temple # Place, Suite 330, Boston, MA 02111-1307 USA # # modified for voidlinux by Carlo Dormeletti carlo.dormeletti email.it # modify date 201/04/26 # LOGFILE="/dev/null" LOGLEVEL="1" LOGCLEVEL="7" DEBUG=0 NUPENABLE=1 LOG_LATESTONLY=1 errorcode=0 if [ \$DEBUG != 0 ]; then LOGFILE=/tmp/br_cupsfilter_debug_log fi PPDC=\`printenv | grep "PPD="\` PPDC=\`echo \$PPDC | sed -e 's/PPD=//'\` if [ "\$PPDC" = "" ]; then PPDC=$ppd_file_name fi if [ \$LOGFILE != "/dev/null" ]; then if [ \$LOG_LATESTONLY == "1" ]; then rm -f \$LOGFILE date >\$LOGFILE else if [ -e \$LOGFILE ]; then date >>\$LOGFILE else date >\$LOGFILE fi fi echo "arg0 = \$0" >>\$LOGFILE echo "arg1 = \$1" >>\$LOGFILE echo "arg2 = \$2" >>\$LOGFILE echo "arg3 = \$3" >>\$LOGFILE echo "arg4 = \$4" >>\$LOGFILE echo "arg5 = \$5" >>\$LOGFILE echo "arg6 = \$6" >>\$LOGFILE echo "PPD = \$PPD" >>\$LOGFILE fi INPUT_TEMP_PS=\`mktemp /tmp/br_input_ps.XXXXXX\` nup="cat" if [ "`echo \$5 | grep 'Nup='`" != '' ] && [ \$NUPENABLE != 0 ]; then if [ "`echo \$5 | grep 'Nup=64'`" != '' ]; then nup="psnup -64" elif [ "`echo \$5 | grep 'Nup=32'`" != '' ]; then nup="psnup -32" elif [ "`echo \$5 | grep 'Nup=25'`" != '' ]; then nup="psnup -25" elif [ "`echo \$5 | grep 'Nup=16'`" != '' ]; then nup="psnup -16" elif [ "`echo \$5 | grep 'Nup=8'`" != '' ]; then nup="psnup -8" elif [ "`echo \$5 | grep 'Nup=6'`" != '' ]; then nup="psnup -6" elif [ "`echo \$5 | grep 'Nup=4'`" != '' ]; then nup="psnup -4" elif [ "`echo \$5 | grep 'Nup=2'`" != '' ]; then nup="psnup -2" elif [ "`echo \$5 | grep 'Nup=1'`" != '' ]; then nup="cat" fi echo "NUP=\$nup" >>\$LOGFILE if [ -e /usr/bin/psnup ]; then if [ \$# -ge 7 ]; then cat \$6 | \$nup > \$INPUT_TEMP_PS else cat | \$nup > \$INPUT_TEMP_PS fi else if [ \$# -ge 7 ]; then cp \$6 \$INPUT_TEMP_PS else cat > \$INPUT_TEMP_PS fi fi else if [ \$# -ge 7 ]; then cp \$6 \$INPUT_TEMP_PS else cat > \$INPUT_TEMP_PS fi fi if [ -e "/opt/brother/${device_model}/${printer_model}/lpd/filter${printer_model}" ]; then : else echo "ERROR: /opt/brother/${device_model}/${printer_model}/lpd/filter${printer_model} does not exist" >>\$LOGFILE errorcode=30 exit fi CUPSOPTION=\`echo "\$5 Copies=\$4" | sed -e 's/BrMirror=OFF/MirrorPrint=OFF/' -e 's/BrMirror=ON/MirrorPrint=ON/' -e 's/BrChain/Chain/' -e 's/BrBrightness/Brightness/' -e 's/BrContrast/Contrast/' -e 's/BrHalfCut/HalfCut/' -e 's/BrAutoTapeCut/AutoCut/' -e 's/BrHalftonePattern/Halftone/' -e 's/Binary/Binary/' -e 's/Dither/Dither/' -e 's/ErrorDiffusion/ErrorDiffusion/' -e 's/PageSize/media/' -e 's/BrSheets/Sheets/' -e 's/multiple-document-handling/Collate/' -e 's/separate-documents-collated-copies/ON/' -e 's/separate-documents-uncollated-copies/OFF/'\` if [ -e "/opt/brother/${device_model}/${printer_model}/cupswrapper/brcupsconfpt1" ]; then if [ \$DEBUG = 0 ]; then /opt/brother/${device_model}/${printer_model}/cupswrapper/brcupsconfpt1 ${cups_printer_name} \$PPDC 0 "\$CUPSOPTION" "${printer_model}">> /dev/null else /opt/brother/${device_model}/${printer_model}/cupswrapper/brcupsconfpt1 ${cups_printer_name} \$PPDC \$LOGCLEVEL "\$CUPSOPTION" "${printer_model}">>\$LOGFILE fi fi if [ \$DEBUG -lt 10 ]; then cat \$INPUT_TEMP_PS | /opt/brother/${device_model}/${printer_model}/lpd/filter${printer_model} "\$\$" "CUPS" "USB" if [ \$LOGLEVEL -gt 2 ]; then if [ \$LOGFILE != "/dev/null" ]; then echo "" >>\$LOGFILE echo " ------PostScript Data-------" >>\$LOGFILE cat \$INPUT_TEMP_PS >>\$LOGFILE fi fi fi rm -f \$INPUT_TEMP_PS exit $errorcode !ENDOFWFILTER! chmod 755 $tmp_filter # # check brotherlpdwrapper in /usr/lib/cups/filter # if [ -d /usr/lib/cups/filter ]; then rm -f $brotherlpdwrapper cp $tmp_filter $brotherlpdwrapper fi # # remove temporary script file # rm -f $tmp_filter chmod a+w /opt/brother/${device_model}/${printer_model}/inf/br${printer_model}rc chmod a+w /opt/brother/${device_model}/${printer_model}/inf sleep 2s sv restart cups port2=`lpinfo -v | grep -i 'usb://Brother/${device_name}' | head -1` if [ "$port2" = '' ];then port2=`lpinfo -v | grep 'usb://Brother' | head -1` fi if [ "$port2" = '' ];then port2=`lpinfo -v | grep 'usb://' | head -1` fi port=`echo $port2| sed s/direct//g` if [ "$port" = '' ];then port=usb:/dev/usb/lp0 fi lpadmin -p ${cups_printer_name} -E -v $port -P $ppd_file_name exit 0