#!/bin/sh # Semplice shellscript che permette di stampare un file in una stampante del Dipartimento di Matematica # da una qualsiasi shell Unix (Linux, MacOS, BSD...). Funziona anche da remoto! # # È consigliato aggiungere la propria chiave ssh nella # macchina `login` (aula3/4) # tramite il comando `ssh-copy-id`, in modo da non dover # inserire la password ogni volta. _HOME="/home/unipi" _SERVER="login" _NO_CLI=true main() { for f in "$@"; do scp "$f" "${_USER}@${_SERVER}.dm.unipi.it:${_HOME}/${_USER}/printa4-$(basename "$f")" if $_NO_CLI; then ssh -XY ${_USER}@${_SERVER}.dm.unipi.it "okular \"${_HOME}/${_USER}/printa4-$(basename "$f")\" --print" else ssh ${_USER}@${_SERVER}.dm.unipi.it "lp $OPTIONS \"${_HOME}/${_USER}/printa4-$(basename "$f")\"" fi ssh ${_USER}@${_SERVER}.dm.unipi.it "rm \"${_HOME}/${_USER}/printa4-$(basename "$f")\"" done } usage() { cat < <...> Opzioni disponibili: -h, --help mostra questo messaggio di aiuto -u, --user USER specifica l'username di ateneo (default: $_USER) -s, --server SERVER specifica il server (default: $_SERVER) -d, --home HOME specifica la directory home (default: $_HOME) -c, --cli OPTIONS stampa tramite "lp" invece che da interfaccia grafica tramite "okular", passando gli opzioni di stampa per "lp" fra virgolette Ad esempio: $(basename "$0") ~/GAAL.pdf $(basename "$0") alg2.pdf commRingTheory.pdf $(basename "$0") --cli '-o sides=two-sided-short-edge' MR-impaginato.pdf N.B.: L'opzione --cli usa le opzioni necessarie per poter stampare un file creato con lo script "impagina", per rilegare le dispense a libretto in A5. Altre opzioni utili da passare ad "lp": -d destination stampante da usare ("lpstat -d -p" mostra le stampanti disponibili) -n num-copies numero di copie da stampare -P page-list per specificare le pagine da stampare, ad esempio "1,4-7,15" -o media=SIZE dove SIZE può essere ad esempio "a4", "letter" o "legal" -o number-up=NUM per stampare NUM pagine per foglio -o orientation-requested=5 per stampare in orizzontale (landscape) -o sides=two-sided-long-edge per stampare in fronte-retro ("-o sides=two-sided-short-edge" per landscape) EOF } error() { printf "$@\n" 1>&2 usage } ## PARSE OPTIONS while [ "$#" -gt 0 ]; do case $1 in -h|--help) usage; exit 0;; -u|--user) _USER="$2"; shift;; -s|--server) _SERVER="$2"; shift;; -d|--home) _HOME="$2"; shift;; -c|--cli) _NO_CLI=false; OPTIONS="$2"; shift;; -*) error "Opzione invalida: $1" ;; *) break ;; esac shift done if [ -z "$1" ]; then error "Non hai specificato nessun file...\n" else main "$@" fi