Parfois, lorsque je travaille sur mon ordinateur portable, je souhaite mettre en file d'attente quelques documents à imprimer ultérieurement, car je ne suis pas connecté à une imprimante à ce moment-là.
Cependant, les files d'attente d'impression réelles ne sont pas conçues pour cela. ils essaient immédiatement d'imprimer le document et soudain, ils commencent à imprimer dès que je suis connecté au réseau, ce qui n'est généralement pas ce que je veux faire. De plus, je souhaite parfois modifier l’ordre des documents dans la file d’attente, ce qui n’est pas très facile, en particulier une fois que certains d’entre eux ont commencé à imprimer.
De plus, parfois, l’impression échoue parce que, par exemple, l'imprimante manque de papier ou de toner et je souhaite réimprimer le document sur une autre imprimante. Ce n'est pas simple avec par exemple CUPS
ou system-config-printer
; Je dois généralement revenir en arrière, rouvrir le lecteur PDF et recommencer. Aucun des PDF lecteurs que je connais ne vous a laissé conserver une liste de documents à imprimer ultérieurement, mais il peut s'agir d'une fonctionnalité cachée d'un PDF lecteur quelque part que je ne connais pas.
Quoi qu'il en soit, voici ce que je veux pouvoir faire:
Je sais que je pourrais pirater quelque chose avec un script Shell, lpr
et une liste de chemins dans un fichier texte, mais je ne peux m'empêcher de penser que ce problème a déjà été résolu de manière plus robuste et élégante.
Points bonus:
Aucune suggestion?
Ce que je fais est la suivante - ce n’est pas aussi polyvalent que vous l’avez demandé, mais cela fonctionne presque bien. Vous devez définir toutes vos imprimantes, puis vous avez besoin de ces deux scripts:
stop_printers
:
#!/bin/bash -f
#
allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
for i in ${allp[@]}; do
echo -n Printer $i:
cupsdisable "$i"
echo " " paused.
done
start_printers
:
#!/bin/bash -f
#
allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
for i in ${allp[@]}; do
echo -n Printer $i:
cupsenable "$i"
echo " " restarted.
done
Vous devez les mettre dans votre chemin (par exemple ~/bin
) et les rendre exécutables avec chmod +x
. CAVEAT: Je n'ai aucune imprimante avec des espaces dans leurs noms. Les scripts ne sont pas testés dans ce cas (mais je suis sûr que l'un des gourous de notre script Shell corrigera les scripts en un clin d'œil; -) ...)
Maintenant, vous pouvez émettre:
[romano:~] % stop_printers
Printer PDF: paused.
Printer ColorDEA: paused.
Printer Deskjet_6980: paused.
Printer fotocop5: paused.
Et vous pouvez imprimer où vous voulez, l’imprimante sera suspendue:
Vous pouvez voir votre file d'attente:
[romano:~] % lpq -PDeskjet_6980
Deskjet_6980 is not ready
Rank Owner Job File(s) Total Size
1st romano 439 Bones_3+RG.pdf — Flesh depth 125952 bytes
(Autant que je sache, les files d'attente d'impression sont persistantes lors des redémarrages). Et quand vous voulez imprimer:
[romano:~] % start_printers
Printer PDF: restarted.
Printer ColorDEA: restarted.
Printer Deskjet_6980: restarted.
Printer fotocop5: restarted.
En utilisant lprm
, vous pouvez supprimer un travail si vous en avez besoin. lpr
pour mettre un document en file d'attente via la ligne de commande, et si vous voulez des "listes" différentes, personne ne vous interdit de définir plusieurs fois la même imprimante avec des noms différents.
Vous pouvez également reprendre chaque imprimante manuellement, il suffit simplement d’exécuter cupsenable <printername>
à partir de l’invite.
Ce que je ne pense pas que vous puissiez faire avec cette solution, c’est de changer les options d’impression après coup - vous devrez retirer de la file d’attente et remettre le document en file d'attente pour cela.
Mon paquetage (plug éhonté), duplexpr fait une partie de ce que vous voulez et inclut des fonctions bash qui peuvent être utiles pour lancer votre propre version. (Il est codé en bash, il devrait donc être relativement facile à modifier et je vous aiderai si je peux.)
Il est conçu pour émuler l'impression recto verso sur des imprimantes non-duplex et implémente sa propre gestion simple des files d'attente d'impression. Il a à la fois une interface graphique et une interface graphique.
La version actuelle n'imprime qu'en duplex et ne fonctionne qu'avec des imprimantes non-duplex, mais une nouvelle version est en cours de traitement. Elle traitera les imprimantes avec du matériel en duplex, qui consiste essentiellement en une gestion des imprimantes et des files d'attente sans le logiciel d'émulation en duplex. (J'ai une version alpha disponible d'un script qui fonctionne déjà si quelqu'un veut me contacter directement via le projet, etc.)
Le système imprime sur l’imprimante par défaut actuelle, mais les scripts dplx et duplex acceptent des arguments supplémentaires qui sont passés à lp et peuvent être utilisés pour définir les options comprises par lp, telles que l’imprimante et d’autres propriétés.
Le système gère actuellement les fichiers PDF, PostScript et texte brut.
La seule chose qu’il ne fera pas sera d’imprimer les fichiers créés à l’aide de l’option Imprimer dans un fichier depuis dans Acroread. Ces fichiers ne fonctionnent tout simplement pas avec lp et je n’ai jamais pu attirer l’attention de personnes en amont pour savoir quels sont les problèmes.
Personnellement, j'imprime quasiment tout "hors ligne" (à l'aide des options Imprimer dans un fichier prises en charge par la plupart des applications), même lorsque mes imprimantes sont disponibles. Cela m'aide à me concentrer sur ce que je fais. Plus tard, lorsque j'atteins un point d'arrêt approprié, j'imprime des lots de travaux.
Avoir une file d'attente d'impression est également très agréable lorsque vous souhaitez imprimer une autre copie de quelque chose sans avoir à la régénérer. Elle est essentielle pour traiter les erreurs d'impression telles que les bourrages ou le manque de toner.
Il ne semble pas exister de solution complète à ce problème, mais voici une fonction que j'ai ajoutée à mon .bashrc
et qui est similaire à réponse de Rmano ci-dessus, avec la commodité supplémentaire de la saisie semi-automatique.
all-printers() {
if [ "$*" = "" ]
then
# Print usage."
printf "Usage:\n"
printf "all-printers start\n"
printf "all-printers stop\n"
return 1
Elif ! [ "$1" = "stop" -o "$1" = "start" ]
then
printf "Unrecognized command: $1\n"
return 1
fi
cut -f 1 -d '|' /etc/printcap |
grep -v '^#' |
while read printer_name
do
if [ "$1" = "stop" ]
then
cupsdisable "$printer_name"
printf "$printer_name stopped.\n"
Elif [ "$1" = "start" ]
then
cupsenable "$printer_name"
printf "$printer_name started.\n"
fi
done
}
complete -W 'stop start' all-printers