{"id":974,"date":"2016-03-18T08:34:56","date_gmt":"2016-03-18T08:34:56","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/?p=974"},"modified":"2016-03-18T08:34:59","modified_gmt":"2016-03-18T08:34:59","slug":"de-una-impresora-virtual-pdf-al-buzon-de-correo-del-usuario","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2016\/03\/18\/de-una-impresora-virtual-pdf-al-buzon-de-correo-del-usuario\/","title":{"rendered":"De una impresora virtual PDF al buz\u00f3n de correo del usuario &#8230;"},"content":{"rendered":"<p>&#8230; no hay tanto camino como uno pudiera creer.<\/p>\n<p><!--more--><\/p>\n<p>Tomando como base <a href=\"https:\/\/astillas.net\/wiki\/CUPS#Env.C3.ADo_por_correo_electr.C3.B3nico\">las notas que guardo en mi wiki<\/a> al respecto estoy creando un filtro secundario para utilizarlo en el servidor de impresi\u00f3n de mi trabajo.<\/p>\n<p>Ya tengo un paquete Debian creado al respecto llamado <em>empresa-printers-pdf<\/em> que arrastra como dependencia a <em>cups<\/em> y a <em>cups-pdf<\/em> y lo configura a mi gusto en cuanto a rutas de trabajo y otros par\u00e1metros en la creaci\u00f3n de los PDF. Como carencia puedo citar que no es muy bueno renumerando los archivos cuando ya existen en el directorio final, pero eso es algo que voy a intentar arreglar hoy.<\/p>\n<p>En la configuraci\u00f3n de <em>cups-pdf<\/em> existe un par\u00e1metro especial (<em>PostProcessing<\/em>) para definir un filtro final de los documentos. Este filtro es invocado con los siguientes par\u00e1metros:<\/p>\n<ol>\n<li>Ruta completa del documento PDF<\/li>\n<li>Nombre del usuario que recibe el documento (que a su vez es el que ha creado el trabajo de impresi\u00f3n).<\/li>\n<\/ol>\n<p>Y es necesario tener en cuenta que el programa funcionar\u00e1 con los privilegios del usuario, por lo que pueden darse comportamientos extra\u00f1os en su funcionamiento. Y es un detalle importante. Mi problema principal es que algunos usuarios que crean el trabajo s\u00f3lo existen en un determinado sistema (cosa de las herencias recibidas y dem\u00e1s) y no en el servidor de impresi\u00f3n, por lo que situar documentos PDF en algunos directorios es un l\u00edo para que luego los encuentren. Claro, si resulta que soy <em>fulanito<\/em> en un sistema y tengo dispuesto que mis archivos est\u00e1n en, pongamos por caso,\u00a0<em>\/var\/pdf\/menganito<\/em>, pues me costar\u00e1 m\u00e1s llegar a ellos, \u00bf no ? Y son usuarios, v\u00e1lgame, no les hagas que cambien un cent\u00edmetro su forma de trabajar porque implosionan o se desintegran o algo as\u00ed de truculento.<\/p>\n<p>Si el filtro fuese llamado con mayores privilegios podr\u00eda simplemente buscar en el nombre de usuario en una tabla e ir copiando o moviendo los documentos de un directorio a otro, incluso a varios si existe una cuenta compartida (que es uno de los casos, curiosamente). No es el caso y no estoy ahora para ir modificando c\u00f3digo de terceros que funciona bien.<\/p>\n<p>Pero entonces me d\u00ed cuenta de que el env\u00edo por correo electr\u00f3nico, sobre todo si es a cuentas internas, si que est\u00e1 al alcance de cualquier pelado en el sistema. Y aunque el programa que cito de <em>Nickolay Kondrashov<\/em> est\u00e1 bastante bien lo veo m\u00e1s complejo de lo que yo pretendo, sobre todo en la configuraci\u00f3n y que adem\u00e1s no tiene la posibilidad de env\u00edo a m\u00faltiples cuentas. Vale, eso podr\u00eda hacerse f\u00e1cilmente con alias de correo, pero como las cuentas corporativas (empresariales m\u00e1s bien, que somos pocos) est\u00e1n en manos de Google, la cosa de los alias se complica m\u00e1s y se vuelve pel\u00edn farragosa.<\/p>\n<p>Y ahora que recuerdo hay un detalle m\u00e1s, el programa utiliza un archivo en el directorio donde se depositan los documentos PDF para obtener la direcci\u00f3n de reenv\u00edo. No es buena idea porque los hom\u00ednidos podr\u00e1n verlo y seguro que lo cambian, lo borran o lo trastocan de alguna forma que luego tendr\u00e9 que arreglar con prisas. Mejor empleo una tabla global y as\u00ed tampoco pueden enviarse la informaci\u00f3n a cuentas raras.<\/p>\n<p>He buscado un programa en el sistema que permita realizar env\u00edos de correo con adjuntos y que pueda usarse desde otro con facilidad y he encontrado en el viejo y fiable <em>mailx<\/em> que puede a\u00f1adir archivos adjuntos con mucha facilidad.<\/p>\n<p>Los par\u00e1metros principales son:<\/p>\n<ul>\n<li>-a archivo adjunto<\/li>\n<li>-s asunto del mensaje<\/li>\n<li>-r direcci\u00f3n de remite<\/li>\n<li>direcci\u00f3n o direcciones destino<\/li>\n<\/ul>\n<p>El cuerpo del mensaje lo lee de la entrada est\u00e1ndar as\u00ed que, encima, es m\u00e1s sencillo de integrar. Una primera versi\u00f3n ser\u00eda la siguiente:<\/p>\n<pre class=\"striped:false marking:false ranges:false nums:false nums-toggle:false wrap-toggle:false lang:sh decode:true\" title=\"Despachador de impresos PDF por email\">#!\/bin\/bash\r\n\r\n#   Variables\r\nVERSION=0.2\r\nMAP=${MAP:-\/etc\/venexma\/cups-pdfmap.conf}\r\nMAILX=$(which mailx)\r\n\r\n#   Par\u00e1metros\r\nPDF=$1\r\nUSER=$2\r\n\r\nif [ -z \"$PDF\" -o -z \"$USER\" -o ! -r $MAP ]; then \r\n    PROG=$(basename $0)\r\n    cat &gt;&amp;2 &lt;&lt;EOF\r\n\r\n$PROG - $VERSION\r\n\r\nFiltro de segundo nivel para enviar los documentos PDF \r\ncreados con cups-pdf a una direcci\u00f3n de correo electr\u00f3nico. \r\n\r\nuso: $PROG documento_pdf usuario \r\n\r\nEl mapa de usuarios se espera en $MAP.\r\n\r\nEOF\r\n    exit 1\r\nfi\r\n\r\n#   Si no tenemos programa para enviar correo \r\nif [ -x $MAILX]; then \r\n    exit 0\r\nfi\r\n\r\n\r\n#   Localizamos la direcci\u00f3n destino del usuario \r\nEMAIL=$(grep $USER $MAP | cut -d \":\" -f 2)\r\nif [ -n \"$EMAIL\" ]; then \r\n    # Preparamos asunto \r\n    ASUNTO=\"Impreso: $(basename $PDF)\"\r\n    # y despachamos \r\n    cat &lt;&lt;EOF | $MAILX -s \"$ASUNTO\" -a $PDF $EMAIL\r\n\r\nAdjunto el resultado del trabajo de impresi\u00f3n \r\nconvertido a formato PDF.\r\n\r\n--\r\nSu administrador\r\n\r\nEOF\r\n\r\nfi \r\n\r\n\r\n<\/pre>\n<p>Y funciona estupendamente. Basta con instalarlo en el sistema, en mi caso concreto v\u00eda empaquetado Debian, e indicarle a <em>cups-pdf<\/em> que lo utilice como herramienta de postproceso.<\/p>\n<p>En el archivo <em>\/etc\/cups\/cups-pdf.conf<\/em>\u00a0 a\u00f1adimos la directiva<\/p>\n<pre class=\"striped:false marking:false ranges:false nums:false nums-toggle:false wrap-toggle:false lang:ini decode:true\">PostProcessing \/usr\/bin\/cups-pdf2email<\/pre>\n<p>y reiniciamos para que lea los cambios (por si acaso).<\/p>\n<p>Un detalle tambi\u00e9n a tener en cuenta es que el mapa de usuarios debe ser accesible para todos dado que no sabemos qu\u00e9 privilegios se usar\u00e1n cuando se acceda a \u00e9l.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; no hay tanto camino como uno pudiera creer.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[18,250,25,222],"class_list":["post-974","post","type-post","status-publish","format-standard","hentry","category-software","tag-administracion-de-sistemas","tag-cups","tag-email","tag-pdf"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/974","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=974"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/974\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=974"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=974"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=974"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}