#!/bin/bash ############################################################################## # CUPS fax printer (capifax) # # Requirements: # capifax, netcat, ghostscript, cups, (zenity [optional]) # # Installation: # 1. Add socket-printer: # sudo lpadmin -p capifax -E -v socket://localhost:9901 -m raw # 2. Add this script to settings->sessions for autostart. # 3. Print to capifax printer, type in number and fax :-) ############################################################################## ############################################################################## # CONFIG: ############################################################################## MSN="12345" # The MSN to send fax from CONTROLLER="1" # Outgoing CAPI controller IDENT="+00 00 00000" # Fax-Ident No. HEADER="unknown" # Fax-Header RATE="14400" # Fax-Rate CUPS_PORT="9901" # CUPS socket printer port (sudo lpadmin -p capifax -E -v socket://localhost:9901 -m raw) FAX_DIR="/tmp" # Fax directory (for postscript and tiff) DELETE_AFTER_SEND="1" # Delete after sending? GS_OPTIONS="-q -dNOPAUSE -dBATCH -sDEVICE=tiffg3 -r204x196" # ghostscript options USE_ZENITY="1" # 1=zenity dialog, 0=xterm shell CAPIFAX_CUPS="$0" # this file (do not edit!) ############################################################################## askno() { if [ "$1" = "SHELL" ]; then echo -n "Zielrufnummer (Ctrl. $CONTROLLER): " read TRG_NO else TRG_NO=`zenity --entry --text="Zielrufnummer (Ctrl. $CONTROLLER):" --title "capifax ($MSN)"` fi echo "$TRG_NO" > "$FAX_DIR/TRGNO.$MSN" exit 0 } send_fax() { xterm -title "capifax (from $MSN to $2)" -e "capifax -send \"$1\" \"$CONTROLLER\" \"$MSN\" \"$2\" -header \"$HEADER\" -ident \"$IDENT\" -rate \"$RATE\"; echo \"Press 'Enter' to exit now ...\"; read;" } cleanup() { echo "Exiting..." rm "$PS_FILE" 2>/dev/null exit 0 } # $1=ASKNO if [ "$1" = "ASKNO_SHELL" ]; then askno "SHELL"; fi if [ "$1" = "ASKNO_ZENITY" ]; then askno "ZENITY"; fi # check for capifax echo -n "Searching capifax: " type capifax if [ ! $? -eq 0 ]; then echo "Error: no capifax found!"; exit 1; fi # check for netcat echo -n "Searching netcat: " type nc if [ ! $? -eq 0 ]; then echo "Error: no netcat found!"; exit 1; fi # check for ghostscript echo -n "Searching ghostscript: " type gs if [ ! $? -eq 0 ]; then echo "Error: no ghostscript found!"; exit 1; fi if [ "$USE_ZENITY" = "1" ]; then # use zenity or shell? echo -n "Searching zenity: " type zenity if [ $? -eq 0 ]; then ZENITY="1"; else ZENITY="0"; fi else ZENITY="0" fi trap 'cleanup' 1 2 9 15 # receive loop while [ "1" = "1" ]; do FILE_SUFFIX=`date +"%Y.%m.%d-%H.%M.%S"` PS_FILE="$FAX_DIR/capifax_$FILE_SUFFIX.ps" TIFF_FILE="$FAX_DIR/capifax_$FILE_SUFFIX.tiff" # receive ps file from cups printer socket nc -l -p $CUPS_PORT > "$PS_FILE" if [ -f "$PS_FILE" ]; then # convert from ps to tiff gs $GS_OPTIONS -sOutputFile="$TIFF_FILE" "$PS_FILE" if [ -f "$TIFF_FILE" ]; then if [ "$ZENITY" = "1" ]; then $CAPIFAX_CUPS ASKNO_ZENITY else xterm -title "capifax ($MSN)" -e "$CAPIFAX_CUPS ASKNO_SHELL" fi # get number from dialog and send fax TARGET_NO=`cat $FAX_DIR/TRGNO.$MSN` if [ ! -z "$TARGET_NO" ]; then send_fax "$TIFF_FILE" "$TARGET_NO" else echo "Aborted!" fi rm "$FAX_DIR/TRGNO.$MSN" 2>/dev/null else echo "Error: $TIFF_FILE not found!" fi else echo "Error: $PS_FILE cannot be written!" fi # delete after send? if [ "$DELETE_AFTER_SEND" = "1" ]; then rm "$PS_FILE" "$TIFF_FILE" 2>/dev/null; fi sleep 1 done exit 0;