Używanie skryptu powłoki jako drukarki wirtualnej

10

Mam skrypt powłoki, który pobiera plik PDF jako argument i drukuje go z dodatkowymi opcjami specyficznymi dla drukarki. Jak mogę dodać ten skrypt jako drukarkę wirtualną, którą można wybrać z GUI?

Skrypt powłoki to ręczny skrypt dupleksowy, który pobiera plik PDF, drukuje parzyste strony, wyświetla polecenie użytkownika za pomocą zenity, prosząc użytkownika o przewrócenie stron, a następnie drukuje strony nieparzyste.

Mój obecny przepływ pracy to:

  1. Plik -> Drukuj -> Zapisz w pliku -> tmp.pdf
  2. my_duplex_script tmp.pdf
  3. rm tmp.pdf

Czy można to zrobić jako:

  1. Plik -> Drukuj -> my_script_as_virtual_printer

Uwaga: To jest na Linux cynamon mięty 13. Próbowałem, gnome-manual-duplexale to nie działa dla mnie.


Okno dialogowe GUI, z którego mogę wydrukować do pliku PDF Standardowe okno dialogowe drukowania GTK

my_duplex_script

#!/bin/bash

lp_args=
while getopts o: opt
do
    case "$opt" in
        o)  lp_args="$lp_args -o $OPTARG" ;;
        \?) echo >&2 Invalid argument; exit 1 ;;
    esac
done
shift `expr $OPTIND - 1`

file=$1
page_count=$(pdfinfo "$file" | grep Pages | awk '{print $2}')
is_odd=`expr $page_count % 2`

if [ $is_odd -eq 1 ]
then
    #outputting blank
    echo | lp -s -t "$file"-blank
fi

#printing even reversed
lp -s -o page-set=even -o outputorder=reverse $lp_args -t "$file"-even "$file"

if zenity --question --text="Flip and reinsert the entire stack when printing has finished." --ok-label="Proceed" --cancel-label="Cancel"
then
    #printing odd reversed
    lp -s -o page-set=odd -o outputorder=reverse $lp_args -t "$file"-odd "$file"
else
    echo >&2 User abort
    exit 1
fi

exit 0
użytkownik80551
źródło

Odpowiedzi:

2

Nigdy tego nie próbowałem, ale istnieje narzędzie o nazwie, tea4cupsktóre brzmi, jakbyś mógł zaimplementować prehook w swoim skrypcie, który wykonałby wydruk. Możesz wtedy anulować ten wydruk i nie udać się do prawdziwej drukarki za pomocą kubków, pozwalając zamiast tego na wykonanie skryptu.

fragment

Możliwości są nieskończone :

  • Wyślij to samo zadanie do kilku drukarek jednocześnie, co nie jest możliwe w przypadku CUPS.
  • Zautomatyzuj archiwizację PDF wszystkich zadań drukowania.
  • Zabroń duplikatów zadań drukowania (prosty przykład pokazano w przykładowym pliku konfiguracyjnym)
  • Utwórz rozwiązanie do rozliczania wydruków w 15 minut (TAK, TO JEST PRAWDZIWE)
  • itp...

Tea4cups zapewnia następujące ułatwienia:

Tea4CUPS zapewnia trzy sposoby uruchamiania poleceń:

  • filtry: Filtr może modyfikować dane wejściowe przed wysłaniem ich do drukarki lub udostępnieniem przed i po zaczepach zdefiniowanych poniżej. Obecnie można zdefiniować pojedynczy filtr dla kolejki wydruku.
  • prehaki: gwarantuje się, że zostaną uruchomione przed wysłaniem zadania drukowania do rzeczywistej drukarki. Każdy prehook, który wychodzi -1, może anulować zadanie drukowania. Dla określonej kolejki wydruku można zdefiniować dowolną liczbę prehaków.
  • haki pocztowe: gwarantuje się, że zostaną uruchomione po wysłaniu zadania drukowania do rzeczywistej drukarki, chyba że zadanie zostało wcześniej anulowane przez prehook. Dla określonej kolejki drukowania można zdefiniować dowolną liczbę zaczepów końcowych.
slm
źródło
2

Jak mogę dodać ten skrypt jako drukarkę wirtualną, którą można wybrać z GUI?

Aby reklamować drukarkę wirtualną, po prostu edytuj /etc/printcap. Nie jest to bardzo łatwe, ponieważ składnia PRINTCAP wymaga przyzwyczajenia się.

Przykład tego, jak to zrobić, pokazano tutaj Usługa PDF z Sambą :

# /etc/printcap
# PDF Service entry

lp|pdf|PDF Printer:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/pdf:\
        :af=/var/spool/lpd/pdf/acct:\
        :mx#0:sh:\
        :if=/usr/bin/smbprint:

Tutaj /usr/bin/smbprintskrypt jest używany jako filtr wydruku. Sama drukarka jest /dev/null.

Być może będziesz musiał zainstalować cups-bsd, ale często jest to domyślna konfiguracja.


źródło
Zauważ, że printcapjest to plik konfiguracyjny dla BSD lpr lub lprNG, a nie dla CUPS, który jest obecnie de facto standardem i jest standardem dla Mint.
Gilles „SO- przestań być zły”
Dlatego wspomniałem o cups-bsdpakiecie, który jest również dostępny w Mint, domyślnie zainstalowany i dobrze obsługiwany. cups-bsdnie jest lprng! Jest to tylko opakowanie, które zapewnia funkcjonalność drukowania BSD dla Cups w celu obsługi aplikacji używających lprdo drukowania (np. Xpdf).
0

Późno na imprezę, ale chciałem zrobić to samo i nie znalazłem innego rozwiązania.

Napiszę tutaj, jak to rozwiązałem, być może inni uznają to rozwiązanie za przydatne.

  • stworzył filtr kubków, aby złapać plik do wydrukowania
  • zrobił backend, aby wydrukować plik
  • zrobił ładny i łatwy instalator.

kod źródłowy znajduje się na github: https://github.com/dentys03/manual_duplex_linux

Powinien działać na dowolnej drukarce HP. Chyba łatwo przystosowane do innych drukarek.

Denis
źródło