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

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.

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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.