Telegram bot: nyomtassunk távoli nyomtatón

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