%PDF- %PDF-
Direktori : /usr/share/cups/ |
Current File : //usr/share/cups/test-drivers |
#!/bin/sh set -e -u DUMMY_PRINTER_NAME=test-printer0 DRIVER_REGEXP='^.*' PDFS_PATH=/usr/share/cups/data/ LPINFO_RUN=true DRIVERS_LIST='' while getopts 'n:r:p:l:h' flag; do case "${flag}" in n) DUMMY_PRINTER_NAME="${OPTARG}" ;; r) DRIVER_REGEXP="${OPTARG}" ;; p) PDFS_PATH="${OPTARG}" ;; l) LPINFO_RUN=false; DRIVERS_LIST=${OPTARG} ;; h) echo "Usage: $0 [-n printer_name] [-r '^driver_regexp'] [-p ./pdf-path] [-l drivers_list]"; return 1;; esac done if $LPINFO_RUN; then # textonly, gen-brf, gen-ubrl and indexv[3,4] can't print PDF # pdftoijs is currently buggy !? DRIVERS_LIST=$(lpinfo -m | cut -f1 -d' ' | grep -Ev 'brf|everywhere|gen-ubrl|indexv[3,4]|pdftoijs|raw|textonly' | grep -E $DRIVER_REGEXP) fi cleanup() { # Delete it echo -n " - Interrupted (or finished), delete test printer:" rm -f ${DUMMY_PRINTER_STDERR_FILE} rm -f ${DUMMY_PRINTER_PRINT_FILE} /usr/sbin/lpadmin -x $DUMMY_PRINTER_NAME 2>/dev/null || : echo " done." } trap cleanup EXIT INT # Configure the running CUPS server to do debug2 logging sed -e 's/^.*LogLevel.*$/LogLevel debug2/g' -i /etc/cups/cupsd.conf # Configure the running CUPS server to set FileDevice to Yes sed -e 's/^.*FileDevice.*$/FileDevice Yes/g' -i /etc/cups/cups-files.conf # Configure the running CUPS server to allow root to do administrative tasks sed -e 's/^.*SystemGroup.*$/SystemGroup lpadmin root/g' -i /etc/cups/cups-files.conf service cups restart DUMMY_PRINTER_STDERR_FILE=`mktemp` DUMMY_PRINTER_PRINT_FILE=`mktemp` for driver in $DRIVERS_LIST; do echo "* Driver $driver" echo -n " - Create test printer:" # Create dummy printer /usr/sbin/lpadmin -p $DUMMY_PRINTER_NAME -E -m $driver -v file://${DUMMY_PRINTER_PRINT_FILE} 2> $DUMMY_PRINTER_STDERR_FILE echo " done." # Tell stderr whether some unknown lines have been seen # Filter out the deprecation messages # Both messages from systemv/lpadmin.c cat "${DUMMY_PRINTER_STDERR_FILE}" | \ grep -v -E "lpadmin: (Raw queues|Printer drivers) are deprecated and will stop working in a future version of CUPS." \ || true \ 1>&2 for file in $(find $PDFS_PATH -name '*.pdf') ; do echo -n " - Print $file: " # Print the default testprint to it, get request id rid=$(/usr/bin/lp -d $DUMMY_PRINTER_NAME $file | sed -e 's/^.*request id is \(.*\) (.*)$/\1/g') # Wait for the print to finish while LPSTAT=`LANG=C /usr/bin/lpstat -l` && echo $LPSTAT | grep -q "^$rid "; do # If the filter is failed; stop the waiting and give as much context as possible if echo $LPSTAT | grep -A3 "^$rid" | grep -q "Filter failed"; then echo " Filter failed, aborting!" >&2 echo "$ lpstat -l" >&2 echo "$LPSTAT" # Get job-id from request-id; assume it's ${printer_name}-${job_id} jobid=$(echo $rid | sed -e "s/^${DUMMY_PRINTER_NAME}-//g") >&2 echo "$ grep "\[Job $jobid\]" /var/log/cups/error_log" >&2 grep "\[Job $jobid\]" /var/log/cups/error_log break fi /bin/sleep 1s echo -n "." done # Make sure the resulting data is not empty if [ ! -s "${DUMMY_PRINTER_PRINT_FILE}" ]; then echo " Filter succeeded but resulting file is empty; aborting!" false fi rm -f ${DUMMY_PRINTER_PRINT_FILE} echo " done." done # Delete it echo -n " - Delete test printer:" /usr/sbin/lpadmin -x $DUMMY_PRINTER_NAME echo " done." done