CUPS printserver kicsit másként

Fórumok

CUPS printserver kicsit másként

Hozzászólások

Sziasztok!

egy érdekes dolgot szeretnék megvalósítani:

adott lenne egy print szerver (gondolok én debian-ra és cups-ra)és egy nyomtató ami csak ezen a gépen keresztül érhető el. lan -ról ablakos ( samba?) és pingvines gépek is használnák.

eddig semmi extra nincs a dologban, most jön viszont az izgi része, mert azt kellene megoldani, hogy ha valaki nyomtatna akkor azt a szerver tárolná és csak akkor kerülne kinyomtatásra, ha a user a nyomtató mellett elhelyezett printserveren bepötyögné (esetleg egy erre összedobott kis frontend-en) a felhasználónevét/jelszavát...

tehát a következő dolgok várnak megoldásra:

- nyomtatandó feladatok tárolása printszerveren
- ugyan ezen feladatok egyértelmű azonosítása, hogy melyik usertől jött
- nyomtatás megfelelő lokális azonosítás esetén

ha ezek megvannak, akkor már gyerekjáték mondjuk olyat csinálni, hogy ha pl meghatározott időkorlátot átlép a queue akkor törlődik, loganalízist/statisztikát készíteni, de az első része elég combos feladatnak néz ki, legalábbis ahogy keresgéltem nemigazán találtam semmi útmutatást/ötletet a megvalósításhoz!

szívesen veszek minden segítséget/tapasztalatot, bármit ami segíthet!

köszi!

Ha nyomtacc a cups-al akkor megjegyzi melyik user nyomtatott,
mit és mikor(jobs).
Linuxról biztosan, a winről más pite, de gondlom ott is.

hát igen... de ez még csak a legkisebb része a dolognak :(

" nyomtatás megfelelő lokális azonosítás esetén"

A cupsd.conf ban megadod hogy csak mely ip-kről fogadja a
kérést és ezzel el van intézve.
Allow From ipcim

A loggolás megy mi kell még?

nem igazán erre gondoltam... a lényeg pontosan azon van, hogy akárki is küldhet nyomatnivalót (vagy akár lehet előzetes azonosítás esetén) de a szerver csak akkor nyomtassa ki, ha helyszínen (nyomtatónál) azonosította magát.

amit mondtál az pedig erre sajna nem jó...

hat en nem ertem minek bonyolitod igy el a dolgot... :)
mazoista vagy? :)

[quote:878b3beaa6="sutyee"]hat en nem ertem minek bonyolitod igy el a dolgot... :)
mazoista vagy? :)

:lol: csupán saját magam szivatása céljából nem csinálnék ilyet ;)

a helyzet az, hogy ez a szitu ami megoldásra vár és a dokumentumok meg a környezet kényessége miatt ez az egy megoldás járja...

"de a szerver csak akkor nyomtassa ki, ha helyszínen (nyomtatónál) azonosította magát)
Ha az user "hozzáfér" egy géphez akkor használhatja.
A "távoli" gépeken nincs azonosítás?
sztem ez egyszerűbb.

A kinyomtatott doksit nem láthatja más?
Vagy mi van?

távoli gépeken is van azonosítás ... természetesen ...

viszont ezen kívűl sajnos csak ismételni tudom magam, miszerint a cél az, hogy a printszerver csak akkor nyomtassa ki a cuccot, ha ott helyben azonosítja magát. igazából nem nagyon akarom feszegetni a miértet, hanem a hogyan a fontos. a miértről annyit, hogy egymás dolgait sem láthatják minden esetben hiába dolgoznak egy helyen. így ha printserveren meg lehetne oldani, hogy parancssorbór indítsam a várakozó nyomtatnivalókat, akkor írnék hozzá egy frontendet és így az éppen helyben azonosított felhasználó várakozó doksijai kinyomódnának...

nah ezt kellene összeheggeszteni valahogy...

Egyszerubb ha nem cups-ot hasznalsz, hanem jo oreg lpd-t. Ott egy interface script fogadja a fogadnivalot, ami interface scriptben barmit csinalhatsz vele - eltarolhatod egy adatbazisba, atkonvertalhatod pdf-fe es visszakuldheted emailbe, stb.

Ha megvan ez az interface script (ami mondjuk betolja egy adatbazisba, vagy egy konyvtarba) akkor mar csak a webes frontendet kell megirnod, ami innen tovabbloki az igazi nyomtatora. Ez a webes frontend lehet egy sima cgi, amit egy olyan user neveben futtatsz, akinek egyeduli joga van nyomtatni arra a bizonyos nyomtatora.

Persze CUPS-ba is beregisztralhatod az lpd-s nyomtatodat, mint remote printer, es akkor az egesz osszeer teljesen:)

hmm... érdekesnek és megfelelőnek hangzik, csak nem áll valami közel hozzám lpd (még) szóval utánaolvasgatok...

ha esetleg volna valami példád az interface scriptben való buherálásra annak örülnék és persze minden további ötlet is jöhet!

Hmm, kozben rajottem, hogy amit irtam az Solarison mukodik, de Linuxon nem biztos...

http://playground.sun.com/printing/documentation/interface.html

Update: de kozben rajottem, hogy cups is tud interface scripteket hasznalni:

lpadmin man page-rol:

-i interface
Copies the named interface script to the printer. Interface scripts are used by System V printer drivers. Since all filtering is disabled when using an interface script, scripts generally should not be used unless there is no other driver for a printer.

Interfész szkript csal AT&T-féle lp-spooler-ben van. Ezzel szemben a jó öreg lpd-nél filter szkript van. Ami ugyanaz, csak más néven. Szóval a dolog megoldható. A filter-t az lpd úgy indítja el, hogy az adat jön stdin-ről, a filter stdout-ja pedig a nyomtató eszköz. Amúgy itt egy létező inputfilter:
#!/bin/sh
#
# hpif - Simple text input filter for lpd for HP-PCL based printers
# Installed in /usr/local/libexec/hpif
#
# Simply copies stdin to stdout. Ignores all filter arguments.
# Tells printer to treat LF as CR+LF. Writes a form feed character
# after printing job.

printf "\033&k2G" && cat && printf "\f" && exit 0
exit 2

SZVSZ a legegyszerűbb megoldás, ha a userek a nyomtató helyett egy cups-pdf backend-re nyomtatnak, ami bepakolja a user home-jában egy cups-pdf könyvtárba a print jobot pdf formátumban. (Ebben nem vagyok teljesen biztos, hogy távolról is működőképes, de szvsz nincs elvi akadálya) Aztán átcaplatnak a nyomtatóhoz, beloggolnak a másik gépre, az .bashrc-ből kinyomtatja a cuccot és törli a nyomtatott pdf-eket. Aztán a queue cleanup mehetne úgy, hogy cron-ból fut egy szkript x percenként, ami megnézi a /home alatt az összes pdf mtime-ját és a bizonyos időpontnál régebbieket törli. Ehhez persze az kell, hogy a print job biztosan annak a user-nek a nevében érkezzen a cups-hoz, akihez tartozik.

akkor az szerinted járható út lenne, hogy a csinálnék egy filtert amiben nem tolnék ki semmit sem stdout -ra, hanem egy meghatározott file-ba menteném el vagy adatbázisba tárolnám, plusz menteném, hogy melyik felhasználóhoz tartozik stb., majd legközelebb ha serveren azonosítja magát, akkor pedig ezt a file-t adom lpd-n keresztül nyomtatónak?

[quote:c72c56d17e="coder"]akkor az szerinted járható út lenne, hogy a csinálnék egy filtert amiben nem tolnék ki semmit sem stdout -ra, hanem egy meghatározott file-ba menteném el vagy adatbázisba tárolnám, plusz menteném, hogy melyik felhasználóhoz tartozik stb., majd legközelebb ha serveren azonosítja magát, akkor pedig ezt a file-t adom lpd-n keresztül nyomtatónak?

Igen, erre gondoltam.