diff options
-rw-r--r-- | printer-profile.in | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/printer-profile.in b/printer-profile.in new file mode 100644 index 0000000..5363847 --- /dev/null +++ b/printer-profile.in @@ -0,0 +1,296 @@ +#!/bin/sh + +PROGNAME="$0" + +usage() { + cat <<EOF +NAME + `basename $PROGNAME` - printer-profile using X-Rite ColorMunki and Argyll CMS + +SYNOPSIS + `basename $PROGNAME` [options] manuf model [rgb|cmyk] [patches] [ink-limit] + +DESCRIPTION + Prints a test chart, uses the ColorMunki instrument to scan it in, then + computes an ICM profile using the Argyll Color Management System. + + Manuf is "sam". Model is "clp-300" or "clp-315". + Manuf is "hp". Model is "2600" or "cp1215". + Manuf is "km". Model is "1600" or "2300" or "2530". + + "rgb" is the usual setting. "patches" is a multiple 196 per page. + + Edit the script for additional models. + +OPTIONS + -b 1|2 Bits per pixel ($BPP) + -r XRESxYRES Resolution. Default=''. ($RES) + -P rem-print Remote print (64-bit) machine, or none ($REMPRINT) + -S rem-scan Remote scan (ColorMunki) machine, or none ($REMSCAN) + -D lvl Debug level + +EXAMPLE + $ printer-profile sam 315 rgb 196 + +BUGS + gs 8.64 and before has problems with 32-bit machines and color profile + data. Don't use! + + You need two copies of Argyll: must be 1.0.3 and 1.1.0beta. Otherwise, + targen and colprof core dumps. + +SEE ALSO + http://www.xritephoto.com/html/colormunkisplash.htm + from Amazon, \$390 shipped + http://www.argyllcms.com/ + free! +EOF + + exit 1 +} + +# +# Report an error and exit +# +error() { + echo "`basename $PROGNAME`: $1" >&2 + exit 1 +} + +debug() { + if [ $DEBUG -ge $1 ]; then + echo "`basename $PROGNAME`: $2" >&2 + fi +} + +# +# Execute a command as root +# +root() { + if [ -x /usr/bin/root ]; then + /usr/bin/root $@ + else + su -c "$*" + fi +} + +# +# trap on error +# +trap "exit 1" ERR + +# +# Process the options +# +REMPRINT=amd +REMSCAN=mac +REMSCAN=none +RGB=rgb +PATCHES=196 #Per page! +BPP=1 +RES= +DEBUG=0 +while getopts "b:r:P:S:D:h?" opt +do + case $opt in + b) BPP="$OPTARG";; + r) RES="$OPTARG";; + P) REMPRINT="$OPTARG";; + S) REMSCAN="$OPTARG";; + D) DEBUG="$OPTARG";; + h|\?) usage;; + esac +done +shift `expr $OPTIND - 1` + +# +# Main Program +# +if [ $# -lt 2 ]; then + usage +fi + +MANUF="$1" +MODEL="$2" +if [ $# -ge 3 ]; then + RGB="$3" +fi +if [ $# -ge 4 ]; then + PATCHES="$4" +fi +INK="$5" + +BPP_b="-b$BPP" +RES_r= +if [ "$RES" != "" ]; then + RES_r="-r$RES" +fi + +case "$MANUF" in +km) + MANUF=km + case "$MODEL" in + *1600*) + FOO=foo2lava + WRAPPER="foo2lava-wrapper $RES_r -z2 -c -C10 -Gnone.icm" + OUT="root cp xxx.prn /dev/usb/lp1" + ;; + *2530*) + FOO=foo2lava + WRAPPER="foo2lava-wrapper $RES_r -z0 -c -C10 -Gnone.icm" + OUT="nc 192.168.1.13 9100 < xxx.prn" + ;; + *2300*) + FOO=foo2zjs + WRAPPER="foo2zjs-wrapper $RES_r -c -C10 -Gnone.icm" + OUT="nc 192.168.1.10 9100 < xxx.prn" + ;; + *) + usage + ;; + esac + ;; +sam*) + MANUF=sam + FOO=foo2qpdl + case "$MODEL" in + *300*) + WRAPPER="foo2qpdl-wrapper $RES_r -z0 -c -C10 -Gnone.icm" + OUT="nc 192.168.1.11 9100 < xxx.prn" + ;; + *315*) + WRAPPER="foo2qpdl-wrapper $RES_r -z2 -c -C10 -Gnone.icm" + OUT="root cp xxx.prn /dev/usb/lp1" + ;; + *) + usage + ;; + esac + ;; +hp*) + MANUF=hp + FOO=foo2hp + case "$MODEL" in + *2600*) + WRAPPER="foo2hp2600-wrapper $RES_r $BPP_b -z0 -c -C10 -Gnone.icm" + OUT="nc 192.168.1.12 9100 < xxx.prn" + ;; + *cp1215*) + WRAPPER="foo2hp2600-wrapper $RES_r $BPP_b -z1 -c -C10 -Gnone.icm" + OUT="root cp xxx.prn /dev/usb/lp2" + ;; + *) + usage + ;; + esac + ;; +*) + usage + ;; +esac + +mrp="$MANUF-$MODEL-$RGB-$PATCHES" +if [ "$INK" != "" ]; then + mrp="$mrp-ink$INK" +fi +if [ "$BPP" != "" ]; then + mrp="$mrp-bpp$BPP" +fi +if [ "$RES" != "" ]; then + mrp="$mrp-$RES" +fi +echo "$mrp" + + +BETABIN=~/src/Argyll_V1.1.0_Beta/bin +if [ ! -x $BETABIN/printtarg ]; then + error "No beta bin in $BETABIN!" +fi + +targen_opts= +case "$RGB" in +rgb|RGB) targen_opts="$targen_opts -d3";; +cmyk|CMYK) targen_opts="$targen_opts -d4";; +*) error "Parm2: Must be rgb or cmyk";; +esac + +targen_opts="$targen_opts -f$PATCHES" + +if [ "$INK" != "" ]; then + targen_opts="$targen_opts -l$INK" +fi + +echo +echo "******************************** targen ********************************" +echo "targen $targen_opts $mrp" +if ! targen $targen_opts $mrp >$mrp.err1; then + cat $mrp.err1 + exit 1 +fi + +echo +echo "******************************* printtarg ******************************" +echo "$BETABIN/printtarg -h -v -iCM -p Letter -R0 $mrp" +$BETABIN/printtarg -h -v -iCM -p Letter -R0 $mrp + +evince $mrp.ps & + +echo +echo "******************************* print it *******************************" +echo "$WRAPPER" +case "$REMPRINT" in +''|none) + $WRAPPER <$mrp.ps >$mrp.prn + ;; +*) + ssh $REMPRINT "$WRAPPER" <$mrp.ps >$mrp.prn + ;; +esac +ls -l $mrp.prn +echo -n "Print it? [y|n]? " +read yes +case "$yes" in +y|Y) + cp $mrp.prn xxx.prn + echo " $OUT" + eval $OUT + rm -f xxx.prn +esac + +echo +echo "******************************* chartread ******************************" +case "$REMSCAN" in +''|none) + echo "$BETABIN/chartread $mrp" + $BETABIN/chartread $mrp + ;; +*) + echo "scp $mrp.ti2 mac:" + scp $mrp.ti2 mac: + echo "$BETABIN/chartread $mrp" + echo -n "Scanned on remote system $REMSCAN? [y/n]? " + read yes + case "$yes" in + y|Y) + scp $REMSCAN:$mrp.ti3 . + ;; + esac + ;; +esac + +echo +echo "******************************** colprof *******************************" +case $RGB in +rgb) + echo "colprof -v -D\"$mrp\" -qm -cmt -dpp $mrp" + colprof -v -D"$mrp" -qm -cmt -dpp $mrp + ;; +cymk) + echo "colprof -v -D\"$mrp\" -qm -cmt -dpp -kr $mrp" + colprof -v -D"$mrp" -qm -cmt -dpp -kr $mrp + ;; +esac + +root cp $mrp.icc /usr/share/$FOO/icm/testing.icm +echo "/usr/share/$FOO/icm/testing.icm created!" +ls -l /usr/share/$FOO/icm/ |