Ha ingyen, könnyen, gyorsan, és bármilyen felületről akarok nyomtatni, akkor arra nincs sok megoldás. A Google Cloud Print ilyen volt, de azt megszüntették. A Telegram botos megoldásom hasonló.
Végy egy linuxos gépet egy telegram shell bottal és egy hozzá kapcsolható nyomtatóval. Ha neked is MFP géped van, akkor azt, amivel már scannelni is tudsz – akár 1000km távolságból is. Ugyanitt megtalálható az is, hogy milyen hozzávalókra van szükség. Röviden egy linuxos nyomtató, a Telegramos Botfather által készített bot, a telegram-shell-bot, amit csak saját felelősségre telepíts, és egy telegram CLI klienst. Utóbbi ehhez a feladathoz nem kell, de nekem van, mert scannelek is 🙂
Természetesen szükség lesz egy scriptre, amit a shell-bot-tal meg lehet hívni, valamint valahogy el kell juttatni a nyomtatandó file-t a szervergépre. A Shell-botnak van egy upload paranccsa, de ez a szerver oldalról tölti fel a telegram csatornára a file-t, ami kontraindikált, ha a kliensről akarom elküldeni a file-t a szerverre. Arra se nagyon tudtam rávenni, hogy ha fel is töltök egy adathalmazt, akkor azt a shell-bottal lementsem.
Maradt egy köztes megoldás: a nyomtatandó file-t valamilyen filemegosztó módszerrel (dropbox khm) URL-esíteni, és úgy célba juttatni. Határtalan lustaságomban szerettem volna valahogy a file elnevezését is a lehető legegyszerűbben megoldani, de igény szerint személyre szabhatóvá tenni. Az alábbi igyekezet eredménye a lenti kód.
A script kötelező paramétere az URL, opcionális az OUTPUT file név. Az URL alapján megpróbálja kitalálni a nyomtatandó file nevét, ha nem sikerül, akkor egy timestamp-es filenév alá pakolja. Az URL-t wget-tel menti, lehetne curl is, a végeredmény szempontjából lényegtelen. Az lp
parancsot direkt hívom meg felparaméterezve a nyomtatóval, amit akár a script hívásakor át is adhatnék, de mert csak egy féle nyomtatóra nyomtatok, ezért ezt nem teszem.
Szerintem ennél egyszerűbb csak akkor lehetne, ha nem ellenőrizném a paramétereket, és az OUTPUT-ot kötelező lenne megadni, így viszont sokkal kényelmesebb.
A telegram kliensből a
/r bin/print.sh MYURL
paranccsal lehet meghívni (amennyiben a scriptet a ~/bin/ alá rakod le print.sh néven).
#!/bin/bash if [ -z "$1" ] then echo "No argument supplied use print.sh URL [OUTPUT]" exit -1 fi URL=$1 FILE=$2 if [ -z "$2" ] then FILE=$1 FILE=${FILE##*/} FILE=${FILE%%\?*} fi if [ -z "$FILE" ]; then DT=$(date "+%Y.%m.%d-%H.%M.%S") FILE="print".$DT.noext fi wget -q "$URL" -O "~/print/$FILE" if [ $? -ne 0 ]; then echo wget failed exit $? fi echo $URL :: $FILE if [[ -f "~/print/$FILE" ]]; then lp -d hp ~/print/$FILE echo "$FILE printed" fi