SMB-Howto Autor:David Wood, dwood@plugged.net.au v1.0, 10 August 1996 WWeerrssjjaa ppoollsskkiieeaa:: BBaarrttoosszz MMaarruusszzeewwsskkii BB..MMaarruusszzeewwsskkii@@zzssmmeeiiee..ttoorruunn..ppll v1.12, 26 Lipca 1997 Jest to dokument z serii HOWTO (Jak To Zrobiæ). Opisuje on jak u¿ywaæ Session Message Protocol, zwanego te¿ NetBIOS lub LanManager z Linux- em. Dokument ten zosta³ napisany w standardzie ISO-8859-2. Orygina³ mo¿na znale¼æ pod adresem ftp.icm.edu.pl w katalogu /pub/Linux/sun site/docs/HOWTO. ______________________________________________________________________ Table of Contents: 1. Wprowadzenie. 1.1. Dalsze informacje. 2. Instalacja. 3. Uruchamianie demonów. 4. Ogólna konfiguracja. (/etc/smb.conf) 5. Udostêpnianie dysku Linux-owego komputerom z Windows. 6. Udostêpnianie dysku spod Windows maszynom z Linux-em. 7. Udostêpnianie drukarki Linux-owej komputerom z Windows. 8. Udostêpnianie drukarki spod Windows komputerom z Linux-em. 9. Prawa autorskie i Zakoñczenie. 9.1. Prawa autorskie. 9.2. Podziêkowania. 9.3. Od t³umacza. ______________________________________________________________________ 11.. WWpprroowwaaddzzeenniiee.. Jest to dokument z serii HOWTO (Jak To Zrobiæ). Opisuje on jak u¿ywaæ z Linuxem Session Message Protocol, zwanego te¿ NetBIOS lub LanManager. Dokument ten jest prowadzony przez Davida Wooda dwood@plugged.net.au. Wszelkie dodatki, modyfikacje lub poprawki mog± byæ przes³ane do mnie, aby je pó¼niej umie¶ciæ w nastêpnej wersji. Protokó³ SMB u¿ywany jest przez Microsoft Windows 3.11, NT i 95 aby wspó³dzieliæ zasoby dyskowe i drukarki. Maszyny Unix-owe (w tym tak¿e Linux) mog± korzystaæ z tych zasobów u¿ywaj±c narzêdzi stworzonych przez Andrew Tridgella. S± cztery rzeczy, które mo¿na zrobiæ Samb±: 1. Udostêpniaæ dysk Linux-owy dla komputerów z Windows. 2. Udostêpniaæ dysk Windows-owy dla komputerów z Linux-em. 3. Udostêpniaæ drukarkê pod Linux-em dla Windows. 4. Udostêpniaæ drukarkê pod Windows dla Linux-a. Wszystko to zosta³o opisane w tym dokumencie. Disclaimer. Procedury i skrypty albo dzia³a³y u autora, albo zosta³y opisane jako dzia³aj±ce przez tych, którzy je napisali. Ró¿ne konfiguracje mog± nie dzia³aæ z podanymi tutaj informacjami. Je¶li odkryjesz tak± sytuacjê mo¿esz napisaæ do autora list z sugesti± na ulepszenie tego dokumentu, ale autor nic nie gwarantuje. A czego siê spodziewa³e¶ ? W koñcu autor jest tyklo konsultantem. 11..11.. DDaallsszzee iinnffoorrmmaaccjjee.. Dokument ten jest prób± opisania jak skonfigurowaæ na Linux-ie podstawowe serwisy SMB zwi±zane z plikami i drukarkami. Samba jest bardzo z³o¿onym i kompletnym pakietem. Nie ma sensu, ¿eby kopiowaæ tutaj wszystko to co jest zawarte w dokumentacji dla tego pakietu. Dalszych informacji mo¿esz szukaæ w: · Dokumentacji do Samby, która jest czê¶ci± dystrybucji. Dystrybucja jest dostêpna pod adresem: ftp.icm.edu.pl · HOWTO dotycz±cym drukowania (Printing HOWTO) · oraz w mini-HOWTO Print2Win. 22.. IInnssttaallaaccjjaa.. Naj¶wie¿sze ¼ród³a Samby dostêpne s± pod adresem ftp.icm.edu.pl w katalogu /pub/samba. Je¶li instalowa³e¶ dystrybucjê Red Hat mog³e¶ wybraæ instalacjê Samby jako jedn± z opcji. Niektóre inne dystrybycje te¿ oferuj± binaria Samby. Nastêpuj±ce demony s± wymagane do pracy z Samb±. Zwykle znajduj± siê one w katalogu /usr/sbin i s± uruchamiane w momencie startu systemu albo przez demon inetd. Przyk³adowe skrypt znajduj± siê w sekcji ``Uruchamianie demonów.'' ______________________________________________________________________ smbd (Demon SMB) i nmbd (¦wiadczy us³ugi nameservera NetBIOS-u) ______________________________________________________________________ Zwykle w systemie instalowane s± nastêpuj±ce binaraia w katalogu /usr/bin: ______________________________________________________________________ smbclient (Klient dla maszyn Unix-owych), smbprint (skrypt do drukowania na drukarce przy³±czonej do hosta SMB), smbprint.sysv (To samo co wcze¶niej, ale dla systemu UNIX SVR4), smbstatus (Wy¶wietla bie¿±ce po³±czenia SMB na lokalnym ho¶cie), smbrun (G³ówny skrypt do uruchamiania aplikacji na ho¶cie SMB) ______________________________________________________________________ Dodatkowo zawarty jest w tym dokumencie skrypt o nazwie "print", który jest po¿ytecznym dokoñczeniem skryptu smbprint. Pakiet Samba jest prosty w instalacji. ¦ci±gnij go z podanego wcze¶niej miejsca i przeczytaj plik README znajduj±cy siê w dystrybucji. Jest jeszcze plik docs/INSTALL.txt, który podaje krok po kroku co nale¿y zrobiæ, aby zainstalowaæ Sambê. Postêpuj±c wraz z instalacj±, umie¶æ demony w /usr/sbin i binaria w /usr/bin. Zainstaluj strony do podrêcznika systemowego "man" w /usr/local/man. Kiedy bêdziesz instalowa³ pakiet Samba, bêdziesz musia³ podaæ miejsce, gdzie ma siê znajdowaæ plik konfiguracyjny smb.conf. Z regu³y jest to katalog /etc, ale mo¿esz go umie¶ciæ, gdzie ci siê podoba. Dla dalszych instrukcji za³o¿ymy, ¿e plik konfiguracyjny umie¶ci³e¶ w /etc, plik loguj±cy to /var/log/samba-log.%m i katalog blokuj±cy to /var/lock/samba. Zainstaluj plik konfiguracyjny smb.conf. Przejd¼ do katalogu, gdzie zosta³a skompilowana Samba. Zajrzyj do katalogu examples/simple i przeczytaj plik README. Skopiuj znaleziony tam plik smb.conf do /etc. OOSSTTRROO¯¯NNIIEE !!!!!! Je¶li masz dystrybucjê Linux-a, która mia³a Sambê i zainstalowa³e¶ j± to pewnie masz ju¿ plik smb.conf w katalogu /etc i lepiej zacznij od tego pliku. Je¶li nie chcesz umieszczaæ pliku konfiguracyjnego w /etc, to umie¶æ go tam, gdzie chcesz i zrób symboliczne do³±czenie: ______________________________________________________________________ ln -s /gdzie/jest/smb.conf /etc/smb.conf ______________________________________________________________________ 33.. UUrruucchhaammiiaanniiee ddeemmoonnóóww.. Dwoma demonami SMB s±: /usr/sbin/smbd i /usr/sbin/nmbd. Mo¿esz je uruchomiæ przez demona inetd lub jako osobne procesy. Je¶li konfigurujesz na sta³e serwer plikowy, to powinny one byæ uruchamiane przez inetd po to, ¿eby je ponownie uruchomiæ je¶li z jakiego¶ powodu przestan± dzia³aæ. Je¶li chcesz korzystaæ z Samby tylko czasami, to mo¿esz je uruchomiæ z którego¶ ze skryptów startowych w katalogu /etc/rc.d albo po prostu od rêki wtedy kiedy je potrzebujesz. Aby uruchomiæ demony przez inetd umie¶æ nastêpuj±ce linie w pliku /etc/inetd.conf: ______________________________________________________________________ Serwis NetBIOS dla Samby # netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd ______________________________________________________________________ Nastêpnie wy¶lij sygna³ HUP do procesu nr 1: ______________________________________________________________________ kill -HUP 1 ______________________________________________________________________ Dla u¿ytkowników dystrybucji Red Hat. Aby uruchomiæ te demony ze skryptów startowych, umie¶æ nastêpuj±cy skrypt w katalogu /etc/rc.d/init.d/smb i do³±cz je symbolicznie do plików podanych w komentarzu: ______________________________________________________________________ #!bin/sh # # /etc/rc.d/init.d/smb - startuje i zatrzymuje serwis SMB # # Nastêpuj±ce pliki powinny byæ symbolicznymi do³±czeniami do # tego pliku: # /etc/rc.d/rc1.d/K35smb (Zatrzymuje serwis SMB podczas # zamkniêcia systemu. # /etc/rc.d/rc3.d/S91smb (Startuje serwis SMB w trybie # wielou¿ytkownikowym # /etc/rc.d/rc6.d/K35smb (zatrzymuje serwis SMB podczas resetu) # # Biblioteka funkcji etc/rc.d/init.d/functions # Konfiguracja sieci etc/sysconfig/network # Sprawd¼ czy jeste¶my w sieci [ ${NETWORKING} = "no" ] && exit 0 # Zobacz jak zostali¶my wywo³ani case "$1" in start) echo -n "Starting SMB services: " daemon smbd -D daemon nmbd -D echo touch /var/lock/subsys/smb ;; stop) echo -n "Shutting down SMB services: " killproc smbd killproc nmbd rm -f /var/lock/subsys/smb echo "" ;; *) echo "Usage: smb {start|stop}" exit 1 esac ______________________________________________________________________ Od t³umacza: Je¶li u¿ywasz dystrybucji Slackware. Umie¶æ poni¿szy fragment w skrypcie startowym /etc/rc.d/rc.local: ______________________________________________________________________ # czy jeste¶my w sieci [ ${NETWORKING} = "no" ] && exit 0 # Uruchmon demony Samby /usr/sbin/smbd -D /usr/sbin/nmbd -D ______________________________________________________________________ 44.. OOggóóllnnaa kkoonnffiigguurraaccjjaa.. ((//eettcc//ssmmbb..ccoonnff)) Konfiguracja Samby na Unix-ie jest kontrolowana jednym plikiem: /etc/smb.conf. W pliku tym umieszczasz zasoby jakie chcesz udostêpniæ dla ¶wiata i jakie restrykcje chcesz wprowadziæ. Poniewa¿ ta sekcja opisuje udostêpnianie dysków i drukarek Linux-owych Windowsom, plik smb.conf bêdzie najprostszym z mo¿liwych. Nie martw siê o szczegó³y. Pó¼niejsze sekcje wprowadz± ogólny koncept. Ka¿da sekcja pliku zaczyna siê od nazwy jak np.: global, homes, printers itp. Sekcja global definiuje kilka ogólnych zmiennych, które bêd± siê odnosiæ do wszystkich udostêpnianych zasobów. Sekcja homes pozwala u¿ytkownikom na dostêp do ich (i tyklo ich) katalogów domowych na lokalnej maszynie Linux-owej. Je¶li jaki¶ u¿ytkownik Windows bêdzie chcia³ skorzystaæ z udostêpnianych zasobów, to zostanie pod³±czony do swojego katalogu domowego. Zauwa¿, ¿e aby to zrobiæ u¿ytkownik musi mieæ swoje konto na maszynie Linux-owej. Poni¿szy przyk³adowy plik smb.conf pozwala u¿ytkownikom na dostêp do swoich katalogów domowych i na zapis do katalogu tymczasowego. Aby u¿ytkownik Windows zobaczy³ udostêpniane zasoby, Linux musi byæ w tej samej sieci lokalnej. U¿ytkownik Windows po prostu do³±cza dysk sieciowy z Mened¿era Plików lub Eksploratora Windows. W nastêpnych sekcjach bêd± dodawane kolejne linie do tego pliku, aby umo¿liwiæ dostêp do wiêkszej ilo¶ci zasobów. ______________________________________________________________________ etc/smb.conf ; ; Po wprowadzeniu zmian do tego pliku zrestartuj demony Samby ; kill -9 `pidof smbd`; kill -9 `pidof nmbd` ; /usr/sbin/smbd; /usr/sbin/nmbd [global] Umie¶æ to w pliku je¶li chcesz konto anonimowe guest account = nobody log file = /var/log/samba-log.%m lock directory = /var/lock/samba share modes = yes [homes] comment = Katalogi Domowe browseable = no read only = no create mode = 0750 [tmp] comment = Miejsce na pliki tymczasowe path = /tmp read only = no public = yes ______________________________________________________________________ 55.. UUddoossttêêppnniiaanniiee ddyysskkuu LLiinnuuxx--oowweeggoo kkoommppuutteerroomm zz WWiinnddoowwss.. Jak widaæ na powy¿szym przyk³adzie udostêpnianie dysków Linux-owych u¿ytkownikom Windows jest proste. Dostêp do zasobów udostêpnianych poprzez Sambê mo¿na w bardzo du¿ym stopniu kontrolowaæ. Aby udostêpniæ wszystkim jakie¶ zasoby, dodaj poni¿sze linie do smb.conf: ______________________________________________________________________ [public] comment = Public Stuff path = /home/public public = yes writable = yes printable = yes ______________________________________________________________________ Aby umo¿liwiæ zapis do tego katalogu tylko dla cz³onków grupy staff, zmodyfikuj te linie w nastêpuj±cy sposób: ______________________________________________________________________ [public] comment = Public Stuff path = /home/public public = yes writable = yes printable = no write list = @staff ______________________________________________________________________ Wiêcej informacji na temat ró¿nych sposobów udostêpniania zasobów znajdziesz w dokumentacji do Samby. 66.. UUddoossttêêppnniiaanniiee ddyysskkuu ssppoodd WWiinnddoowwss mmaasszzyynnoomm zz LLiinnuuxx--eemm.. Wraz z dystrybucj± Samby otrzymujemy klienta dla Unix-ów. Jego interfejs poleceñ jest podobny do ftp. Mo¿esz go u¿ywaæ, aby przenosiæ pliki miêdzy Windowsowym "serwerem" a klientem Linux-owym. Aby zobaczyæ jakie zasoby sa udostêpnione na danym ho¶cie napisz: ______________________________________________________________________ /usr/sbin/smbclient -L host ______________________________________________________________________ gdzie host jest nazw± maszyny, której zasoby chcesz zobaczyæ. Polecenie to zwróci listê nazw serwisów - to znaczy nazw dysków lub drukarek, które mo¿e udostêpniæ. Serwer Samby bêdzie ciê pyta³ o has³o, o ile nie ma skonfigurowanego bezpiecznego dostêpu. Np. ______________________________________________________________________ smbclient -L zimmermann ______________________________________________________________________ Polecenie to powinno wy¶wietliæ co¶ na kszta³t: ______________________________________________________________________ Server time is Sat Aug 10 15:58:27 1996 Timezone is UTC+10.0 Password: Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51] Server=[ZIMMERMAN] User=[] Workgroup=[WORKGROUP] Domain=[] Sharename Type Comment --------- ---- ------- ADMIN$ Disk Remote Admin public Disk Public C$ Disk Default share IPC$ IPC Remote IPC OReilly Printer OReilly print$ Disk Printer Drivers This machine has a browse list: Server Comment --------- ------- HOPPER Samba 1.9.15p8 KERNIGAN Samba 1.9.15p8 LOVELACE Samba 1.9.15p8 RITCHIE Samba 1.9.15p8 ZIMMERMAN ______________________________________________________________________ Browse list pokazuje inne serwery SMB udostêpniaj±ce zasoby w sieci. Aby u¿yæ klienta napisz: ______________________________________________________________________ /usr/sbin/smbclient serwis <has³o> ______________________________________________________________________ gdzie serwis jest nazw± maszyny i zasobu. Na przyk³ad je¶li próbujesz dostaæ siê do katalogu, który jest udostêpniany jako public na maszynie o nazwie zimmermann, serwisem by³oby: \zimmermanublic. Chocia¿ z powodu pow³oki w Linux-ie bêdziesz musia³ oznaczyæ znaki specjalnie i polecenie ostatecznie wygl±da tak: ______________________________________________________________________ usr/sbin/smbclient \\\\zimmerman\\public has³o ______________________________________________________________________ gdzie has³o jest ³añcuchem znaków bêd±cym twoim has³em. Pojawi siê wtedy znak zachêty klienta Samby: ______________________________________________________________________ Server time is Sat Aug 10 15:58:44 1996 Timezone is UTC+10.0 Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51] smb: \> ______________________________________________________________________ Napisz 'h', aby uzyskaæ pomoc: ______________________________________________________________________ smb: \> h ls dir lcd cd pwd get mget put mput rename more mask del rm mkdir md rmdir rd prompt recurse translate lowercase print printmode queue cancel stat quit q exit newer archive tar blocksize tarmode setmode help ? ! smb: \> ______________________________________________________________________ Je¶li umiesz u¿ywaæ ftp, to nie powiniene¶ potrzebowaæ czytaæ podrêcznika systemowego na temat smbclient. 77.. UUddoossttêêppnniiaanniiee ddrruukkaarrkkii LLiinnuuxx--oowweejj kkoommppuutteerroomm zz WWiinnddoowwss.. Aby udostepniæ drukarkê Linux-ow± Windowsom musisz siê upewniæ, ¿e drukarka dzia³a dobrze pod Linux-em. Je¶li mo¿esz drukowaæ spod Linux- a to ustawienie serwera SMB dla drukarki jest bardzo proste. Przeczytaj Priniting-HOWTO na temat ustawienia drukarki pod Linux-em. Poniewa¿ autor u¿ywa drukarki po³±czonej z Windows NT, sekcja ta nie powinna byæ brana za definicjê, ale bardziej jako sugestia. Je¶li ktokolwiek ma ochotê siê podzieliæ szczegó³ami na temat innych konfiguracji proszê o kontakt, aby ta sekcja mog³a zostaæ skoñczona: dwood@plugged.net.au. Dodaj konfiguracjê na temat drukowania do smb.conf: ______________________________________________________________________ [global] printing = bsd printcap name = /etc/printcap load printers = yes log file = /var/log/samba-log.%m lock directory = /var/lock/samba [printers] comment = Wszystkie drukarki security = server path = /var/spool/lpd/lp browseable = no printable = yes public = yes writable = no create mode = 0700 [ljet] security = server path = /var/spool/lpd/lp printer name = lp writable = yes public = yes printable = yes print command = lpr -r -h -P %p %s ______________________________________________________________________ Upewnij siê, ¿e ¶cie¿ka do drukarki (w tym wypadku w sekcji ]ljet[) jest taka sama jak katalog zadañ w etc/printcap. UWAGA: S± pewne problemy przy udostêpnianiu drukarki Unixowej przez Sambê komputerom z Windows NT. Jeden problem to taki, ¿eby NT widzia³o poprawnie drukarkê. Aby go zlikwidowaæ przeczytaj plik docs/WinNT.txt, który jest dostarczany wraz z dystrybucj±. Drugi problem to has³a. Przeczytaj ten sam plik, aby rozwi±zaæ ten problem. 88.. UUddoossttêêppnniiaanniiee ddrruukkaarrkkii ssppoodd WWiinnddoowwss kkoommppuutteerroomm zz LLiinnuuxx--eemm.. Aby udostêpniæ drukarkê spod Windows-ów musisz zrobiæ nastêpuj±ce rzeczy: a) Musisz mieæ poprawne pola w /etc/printcap i musz± one odpowiadaæ lokalnej strukturze katalogów (katalog dla drukarki itp.) b) Musisz mieæ skrypt /usr/bin/smbprint. Skrypt ten znajduje siê w ¼ród³ach Samby, ale nie w ka¿dym pakiecie binarnym. Poni¿ej znajduje siê trochê zmodyfikowana wersja tego skryptu. c) Je¶li chcesz zamieniaæ pliki ASCII na PostScript, musisz mieæ nenscript albo jego ekwiwalent. nenscript jest konwerterem PostScript- owym i jest z regu³y instalowany w /usr/bin. d) Mo¿esz u³atwiæ drukowanie poprzez Sambê pisz±c skrypt. Poni¿ej podany jest prosty skrypt w Perl-u obs³uguj±cy pliki ASCII, PostScript i stworzony PostScript. Poni¿sze pola w /etc/printcap s± dla drukarki HP 5MP do³±czonej do komputera z Windows NT. ______________________________________________________________________ cm - komentarz; lp - urz±dzenie, na które ma byæ wys³any wydruk; sd - katalog zadañ dla drukarki (na lokalnym komputerze); af - katalog accounting; mx - maksymalny rozmiar pliku (0 - bez ograniczenia); if - nazwa filtru wej¶ciowego (skryptu). ______________________________________________________________________ Wiêcej informacji znajdziesz w Printing-HOWTO lub w podrêczniku systemowym dla "printcap". ______________________________________________________________________ etc/printcap # # //zimmerman/oreilly przez smbprint # lp:\ cm=HP 5MP Postscript OReilly na zimmerman:\ lp=/dev/lp1:\ :sd=/var/spool/lpd/lp:\ af=/var/spool/lpd/lp/acct:\ mx#0:\ :if=/usr/bin/smbprint: ______________________________________________________________________ Upewnij siê, ¿e katalogi zadañ i accounting istniej± i s± zapisywalne oraz ¿e if ma poprawn± ¶cie¿kê do scryptu smbprint (patrz poni¿ej) i ¿e lp wskazuje poprawne urz±dzenie (plik specjalny w katalogu /dev) Nastêpnym krokiem jest skrypt smbprint. Zwykle znajduje siê on w /usr/bin i jest przypisywany Andrew Tridgellowi - osobie, która stworzy³a Sambê o ile wiem. Przychodzi on wraz z dystrybucj± ¼róde³ Samby, ale nie ma go w dystrybucji binariów, wiêc go tutaj stworzy³em. Mo¿esz przejrzeæ go dok³adniej. Przerobi³em go trochê, poniewa¿ przeróbki wydawa³y mi siê u¿yteczne. ______________________________________________________________________ #!/bin/sh # Skrypt ten jest filtrem wej¶ciowym do drukowania na drukarce # do³±czonej do Unix-a. U¿ywa programu smbclient do drukowania # pliku. Na przyk³ad twój printcap móg³by wygl±daæ nastepuj±co: # # # smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint # # # Stworzy³by on drukarkê o nazwie smb, która drukowa³aby poprzez # ten skrypt. Musia³by¶ stworzyæ katalog zadañ /usr/spool/smb z # odpowiednimi dla twojego systemu prawami dostêpu i w³a¶cicielem. # # Ustaw nastêpuj±ce rzeczy na serwer i serwis przez, który chcesz # drukowaæ. W tym przyk³adzie mam PC-ta z WfWg o nazwie "lapland", # który ma drukarkê o nazwie printer bez has³a. # # # W dalszej czê¶ci skrypt zosta³ przerobiony przez hamilton@ecnz.co.nz # (Michael Hamilton, tak aby serwer, serwis i has³o mog³y byæ # przeczytane z pliku /usr/var/spool/lpd/PRINTNAME/.config # # Aby to dzia³a³o /etc/printcap musi mieæ pole af: # # cdcolour:\ cm=CD IBM Colorjet on 6th:\ sd=/var/spool/lpd/cdcolour:\ # :af=/var/spool/lpd/cdcolour/acct:\ if=/usr/local/etc/smbprint:\ # :mx=0:\ lp=/dev/null: # # Plik /usr/var/spool/lpd/PRINTNAME/.config powinien zawieraæ: # server=PC_SERVER service=PR_SHARENAME password="password" # # Np. server=PAULS_PC service=CJET_371 password="" # # Plik, do którego maj± byc zapisywane wiadomo¶ci ze ¶ledzenia; # mo¿esz zmieniæ na /dev/null je¶li chcesz: # logfile=/tmp/smb-print.log logfile=/dev/null # # Ostatnim parametrem do filtra jest nazwa pliku accounting. # spool_dir=/var/spool/lpd/lp config_file=$spool_dir/.config # Powinien czytaæ te zmienne z pliku konfiguracyjnego: serwer # serwis has³o u¿ytkownik eval `cat $config_file` # Trcohê pomocy, zmieñ >> na > je¶li chcesz zachowaæ trochê # miejsca na dysku. # echo "server $server, service $service" >> $logfile (UWAGA Mo¿esz dodaæ liniê `echo translate' jesli chcesz # automatycznego t³umaczenia CR/LF podczas drukowania. echo translate echo "print -" cat ) | /usr/bin/smbclient "\\\\$server\\$service" $password -U $user -N -P >> $logfile ______________________________________________________________________ Wiêkszo¶æ dystrybucji Linux-owych posiada nenscript do zamiany dokumentów ASCII na PostScript. Nastêpuj±cy skrypt w Perl-u u³atwia ¿ycie stwarzaj±c prosty interfejs dla drukowania w Linux-ie przez smbprint. ______________________________________________________________________ Stosowanie: print [-a|c|p] <nazwa_pliku> -a drukuje <nazwa_pliku> jako ASCII; c drukuje <nazwa_pliku> sformatowane jako ¼ród³o; -code p drukuje <nazwa_pliku> jako PostScript. Je¶li nie ma ¿adnej opcji, print próbuje odgadn±æ typ pliku i odpowiednio go wydrukowaæ. ______________________________________________________________________ U¿ycie smbprint do drukowania plików ASCII powoduje obcinanie d³ugich linii. Ten skrypt dzieli d³ugie linie w miejscu spacji (zamiast w ¶rodku s³owa) je¶li jest to mo¿liwe. Formatowanie ¼ród³a odbywa sie przy pomocy programu nenscript. Bierze on plik ASCII i formatuje go w dwie kolumny z dodatkowym nag³ówkiem (data, nazwa pliku, itp.) Zlicza tak¿e ilo¶æ linii. Wzoruj±c siê na tym przyk³adzie mo¿esz zrobiæ inne typy formatowania. Dokumenty PostScript-owe s± ju¿ sformatowane wiêc przechodz± bezpo¶rednio do drukarki. ______________________________________________________________________ usr/bin/perl # Skrypt: print Autorzy: Brad Marshall, David Wood # Plugged In Communications Date: 960808 # # Skrypt do drukowania na drukarce oreilly, która jest do³±czona do # komputera zimmerman. Opis dzia³ania: Jako argumenty przyjmuje pliki # ró¿nych typów i wysy³a je odpowiednio do skryptu drukujacego Samby # # Obecnie obs³ugiwane typy plików: # # ASCII - Upewnij siê, ¿e linie d³u¿sze ni¿ $line_length zosta³y # podzielone w miejscu spacji. # PostScript - Nie robi nic. # Code - Formatuje na PostScript u¿ywaj±c "nenscript", aby wszystko # by³o odpowiednio wy¶wietlone (u³o¿enie, czcionki, itd.) # # # Ustaw maksymaln± ilo¶æ znaków w linii dla plików ASCII. line_length $= 76; # Ustaw ¶cie¿kê i nazwê skryptu drukuj±cego Samby print_prog = $"/usr/bin/smbprint"; # Ustaw ¶cie¿kê i nazwê "nenscript-u" (zamiana ASCII-->PostScript) $nenscript = "/usr/bin/nenscript"; unless ( -f $print_prog ) { die "Can't find $print_prog!"; } unless ( -f $nenscript ) { die "Can't find $nenscript!"; } &ParseCmdLine(@ARGV); # DBG print "filetype is $filetype\n"; if ($filetype eq "ASCII") { ero;wrap($line_length); elsif ($filetype eq &"code") { } ero;codeformat; elsif ($filetype eq "ps") { &createarray; else { } print "Sorry..no known &file type.\n"; exit } 0; } # Wy¶lij tablcê do smbprint open(PRINTER, "|$print_prog") || die "Can't open $print_prog: $!\n"; foreach $line (@newlines) { print PRINTER $line; } # Wy¶lij dodatkowy znak LF je¶li plik ma niekompletn± ostatni± liniê. print PRINTER "\n"; close(PRINTER); print "Completed\n"; exit 0; # --------------------------------------------------- # # Wszystko poni¿ej jest procedur± # # --------------------------------------------------- # sub ParseCmdLine { Interpretuje wiersz poleceñ, szukaj±c jakiego typu jest # plik # Gets $arg and $file to be the arguments (if they exists) and the # filename if ($#_ < 0) { ero;usage; } # DBG foreach $element (@_) { print "*$element* \n"; # } $arg = shift(@_); if ($arg =~ /\-./) { cmd = $arg; DBG print "\$cmd found.\n"; $file = shift(@_); else { file = $arg; } # Definiowanie typu pliku dopóki ($cmd) { Nie mamy argumentów if ($file =~ /\.ps$/) { filetype = "ps"; elsif ($file =~ $/\.java$|\.c$|\.h$|\.pl$|\.sh$|\.csh$|\.m4$|\.inc$|\.html$|\.htm$/) ${ filetype = "code"; else { filetype = "ASCII"; } # Przerób $file odpowiednio do jego typu i zwróæ $filetype } else { Mamy typ pliku w $arg if ($cmd =~ /^-p$/) { filetype = "ps"; elsif ($cmd =~ $/^-c$/) { filetype } = "code"; elsif ($cmd =~ $/^-a$/) { } filetype = "ASCII" } } } sub usage { print " Stosowanie: print [-a|c|p] <plik> -a drukuje <plik> jako ASCII c drukuje <plik> sformatowany jako ¼ród³o -code p drukuje <plik> jako PostScript Je¶li nie ma ¿adnej opcji, print próbuje odgadn±æ typ pliku i odpowiednio go wydrukowaæ.\n "; exit(0); } sub wrap { Stwórz tablicê linii w pliku, gdzie ka¿da linia jest krótsza od # podanej ilo¶ci znaków i jest podzielona tylko w miejscach spacji # Pobierz ilo¶æ znaków jaka mo¿e byæ w linii. limit = $pop(@_); # DBG print "Entering subroutine wrap\n"; print "The line length #limit is $limit\n"; # Wczytaj plik, sformatuj i umie¶æ w tablicy. open(FILE, "<$file") || die "Can't open $file: $!\n"; while(<FILE>) { $line = $_; # DBG print "The line is:\n$line\n"; # Podziel liniê je¶li jest d³u¿sza ni¿ podana ilo¶æ znaków. while ( length($line) > $limit ) { # DBG print "Wrapping..."; # Pobierz pierwsze $limit+1 znaków. part = $substr($line,0,$limit +1); # DBG print "The partial line is:\n$part\n"; # Sprawd¼ czy ostatni znak jest spacj±. $last_char = substr($part,-1, 1); if ( " " eq $last_char ) { Je¶li tak, wydrukuj resztê. # DBG print "The last character was a space\n"; substr($line,0,$limit + 1) = ""; substr($part,-1,1) = ""; push(@newlines,"$part\n"); } else { Je¶li nie, znajd¼ ostatni± spacjê w # pod-linii i drukuj do niej # DBG print "The last character was not a #space\n"; # Usuñ znaki dalsze ni¿ $limit substr($part,-1,1) = ""; Odwróæ liniê # aby u³atwiæ odnajdywanie ostatniej spacji $revpart = reverse($part); $index = index($revpart," "); if ( $index > 0 ) { substr($line,0,$limit-$index) = ""; push(@newlines,substr($part,0,$limit-$index) . "\n"); else { Nie by³o spacji w linii } wiêc # wydrukuj do $limit. substr($line,0,$limit) = ""; push(@newlines,substr($part,0,$limit) . "\n"); } } } push(@newlines,$line); } close(FILE); } sub codeformat { Wywo³aj procedurê wrap i przefiltruj przez nenscript &wrap($line_length); # Przepu¶æ wynik przez nenscript, aby utworzyæ plik PostScript, # który pasuje do jakiego¶ przyzwoitego formatu ¼róde³ do drukowania # (u³o¿enie, czcionki Courier, ilo¶æ linii). Najpierw wydrukuj to do # pliku tymczasowego. $tmpfile = "/tmp/nenscript$$"; open(FILE, "|$nenscript -2G -i$file -N -p$tmpfile -r") || die "Can't open nenscript: $!\n"; foreach $line (@newlines) { print FILE $line; } close(FILE); # Wczytaj plik tymczasowy spowrotem do tablicy, tak aby móg³ byæ # wys³any do skryptu print Samby. @newlines = (""); open(FILE, "<$tmpfile") || die "Can't open $file: $!\n"; while(<FILE>) { push(@newlines,$_); } close(FILE); system("rm $tmpfile"); } sub createarray { Stwórz tablicê dla PostScript-u open(FILE, "<$file") || # die "Can't open $file: $!\n"; while(<FILE>) { push(@newlines,$_); } close(FILE); } ______________________________________________________________________ 99.. PPrraawwaa aauuttoorrsskkiiee ii ZZaakkooññcczzeenniiee.. 99..11.. PPrraawwaa aauuttoorrsskkiiee.. Dokument ten jest chroniony prawami autorskimi Davida Wooda 1996. Mo¿e on byæ reprodukowany w ka¿dej formie i dystrybuowany bez ograniczeñ tak d³ugo jak nie zmieni siê jego zawarto¶æ i zawarte jest w nim to stwierdzenie. 99..22.. PPooddzziiêêkkoowwaanniiaa.. Je¶li tylko przy¶lesz mi jakie¶ sugestie, umieszczê ciê tutaj w nastêpnej wersji. 99..33.. OOdd tt³³uummaacczzaa.. T³umaczenie to jest chronione prawami autorskimi © Bartosza Maruszewskiego. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny. Je¶li znalaz³e¶ jakie¶ ra¿±ce b³êdy ortograficzne, gramatyczne, sk³adniowe, techniczne to pisz do mnie: B.Maruszewski@zsmeie.torun.pl Oficjaln± stron± t³umaczeñ HOWTO jest http://www.jtz.org.pl/ Aktualne wersje przet³umaczonych dokumentów znajduj± siê na tej¿e stronie. Dostêpne s± tak¿e poprzez anonimowe ftp pod adresem ftp.ippt.gov.pl w katalogu /pub/Linux/JTZ/. Przet³umaczone przeze mnie dokumenty znajduj± siê tak¿e na mojej stronie WWW. <http://www.zsmeie.torun.pl/~bart/tlumaczenie.html> S± tam te¿ odwo³ania do Polskiej Strony T³umaczeniowej. Kontakt z nasz± grup±, grup± t³umaczy mo¿esz uzyskaæ poprzez listê dyskusyjn± jtz@ippt.gov.pl. Je¶li chcesz sie na ni± zapisaæ, to wy¶lij list o tre¶ci subscribe jtz Imiê Nazwisko na adres listproc@ippt.gov.pl