Rozdział 33.
Urządzenia
Tim Parker
W tym rozdziale:
Urządzenia znakowe i blokowe
Drukarki
Terminale
Modemy
Ten rozdział poświęcony jest urządzeniom, które podłączyć można do systemu linuxowego - takim jak terminale, modemy i drukarki. Omawia problemy dotyczące dodawania poszczególnych urządzeń i zarządzania nimi, jak również polecenia służące do tego celu.
Informacje przedstawione w tym rozdziale będą niezbędne w przypadku, jeśli chcesz, by system działał bez zarzutu. Nawet jeśli nie zamierzasz podłączać terminalu czy modemu, powinieneś wiedzieć co nieco o procesie uruchamiania systemu i o tym, jak obsługiwane są pliki konfiguracyjne.
Urządzenia znakowe i blokowe
Wszystko, co podłączone jest do komputera, traktowane jest przez Linuxa jednakowo - jako urządzenie. Nie ma znaczenia, czy jest to terminal, dysk twardy, drukarka czy modem. Wszystko, co potrafi wysyłać albo odbierać dane od systemu operacyjnego, jest urządzeniem.
Koncepcja traktowania wszystkich urządzeń jednakowo przeniesiona została z systemów UNIX-owych. Każdy typ urządzenia posiada w jądrze systemu przeznaczony do jego obsługi kod, nazywany sterownikiem. Zawiera on wszystkie, potrzebne do komunikowania się z urządzeniem. Nowo opracowane urządzenie może być używane w systemie linuxowym dopiero po napisaniu odpowiedniego sterownika.
Dzięki temu, że sterowniki urządzeń są zapisywane w osobnych plikach, mogą być one ładowane w razie potrzeby (w przypadku urządzeń używanych rzadko) lub przechowywane w pamięci przez cały czas pracy systemu. Jeśli urządzenia zostaną w jakiś sposób zmodyfikowane, możliwe jest również dołączenie do jądra odpowiednio dostosowanego sterownika, pozwalającego poprawić wydajność czy udostępniającego nowe możliwości.
Kiedy aplikacja odwołuje się do urządzenia, jądro systemu nie musi martwić się szczegółami jego obsługi. Po prostu przekazuje żądanie dalej, do sterownika, pozwalając mu obsłużyć komunikację. Jeśli na przykład wpisujesz coś z klawiatury terminalu, jego sterownik przyjmuje informacje o naciśnięciach klawiszy, a następnie przekazuje je do powłoki czy innej aplikacji, filtrując po drodze wszystkie kody specjalne, z którymi jądro systemu nie umiałoby sobie poradzić i zastępując je kodami zrozumiałymi dla kernela.
Pliki urządzeń przechowywane są w katalogu /dev. Wiąże się to z ogólnie przyjętą konwencją, ale można je przechowywać w dowolnym miejscu.
Urządzenia mogą komunikować się z systemem na dwa sposoby: przesyłając informacje znak po znaku lub blokami. Terminale, drukarki i modemy asynchroniczne są urządzeniami znakowymi, tzn. wykorzystują pierwszy mechanizm komunikacji, przesyłając jednorazowo tylko jeden znak, który jest odbierany przez urządzenie na drugim końcu połączenia. Dyski twarde i większość napędów taśmowych używa komunikacji blokowej, ponieważ pozwala ona na osiągnięcie większych prędkości przesyłania danych - są one nazywane urządzeniami blokowymi.
|
Urządzenia znakowe można również odróżnić od blokowych rozpatrując sposób, w jaki buforowana jest transmisja danych. Urządzenia znakowe zwykle same dokonują buforowania. Urządzenia blokowe, które przeważnie przesyłają i odbierają dane w blokach po 512 lub 1024 bajty, wymagają buforowania przez jądro systemu. Niektóre urządzenia mogą działać zarówno jako urządzenia blokowe, jak i znakowe - dotyczy to np. niektórych napędów taśmowych. Posiadają one wtedy dwa osobne sterowniki, a wybór trybu komunikacji zależy od użytkownika. |
Urządzenia blokowe i znakowe można rozróżnić wydając polecenie ls -l w katalogu /dev. W kolumnie zawierającej prawa dostępu pierwsza litera oznacza typ urządzenia: c - urządzenie znakowe, b - blokowe.
Pliki urządzeń zwykle mają nazwy pozwalające na ich identyfikację (na przykład nazwy terminali zaczynają się od liter tty, ang. teletype) i zawierające numer czy litery identyfikujące konkretne urządzenie (np. tty1, tty1A czy tty04). W połączeniu ze ścieżką dostępu /dev daje to pełne nazwy urządzeń, takie jak /dev/tty01 itp.
Główne i poboczne numery urządzeń
W systemie linuxowym może działać więcej niż jedno urządzenie danego typu - można na przykład zainstalować kartę multiport, do której podłączonych jest 10 terminali. Dla wszystkich tych terminali Linux może używać tego samego sterownika (zakładając, że są to terminale tego samego typu).
Musi jednak istnieć metoda pozwalająca systemowi zorientować się, który z terminali chcesz zaadresować. Służą do tego numery urządzeń. Numer główny identyfikuje sterownik, którego należy użyć, natomiast numer poboczny jest numerem samego urządzenia. Wszystkie terminale z powyższego przykładu będą więc posiadały taki sam numer główny, ale różne numery poboczne, dzięki czemu system będzie mógł je rozróżnić.
Każde urządzenie w systemie ma przypisaną unikalną parę numer główny-numer poboczny. Jeśli dwa urządzenia miałyby takie same numery, Linux nie potrafiłby komunikować się z nimi poprawnie.
Niektóre sterowniki urządzeń wykorzystują jednak te numery w dość dziwaczny sposób. Przykładowo, sterowniki napędów taśmowych czasem używają numeru pobocznego, by zidentyfikować gęstość zapisu danych na taśmie.
Pliki urządzeń tworzy się poleceniem mknod (ang. make node), a usuwa tak, jak normalne pliki - poleceniem rm.
Polecenie mknod
Polecenie mknod spełnia w systemie Linux kilka funkcji. Potrafi utworzyć kolejkę (ang. FIFO - first in, first out) oraz pliki urządzeń blokowych i znakowych. Jego składnia jest następująca:
mknod [opcje] urządzenie b|c|p|u nr_główny nr_poboczny
Opcje mogą przybierać następujące wartości:
--help: wyświetlenie krótkiej instrukcji obsługi i zakończenie programu,
-m: ustalenie praw dostępu do tworzonego pliku
(domyślnie 0666 - dozwolona jest tylko notacja symboliczna),
--version: wyświetlenie informacji o wersji i zakończenie programu.
Argument po nazwie urządzenia określa jego typ; dostępne wartości to: b - urządzenie blokowe, c - urządzenie znakowe, p - kolejka (FIFO) i u - niebuforowane urządzenie znakowe. Trzeba użyć dokładnie jednej z tych wartości.
Następnie podać należy dwie liczby, określające główny i poboczny numer urządzenia. Oba te numery są wymagane w przypadku urządzeń znakowych, blokowych i niebuforowanych. Nie trzeba ich podawać w przypadku tworzenia kolejki.
Przykłady użycia tego polecenia pojawią się w dalszej części tego rozdziału, gdy omawiać będziemy dodawanie do systemu nowych urządzeń.
Drukarki
Drukarki są bardzo często używanymi urządzeniami i raczej nie sprawiają kłopotów administratorom. Łatwo je skonfigurować, o ile dostępne są dane techniczne sprzętu. Zarządzanie kolejkami drukowania również nie jest trudne, ale jak to często bywa w Linuxie, żeby system sprawował się bez zarzutu, trzeba znać kilka drobnych „sztuczek”.
Linux oparty jest na wersji BSD systemu UNIX, która - niestety - nie była najlepiej rozwiązana, jeśli chodzi o obsługę drukowania. Mimo tego, ponieważ Linux rzadko używany jest w bardzo dużych sieciach posiadających wiele drukarek, administrowanie nimi można sprowadzić do niezbędnego minimum. Trzeba jednak zdawać sobie sprawę z faktu, że polecenia służące do administrowania drukarkami w systemie BSD UNIX uważane są za niespójne i generalnie niezbyt przyjemne.
lpd - rezydentny program drukujący
Drukowanie w systemie Linux obsługiwane jest przez program rezydentny lpd. Podczas uruchamiania systemu lpd odczytuje zawartość pliku /etc/printcap, szukając sekcji dotyczących drukarek podłączonych do systemu. Używa on dwóch innych procesów, listen i accept, które przyjmują zlecenia drukowania kopiując je do katalogu kolejki (ang. spool directory).
W większości przypadków modyfikacja zachowania programu lpd nie jest konieczna. Może się jednak zdarzyć, że trzeba będzie go zrestartować. Należy wtedy zakończyć odpowiedni proces (za pomocą polecenia kill), a następnie uruchomić go ponownie poleceniem:
lpd [-l] [port]
Opcja -l załącza rejestrowanie wszystkich zleceń drukowania, co czasem przydaje się przy szukaniu błędów w systemie drukowania. Parametr port jest internetowym numerem portu, który należy podać, jeśli nie chcemy używać domyślnych ustawień systemowych. Najprawdopodobniej nigdy nie będziesz musiał użyć tych opcji.
Rozmiar kolejek drukowania (każda drukarka posiada własny katalog, zawierający pliki do wydrukowania, nazywany po angielsku spool directory) jest określony w plikach o nazwie minfree zawartych w każdym z katalogów kolejek. Plik taki zawiera liczbę bloków dysku, które należy zarezerwować, dzięki czemu duże zadania drukowania nie zapełniają dysku twardego. Plik minfree może być modyfikowany za pomocą dowolnego edytora tekstów.
Nie każdy użytkownik ma jednak prawo drukować. Program lpd sprawdza zawartość plików /etc/hosts.equiv i /etc/host.lpd; jeśli nazwa systemu, z którego loguje się użytkownik, nie jest wymieniona w żadnym z tych plików, żądanie drukowania zostanie zignorowane. Ponieważ nazwa systemu lokalnego zawsze znajduje się w pliku hosts.equiv, jego użytkownicy zawsze mogą drukować.
Proces drukowania
Prześledźmy proces drukowania, idąc tropem zlecenia wydruku. Jest ono generowane przez program lpr. Zbiera on razem dane przeznaczone do wydrukowania i kopiuje je do katalogu kolejki, w którym oczekują na obsłużenie przez program lpd.
|
Program lpr jest jedynym programem, który może wstawiać pliki do kolejki drukowania. Wszystkie inne programy pozwalające na drukowanie działają w oparciu o ten program. |
Sposób, w jaki plik ma zostać wydrukowany, można określić w wierszu poleceń (podając odpowiednie opcje polecenia lpr) lub ustalając odpowiednie wartości zmiennych środowiskowych - jeśli nie zostaną przekazane żadne argumenty i wartości odpowiednich zmiennych nie są zdefiniowane, użyte zostaną domyślne wartości systemowe.
Program lpr wie, do której kolejki ma dołączyć plik do wydrukowania, dzięki oznaczeniu drukarki docelowej. Nazwę drukarki docelowej można podać w wierszu poleceń lub ustalając wartość odpowiedniej zmiennej środowiskowej. Po określeniu, do której drukarki skierowane jest żądanie wydruku, lpr szuka wpisu w pliku /etc/printcap zawierającego informacje o tejże drukarce, między innymi o ścieżce dostępu do jej katalogu kolejki (zwykle /usr/spool/nazwa_drukarki, na przykład /usr/spool/lp1).
Następnie program lpr tworzy w katalogu kolejki dwa pliki. Nazwa pierwszego z nich zaczyna się od liter cf (ang. control file), po których następuje numer identyfikacyjny zlecenia drukowania. W tym pliku zawarte są informacje dotyczące zadania drukowania, między innymi identyfikator użytkownika, który wydał zlecenie drukowania. Drugi plik ma nazwę zaczynającą się od liter df (ang. data file) i zawiera dane, które mają zostać wydrukowane. Po zakończeniu tworzenia pliku z danymi program lpr informuje program lpd o fakcie, że w kolejce czeka na obsłużenie nowe zadanie.
Kiedy program lpd otrzymuje sygnał od lpr, sprawdza w pliku /etc/printcap, czy drukarka docelowa jest drukarką lokalną, czy sieciową. Jeśli jest to drukarka sieciowa, otwarte zostaje połączenie z systemem zdalnym, a następnie plik kontrolny i plik danych zostają przeniesione do tego systemu.
Jeśli drukarka jest drukarką lokalną, lpd sprawdza, czy jest ona dostępna i aktywna, a następnie wysyła zlecenie drukowania do programu rezydentnego obsługującego daną kolejkę drukowania.
Plik /etc/printcap i katalogi kolejki
Zarówno program lpr, jak i lpd korzysta z danych zapisanych w pliku /etc/printcap. Plik ten zawiera informacje o wszystkich drukarkach dostępnych w systemie linuxowym.
Format tego pliku jest prosty (i podobny do formatu pliku /etc/termcap, zawierającego informacje o terminalach). Oto przykładowy wpis:
# HP Laserjet
lp|hplj|laserjet-michal|HP LaserJet 4M w pokoju 425:\
:lp=/dev/lp0:\
:sd=/usr/spool/lp0:\
lf=/usr/spool/errorlog:\
mx#0:\
of=/usr/spool/lp0/hpjlp:\
Pierwsze pole każdego wpisu to lista nazw danej drukarki (nazwy te mogą być używane zamiennie). Za pomocą tych nazw identyfikowana jest drukarka, która ma wydrukować określone dane - nazwa taka może być użyta przy ustalaniu wartości jednej ze zmiennych środowiskowych lub jako jeden z argumentów polecenia lpr. Dostępne nazwy rozdzielane są kreską pionową.
Zwykle każda drukarka posiada co najmniej trzy nazwy: krótką, składającą się z czterech lub mniej znaków (np. hplj), nieco dłuższą, zawierającą np. identyfikator jej właściciela (np. laserjet-michal), oraz pełną, opisową nazwę, zawierającą informacje niezbędne do zidentyfikowania urządzenia (np. HP LaserJet 4M w pokoju 425).
|
Jeśli zlecenie drukowania nie zawiera informacji o drukarce docelowej, a informacja taka nie jest również dostępna poprzez zmienne środowiskowe, zadanie zostaje skierowane do drukarki o nazwie lp. Z tego powodu jedna z drukarek powinna posiadać nazwę (jedną z kilku) lp. |
W pliku /etc/printcap komentarze oznacza się znakiem # na początku wiersza. Po nazwie drukarki następuje zestaw dwuznakowych nazw parametrów i ich wartości. Format tych wpisów jest następujący:
NN wartość logiczna
NN=tekst wartość tekstowa tekst;
NN#liczba wartość numeryczna różna od liczby liczba.
Kiedy używana jest wartość logiczna (czyli po nazwie parametru nie występuje ani tekst, ani liczba), parametr przyjmuje wartość True (czyli zero). Jeśli wymagana jest wartość False (różna od zera), po prostu nie należy wyszczególniać danego parametru.
Większość parametrów i ich wartości otoczonych jest dwukropkami, głównie dla zwiększenia przejrzystości pliku i ułatwienia przetwarzania go programom obsługi drukowania. Dozwolone są również przypisania puste, czyli dwa dwukropki obok siebie.
Kilka parametrów wartych jest odnotowania ze względu na ich przydatność podczas administrowania systemem. Nie wszystkie mogą pojawić się przy definicji każdej drukarki. Oto niektóre z nich.
sd Określenie ścieżki dostępu do katalogu kolejki.
lf Katalog, w którym rejestrowane będą komunikaty o błędach.
mx Określenie typów plików, które mogą być drukowane.
af Nazwa pliku, w którym mają być rejestrowane zadania drukowania.
of Filtr wyjściowy, który ma być używany przy drukowaniu.
Każda drukarka powinna posiadać własny katalog kolejki. Katalog taki jest niezbędny zarówno dla drukarki lokalnej, jak i sieciowej. Jeśli dodajesz do systemu nową drukarkę, to jest prawdopodobne, że o stworzenie takiego katalogu (poleceniem mkdir) będziesz musiał zadbać sam. Prawa dostępu do takiego katalogu powinny mieć wartość 755. Właścicielem katalogu musi być użytkownik root lub daemon. Identyfikator grupy posiadającej ten katalog powinien również mieć wartość root lub daemon. W większości przypadków daemon jest lepszym rozwiązaniem (ze względów bezpieczeństwa), choć ustawienie root również jest poprawne.
Plik, w którym rejestrowane będą informacje o błędach, umieścić można w dowolnym miejscu. Może on być wspólny dla wszystkich drukarek, ponieważ każdy wpis i tak zawiera nazwę drukarki.
Plik, w którym rejestrowane są zlecenia drukowania, jest szczególnie przydatny w systemach, w których użytkownicy płacą za wydruki. Może być również użyty do celów statystycznych. Nowy wpis dodawany jest po zakończeniu drukowania. Wpisy mogą być wyświetlane za pomocą polecenia pac (więcej informacji na temat tego polecenia znajdziesz na stronach man).
Parametr mx pozwala określić, jakiego typu pliki mogą być drukowane. Zwykle jego definicja ma postać mx#0, co oznacza zezwolenie na drukowanie wszystkich typów plików.
Filtr wyjściowy modyfikuje format drukowanych danych, dostosowując je do wymagań drukarki. Przykładowo, niektóre drukarki laserowe nie mogą zmieścić na stronie 66 wierszy tekstu, więc filtr dzieli dokument na strony zawierające po 60 wierszy (wartość tę można zmienić). Czasem filtr jest również potrzebny, aby dodawać kody kontrolne, wymagane na przykład przy zmianie czcionki czy rodzaju papieru.
W każdym katalogu kolejki mogą znajdować się jeszcze dwa pliki: status i lock. Oba zawierają tylko jeden wiersz i mogą być modyfikowane za pomocą edytora tekstów. W plikach tych zapisana jest informacja o aktualnym stanie drukarki. Są one tworzone przez program lpd i używane przez niektóre programy do informowania o statusie drukarki.
Dodawanie drukarki za pomocą polecenia mknod
Linux obsługuje zarówno drukarki szeregowe, jak i równoległe. Drukarki obu typów są urządzeniami znakowymi. Niestety, większość wersji Linuxa nie zawiera programów pozwalających na łatwą konfigurację drukarki (programy takie są dostępne w większości wersji UNIX-a), co pociąga za sobą konieczność ręcznego modyfikowania plików systemowych.
Drukarki równoległe zwykle nazywają się lp0, lp1, lp2 itd., zależnie od adresu portu, do którego są podłączone (najczęściej spotyka się pojedynczy port równoległy, podłączona do niego drukarka nazywa się wtedy lp0). Oto dostępne nazwy urządzeń, odpowiadające im adresy portów i nazwy używane w systemie DOS:
/dev/lp0 0x03bc LPT1
/dev/lp1 0x0378 LPT2
/dev/lp2 0x0278 LPT3
|
Aby określić adres portu równoległego, możesz posłużyć się jakimś programem diagnostycznym (np. DOS-owym MSD.EXE). Niektóre wersje BIOS-u wyświetlają adresy portów równoległych podczas uruchamiania komputera. Jeśli nie jesteś pewny, próbuj po kolei, zaczynając od lp0 i sprawdzając, czy drukowanie jest możliwe. Pierwszy port równoległy w systemach PC ma zwykle adres 0x03bc. |
W systemie Linux do utworzenia pliku drukarki należy użyć polecenia mknod. Właścicielem takiego pliku musi być użytkownik root lub daemon.
Poniższe polecenia tworzą plik drukarki dołączonej do pierwszego portu równoległego (/dev/lp0):
mknod -m 620 /dev/lp0 c 6 0
chown root.daemon /dev/lp0
Prawa dostępu do nowo utworzonego pliku /dev/lp0 ustawiono na 620; plik ten jest plikiem urządzenia znakowego o numerze głównym 6 i pobocznym 0. Numery poboczne urządzeń zwykle rozpoczynają się od zera i są zwiększane o jeden dla każdego nowego urządzenia. Ponieważ dodawaliśmy pierwszą drukarkę w systemie, przypisaliśmy jej numer poboczny 0.
|
Właściciel root.daemon to specjalna składnia używana w systemie Linux dla programów rezydentnych uruchamianych przez użytkownika root. Wpis root.daemon nie pojawia się w pliku /etc/passwd. Pierwsza część identyfikatora (do kropki) oznacza użytkownika, natomiast druga - grupę. |
Jeśli konfigurujesz jeszcze inne urządzenia, muszą one mieć oczywiście różne nazwy, np.:
mknod -m 620 /dev/lp0 c 6 0
mknod -m 620 /dev/lp1 c 6 1
mknod -m 620 /dev/lp2 c 6 2
W powyższych poleceniach numer poboczny urządzenia zwiększany jest tak, by odpowiadał numerowi portu. Nie jest to wymagane, ale może pomóc w identyfikacji urządzenia.
Po wydaniu powyższych poleceń dobrze jest jeszcze raz sprawdzić, czy właściciel pliku został ustawiony prawidłowo i czy utworzony został katalog kolejki. Jeśli katalog kolejki nie istnieje, trzeba założyć go ręcznie. Zagadnienia dotyczące właściciela i praw dostępu do tego katalogu omówiliśmy w podrozdziale „Plik /etc/printcap i katalogi kolejki”.
Zarządzanie drukarkami - program lpc
Drukarki kontrolowane są za pomocą programu lpc. Pozwala on między innymi na:
wyświetlanie informacji o statusie drukarki,
włączanie i wyłączanie drukarki,
włączanie i wyłączanie obsługi kolejki drukowania,
usuwanie wszystkich oczekujących zadań drukowania,
przesuwanie zadań na początek kolejki,
wprowadzanie zmian w konfiguracji programu lpd.
Program lpc nie może być używany do zarządzania drukarkami sieciowymi, a tylko do zmiany ustawień drukarek podłączonych bezpośrednio do Twojego komputera.
|
Musisz wiedzieć o tym, że lpc to jeden z najmniej przewidywalnych i stabilnych programów dostarczanych z systemem Linux. Potrafi zawiesić się bez żadnej widocznej przyczyny, zdarza mu się również wyświetlać błędne informacje o statusie drukarki. Czasem jedyną drogą naprawienia zepsutego w jakiś sposób systemu drukowania jest zresetowanie komputera. |
Program lpc wywołany bez żadnych argumentów oczekuje na wydanie polecenia. Poniżej przedstawiamy kilka poleceń tego programu wraz z ich argumentami.
abort nazwa_drukarki | all Powoduje natychmiastowe wstrzymanie drukowania przez drukarkę o określonej nazwie (lub wszystkie drukarki, jeśli jego parametrem jest słowo all). Przerwane zadania drukowania są wstawiane ponownie do kolejki po uruchomieniu drukarki. Poza tym polecenie to działa podobnie do polecenia stop.
clean nazwa_drukarki | all Usuwa wszystkie zadania drukowania, włącznie z aktywnymi. Często zdarza się jednak, że dokument, którego drukowanie się już rozpoczęło, drukowany jest do końca, ponieważ został już przesłany do programu lpd lub bufora drukarki. Jeśli użyty zostanie parametr all, wyczyszczone zostaną kolejki wszystkich drukarek.
disable nazwa_drukarki | all Wyłącza kolejkowanie zadań. Wszystkie zadania oczekujące na wydruk zostaną obsłużone, ale nowe zadania nie będą przyjmowane - użytkownik próbujący wydrukować coś za pomocą takiej drukarki otrzyma komunikat informujący o tym, że drukarka jest wyłączona i zlecenie nie zostało przyjęte. Wyłączanie i włączanie kolejkowania sprowadza się do zmiany zawartości pliku lock.
down nazwa_drukarki wiadomość To polecenie używane jest do całkowitego odłączenia drukarki. Jeśli dołączona jest wiadomość (o dowolnej długości), zostanie ona zapisana w pliku statusu drukarki (o nazwie status), dzięki czemu będzie wyświetlana przy próbach drukowania. Polecenia down używa się zwykle wtedy, gdy występują jakieś poważniejsze problemy z drukarką i będzie ona odłączona przez więcej niż jeden dzień.
enable nazwa_drukarki | all Załącza kolejkowanie zadań dla danej drukarki lub wszystkich drukarek.
exit Zakończenie pracy programu (polecenie to działa tak samo, jak polecenie quit).
help lub ? Wyświetlenie listy wszystkich dostępnych poleceń. Jeśli jako argument tego polecenia podana zostanie nazwa innego polecenia, wyświetlona zostanie krótka informacja na jego temat (np. help abort).
quit Zakończenie pracy programu lpc (polecenie to działa tak samo jak polecenie exit).
restart nazwa_drukarki | all Zrestartowanie rezydentnego programu obsługi drukarki. Używane zwykle, gdy program ten zakończy pracę bez wyraźnej przyczyny (co się czasem zdarza). Jeśli podany zostanie argument all, restartowane są wszystkie programy obsługi drukarek.
start nazwa_drukarki Polecenie to powoduje uruchomienie drukarki, pozwalając na wydrukowanie oczekujących dokumentów, oraz uruchomienie programu obsługującego kolejkowanie dla danej drukarki.
status nazwa_drukarki Wyświetlenie nazwy drukarki, informacji o tym, czy kolejkowanie jest włączone, czy włączone jest drukowanie, liczby oczekujących dokumentów oraz statusu programu rezydentnego obsługującego drukarkę. Jeśli w kolejce nie ma żadnych dokumentów, nie będą działać również programy rezydentne. Jeśli jednak program rezydentny nie działa mimo tego, że w kolejce oczekują na wydrukowanie jakieś dokumenty, należy go zrestartować (za pomocą polecenia restart).
stop nazwa_drukarki Polecenie to powoduje zatrzymanie drukarki. Zadania drukowania są nadal kolejkowane, ale nie są drukowane. Jeśli rozpoczęto drukowanie dokumentu, zostanie ono dokończone. Polecenia start i stop powodują zmianę zawartości pliku lock w katalogu kolejki. Polecenie stop powoduje również zakończenie działania rezydentnego programu obsługi kolejkowania.
topq nazwa_drukarki id_zadania Powoduje przesunięcie zadania drukowania o identyfikatorze id_zadania na początek kolejki.
topq nazwa_drukarki id_użytkownika Przesunięcie wszystkich zadań, których właścicielem jest użytkownik o danym identyfikatorze, na początek kolejki (polecenie bardzo przydatne dla administratorów, którzy nie mają czasu czekać!).
up nazwa_drukarki Używane do ponownego przyłączenia odłączonej poleceniem down drukarki.
Program lpc nie jest szczególnie przyjazny dla użytkownika, ale jego użycie jest w zasadzie jedyną metodą zarządzania drukarkami i ich kolejkami w Linuxie. Zadania te mogą nieco ułatwić różne nakładki na ten program.
Zarządzanie kolejkami drukowania
za pomocą programów lpq i lprm
Zamiast korzystać z programu lpc można czasem użyć innych, bardziej wyspecjalizowanych poleceń. Najczęściej potrzebne są tylko dwa polecenia: jedno do wyświetlania zawartości kolejki i drugie, pozwalające usunąć z niej konkretne zadanie.
Za pomocą polecenia lpq można uzyskać informacje o zleceniach oczekujących na wydrukowanie. Składnia tego polecenia jest następująca:
lpq [-l] [-Pnazwa_drukarki] [id_zadania ...] [id_użytkownika ...]
Jeśli program lpq zostanie uruchomiony bez żadnych argumentów, wyświetli informacje o kolejce aktywnej drukarki, takie jak identyfikator właściciela zlecenia, pozycję zadania w kolejce, nazwy plików, które oczekują na wydrukowanie i ich sumaryczny rozmiar. Podając opcję -l, można uzyskać dodatkowe informacje o każdym zleceniu wydruku.
Jeśli potrzebne są informacje dotyczące innej drukarki, należy podać jej nazwę po opcji -P. Jeśli podany zostanie identyfikator zlecenia, wyświetlane będą tylko informacje go dotyczące, natomiast jeśli podany zostanie identyfikator użytkownika - wyświetlone zostaną dane o wszystkich zleceniach, których jest on właścicielem.
|
Ponieważ użytkownicy nie mają dostępu do katalogów kolejki, jedyną metodą na anulowanie zlecenia drukowania jest użycie polecenia lprm. Jeśli jesteś administratorem systemu, warto od czasu do czasu przypomnieć o tym użytkownikom - dzięki temu mniej będzie „niechcianych” wydruków. |
Polecenie lprm służy do wycofania z kolejki zlecenia wydruku. Często zdarza się, że przez pomyłkę zamiast polecenia lprm wydawane jest polecenie lpr, które nie powoduje usunięcia zlecenia z kolejki. Jeśli chcesz wycofać zlecenie drukowania, musisz znać jego identyfikator. Jeśli jesteś zalogowany jako root, możesz również usunąć wszystkie zlecenia. Składnia polecenia lprm jest następująca:
lprm [-Pnazwa_drukarki] [-] [id_zadania ...] [id_użytkowanika]
Argumentem polecenia lprm może również być pojedynczy myślnik - wówczas usuwane są wszystkie zadania, których właścicielem jest użytkownik wydający polecenie. Jeśli jesteś zalogowany jako root, usunięte zostaną wszystkie zadania. Pliki oczekujące na wydrukowanie przez określoną drukarkę można usunąć podając opcję -P, na przykład polecenie:
lprm -Phplj -
powoduje usunięcie wszystkich zadań, których jesteś właścicielem, a które miały być wydrukowane na drukarce o nazwie hplj.
|
Jeśli jesteś zalogowany jako root, łatwo usunąć przypadkowo wszystkie zadania drukowania. Uważaj więc, by nie popełnić jakiegoś błędu składniowego! |
Podanie identyfikatora zlecenia lub użytkownika powoduje usunięcie z kolejki określonego zlecenia lub wszystkich zleceń należących do określonego użytkownika. Jeśli nie zostaną podane żadne argumenty, usunięte zostanie zlecenie aktywne, którego właścicielem jest użytkownik wydający polecenie.
Po wycofaniu zlecenia lprm wyświetla na ekranie krótki komunikat, ale jeśli danego pliku nie ma w kolejce, nic nie zostanie wyświetlone (i będziesz się pewno zastanawiał, co się właściwie stało).
Jeśli użyjesz polecenia lprm z identyfikatorem zlecenia, które jest właśnie obsługiwane, może zdarzyć się, że albo zostanie ono wydrukowane do końca (jeśli zostało już przesłane do bufora drukarki), albo przerwane. W drugim przypadku zdarzyć się może, że drukarka przestanie odpowiadać. Wtedy trzeba znaleźć identyfikator procesu obsługującego filtr wyjściowy (za pomocą polecenia ps) i zakończyć jego działanie.
|
Jeśli drukarka przestanie odpowiadać i nie da się rozwiązać tego problemu za pomocą polecenia lpc, spróbuj zrestartować program lpd. Jeśli nawet to nie pomaga, prawdopodobnie jedynym rozwiązaniem będzie ponowne uruchomienie systemu. |
Terminale
Większość systemów linuxowych korzysta tylko z jednej konsoli (klawiatury i ekranu komputera, w którym zainstalowany jest system). W takim przypadku nie są potrzebne żadne dodatkowe zabiegi konfiguracyjne.
Niektórzy administratorzy chcą jednak dodać kilka terminali tak, by możliwa była równoczesna praca wielu użytkowników (w końcu Linux jest systemem wielodostępnym). Można to zrobić na dwa sposoby: podłączając terminale do portu szeregowego z tyłu komputera lub do portu znajdującego się na karcie multiport.
Używanie kart multiport
Karty multiport to łatwy i efektywny sposób na dodanie do systemu wielu portów szeregowych. Karty te dostarczane są przez wielu producentów w przeróżnych konfiguracjach. Udostępniają od 2 do 32 dodatkowych portów szeregowych, mogą również wykorzystywać różne typy gniazd (DB25, DB9 czy RJ11).
Jeśli zamierzasz używać karty multiport, upewnij się najpierw, czy dostępne są dla niej sterowniki linuxowe. Nie można użyć bez modyfikacji wersji sterowników dla UNIX-a czy Xenix-a. Ze względu na ich złożoność, modyfikacja kodu źródłowego jest jednak poza możliwościami zwykłego śmiertelnika.
Wraz z kartami multiport dostarczane są kompletne instrukcje dotyczące ich instalowania i konfigurowania terminali. Szczegóły tych operacji są zależne od sprzętu, dlatego nie będziemy się nimi zajmować.
Dodawanie terminali
podłączonych przez port szeregowy
Aby dodać do systemu terminal, możesz również wykorzystać port szeregowy zamontowany w komputerze PC. Funkcję terminalu może pełnić prawdziwy terminal lub też inny komputer PC z działającym emulatorem terminalu.
Rodzaj kabla łączącego terminal z komputerem PC zależy od gniazd zamontowanych w obu urządzeniach. W większości przypadków jest to kabel DTE-to-DTE (ang. Data Terminal Equipment), ale czasem wymagany jest kabel DCE (ang. Data Communication Equipment). Ogólnie rzecz biorąc, terminale i inne komputery wymagają kabla DTE, natomiast modemy - DCE (kable DCE i DTE różnią się połączeniami).
Kabel łączący terminal z komputerem powinien być typu null-modem (niektóre przewody są w nim skrzyżowane, inne zwarte). Działać poprawnie będzie już kabel trójżyłowy (sygnały send, receive i masa), choć Linux wykorzystuje również sygnał Carrier Detect do sprawdzania, czy terminal jest podłączony i aktywny.
Kabel DCE (używany np. do podłączenia modemu - dlatego nazywany czasem kablem modemowym) łączy dwa gniazda bezpośrednio, tzn. styk nr 1 w jednej wtyczce odpowiada nr 1 w drugiej itd. Ważniejsze dla funkcjonowania połączenia DTE-to-DTE przewody (dla złączy typu DB25; numery styków dla złączy DB9 są inne, ale połączenia sygnałów pozostają bez zmian) zebrano w tabeli 33.1.
Tabela 33.1 Opis kabla DTE ze złączami DB25
Styk gniazda |
Styk gniazda |
Sygnał |
1 |
1 |
Ground |
2 |
3 |
Transmit data / receive data |
3 |
2 |
Receive data / transmit data |
4 |
4 |
Ready to send |
5 |
5 |
Clear to send |
6 |
20 |
Data set ready/data terminal ready |
7 |
7 |
Ground |
8 |
20 |
Carrier detect/data terminal ready |
20 |
6, 8 |
Data terminal ready/data set ready, carrier detect |
Ponieważ większość użytkowników woli używać gotowych kabli, nie będziemy wdawać się w szczegóły dotyczące ich montażu. Zamiast tego lepiej udać się do najbliższego sklepu komputerowego i wyjaśnić, jaki sprzęt chcemy połączyć, jaka jest wielkość (9 lub 25 styków) i rodzaj (męski - gdy na zewnątrz gniazda wystają styki, czy żeński - gdy nie ma styków) złącza.
|
Jeśli nie jesteś pewien, czy powinieneś użyć kabla modemowego, czy null-modem, warto zaopatrzyć się w przejściówkę, w której następuje skrzyżowanie odpowiednich linii. Urządzenie takie zamienia więc kabel modemowy na null-modem i odwrotnie. |
Proces logowania
Aby zrozumieć, jakie dane zawierają pliki używane do konfigurowania terminali, warto najpierw zapoznać się z procesem logowania.
Proces ten rozpoczyna się od uruchomienia programu /etc/init podczas uruchamiania systemu. Program init jest odpowiedzialny za uruchomienie procesu /etc/getty dla każdego terminalu podłączonego do systemu. Dane o tych terminalach muszą być wpisane do plików /etc/ttys i /etc/inittab. Plik /etc/ttys zawiera listę portów i typów terminali, które są do nich podłączone. W pliku /etc/inittab zapisana jest pełna lista terminali, wraz z wszystkimi ich parametrami. Obu tym plikom przyjrzymy się dokładniej nieco później, w podrozdziale „Pliki konfiguracyjne terminalu: /etc/ttys i /etc/inittab”.
Jeśli z danych zapisanych w tych plikach wynika, że do danego portu podłączony jest terminal, proces init uruchamia dla niego proces /etc/getty, ustawiający parametry komunikacji i wyświetlający komunikat login:.
Gdy użytkownik loguje się używając określonego terminalu, proces getty wywołuje program login, który pobiera hasło. Program ten następnie sprawdza, czy identyfikator użytkownika i hasło są poprawne (na podstawie danych zawartych w pliku /etc/passwd); jeśli tak - wyświetlana jest zawartość pliku /etc/motd, a następnie uruchamiany jest domyślny dla danego użytkownika interpreter poleceń (również określony w pliku /etc/passwd). Na koniec ustawiana jest wartość zmiennej TERM i program login kończy działanie.
Po zakończeniu logowania interpreter poleceń działa dalej, odczytując zawartość plików konfiguracyjnych, a następnie wyświetla znak zachęty i czeka na działania użytkownika.
Jak widać, w proces logowania zamieszanych jest całkiem sporo plików przechowywanych w katalogu /etc. Przyjrzyjmy się najważniejszym z nich (z punktu widzenia konfiguracji terminalu).
/sbin/getty i /etc/gettydefs
Wzmianki o programie /sbin/getty (w niektórych systemach /etc/getty) pojawiają się przy omawianiu problemów dotyczących terminali dość często, ale niewielu użytkowników zdaje sobie dokładnie sprawę z funkcji spełnianych przez ten program. Służy on generalnie do ustawiania parametrów transmisji danych pomiędzy terminalem a systemem, takich jak prędkość, protokół itp.
Program /sbin/getty wywoływany jest przez proces /etc/init. Po uruchomieniu otwiera on połączenie przez port szeregowy czy inny port, do którego podłączony jest terminal, a następnie ustawia parametry transmisji danych do i z terminalu zgodnie z informacjami zawartymi w pliku /etc/gettydefs. Następnie do terminalu wysyłany jest komunikat login:.
Proces getty umożliwia podanie w wierszu poleceń wielu modyfikujących jego zachowanie opcji, ale większość z nich nie jest szczególnie interesująca. Jeśli chcesz uzyskać pełniejsze informacje na temat składni tego polecenia, zajrzyj do dokumentacji na stronach man.
Plik /etc/gettydefs, zawierający parametry terminali używane przez program getty, składa się z wierszy o następującym formacie:
etykieta#parametry_startowe#parametry_końcowe#komunikat_login#następna_
*etykieta
etykieta powinna być unikalna, ponieważ na jej podstawie poszczególne wpisy są rozróżniane. parametry_startowe i parametry_końcowe pozwalają na kontrolowanie zachowania połączenia przed i po wykonaniu programu login.
komunikat_login to tekst, który zostanie wyświetlony na ekranie terminalu. Zwykle ma on postać login:, ale można zażądać wyświetlania dowolnego tekstu. następna_etykieta to etykieta wpisu, do którego należy przejść, gdyby użycie ustawień z wiersza bieżącego się nie powiodło. Takie rozwiązanie przydaje się przy połączeniach modemowych - próby nawiązania połączenia rozpoczyna się od największych prędkości przesyłu danych (np. 9600 bodów), stopniowo zmniejszając prędkość (poprzez 4800 i 2400 do 1200 bodów), aż do nawiązania połączenia. Dla terminali pole następna_etykieta wskazuje zwykle z powrotem na początek pliku.
Przykładowy fragment tego pliku może mieć następującą postać:
console# B19200 OPOST ONCLR TAB3 BRKINT IGNPAR ISTRIP IXON IXANY PARENB ECHO ECHOE ECHOK ICANON ISIG CS8 CREAD # B19200 OPOST ONCLR TAB3 BRKINT IGNPAR ISTRIP IXON IXANY PARENB ECHO ECHOE ECHOK ICANON ISIG CS8 CREAD #Console Login: #console
9600H# B9600 # B9600 SANE IXANY PARENB TAB3 HUPCL #Login: #4800H
4800H# B4800 # B4800 SANE IXANY PARENB TAB3 HUPCL #Login: #2400H
2400H# B2400 # B2400 SANE IXANY PARENB TAB3 HUPCL #Login: #1200H
1200H# B1200 # B1200 SANE IXANY PARENB TAB3 HUPCL #Login: #300H
300H# B300 # B300 SANE IXANY PARENB TAB3 HUPCL #Login: #9600H
Jeśli zajrzysz do pliku gettydefs znajdującego się w Twoim systemie, znajdziesz jeszcze wiele innych wpisów, ale wszystkie one mają taki sam format, jak przedstawione w przykładzie. Pięć ostatnich wierszy dotyczy połączeń modemowych; pierwszy z nich definiuje parametry połączenia przy prędkości 9600 bodów. Jedyny parametr startowy - B9600 - ustawia prędkość transmisji na 9600 bodów. Parametry końcowe określają zachowanie terminalu (na przykład powodują zastępowanie znaku tabulacji trzema spacjami). Wskaźnik do następnego wpisu prowadzi do połączenia z niższą prędkością przesyłania danych, co umożliwia połączenie z wolniejszymi modemami lub poprzez łącza słabej jakości.
Pierwszy wiersz przykładu jest typowy dla wszystkich systemów - opisuje on zachowanie się konsoli „systemowej”, czyli klawiatury i ekranu podłączonych bezpośrednio do komputera. Ponieważ są one podłączone na stałe, wskaźnik na następny wpis jest ustawiony tak, że następuje zapętlenie.
|
Nie powinieneś raczej zmieniać ustawień w pliku gettydefs - o wiele łatwiej jest poszukać takiego wpisu, który odpowiada typowi terminalu, którego chcesz użyć. Jeśli jednak zmodyfikujesz jego zawartość, powinieneś wydać polecenie getty -c, aby uaktywnić wprowadzone modyfikacje. |
Pliki konfiguracyjne terminala: /etc/ttys i /etc/inittab
Dane o konfiguracji terminalu zapisane są w plikach /etc/ttys i /etc/inittab. Pliki te mogą być modyfikowane za pomocą dowolnego edytora tekstów. Dostępne są również programy pozwalające modyfikować te pliki w wygodniejszy sposób (np. za pomocą menu).
|
Przed dokonaniem jakichkolwiek zmian w plikach konfiguracyjnych terminalu zrób ich kopię na wypadek, gdyby zmiany nie przyniosły oczekiwanych efektów. W tym celu wystarczy skopiować te pliki do plików o nazwach na przykład /etc/ttys.org i /etc/inittab.org. |
Plik /etc/ttys zawiera dwie kolumny danych. Pierwsza z nich określa typ terminalu, natomiast druga - nazwę urządzenia. Oto przykładowa zawartość takiego pliku:
console tty1
console tty2
console tty3
console tty4
console tty5
console tty6
vt100 ttyp0
vt100 ttyp1
vt100 ttyp2
vt100 ttyp3
Typ terminalu w pierwszej kolumnie jest używany przy ustawianiu wartości zmiennej środowiskowej TERM.
Plik /etc/inittab zawiera informacje dotyczące zachowania każdego terminala. Jego format jest następujący:
ID:runlevel:akcja:proces
ID to jedno lub dwuznakowy identyfikator, inny dla każdego wpisu. W większości przypadków odpowiada on w jakiś sposób nazwie urządzenia, np. identyfikator 1 może określać terminal tty1 itp.
Parametr runlevel określa możliwości terminalu w różnych stanach systemu operacyjnego (może on przybierać wartości od 0 do 6 oraz A, B i C, jak również kombinacje tych wartości). Jeśli żadna wartość nie zostanie podana, obsługiwane będą wszystkie stany systemu.
Zawartość pola akcja decyduje o tym, w jaki sposób obsłużyć następne pole (proces). Dostępne wartości to:
boot uruchomienie przy pierwszym odczytaniu pliku inittab;
bootwait uruchomienie przy pierwszym odczytaniu pliku inittab;
initdefault ustawienie domyślnego stanu systemu (runlevel);
off wyłączenie procesu, jeśli jest on aktywny;
once jednokrotne uruchomienie procesu;
ondemand uruchomienie procesu działającego przez cały czas
(to samo co respawn);
powerfail wykonanie gdy init otrzyma sygnał o awarii zasilania;
powerwait wykonanie gdy init otrzyma sygnał o oczekiwaniu na zasilania;
sysinit uruchomienie przed uzyskaniem dostępu do konsoli;
respawn uruchomienie procesu działającego przez cały czas;
wait jednokrotne uruchomienie procesu.
Pole akcja pozwala określić zachowanie terminalu podczas uruchamiania systemu i wtedy, gdy zostanie zakończony obsługujący go proces getty.
Przykładowy plik /etc/inittab (zaczerpnięty co prawda z wcześniejszej wersji Linuxa, ponieważ w nowszych wersjach plik ten jest nieco bardziej skomplikowany) wygląda następująco:
#inittab for Linux
id:1:initdefault:
rc::bootwait:/etc/rc
1:1:respawn:/etc/getty 9600 tty1
2:1:respawn:/etc/getty 9600 tty2
3:1:respawn:/etc/getty 9600 tty3
4:1:respawn:/etc/getty 9600 tty4
Pierwsze dwa wiersze (po komentarzu) są używane podczas uruchamiania systemu. Drugi z nich nakazuje uruchomienie skryptu /etc/rc. Pozostałe powodują uruchomienie procesów getty dla konsol od tty1 do tty4 z prędkością 9600 bodów.
Definicje terminali - plik /etc/termcap
Plik /etc/termcap (ang. terminal capabilities) zawiera instrukcje dotyczące komunikacji z większością typów terminali obsługiwanych przez system, w związku z tym jest on dość duży. Jeśli zamierzasz modyfikować ten plik, powinieneś najpierw wykonać jego kopię zapasową.
Zawartość pliku termcap jest podobna do zawartości pliku /etc/printcap,w którym znajdują się dane o poszczególnych typach drukarek. Każdy wpis określa kilka wariantów nazwy urządzenia oraz zestaw parametrów i odpowiadających im wartości odpowiednich dla różnych typów terminali. Ze względu na fakt, że niektóre bardziej rozbudowane terminale potrafią interpretować cały szereg symboli sterujących, poszczególne wpisy mogą być dość obszerne.
Przykładowe definicje prostych typów terminali - Vi550 i Vi603 - mogą mieć następującą postać:
vi550|visual 550 ansi x3.64:\
:li#33:\
:cl=\030\E[H\E[2J:tc=vi300:
vi603|visual603|visual 603:\
:hs:mi:\
:al=\E[L:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
:cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:dc=\E[P:dl=\E[M:\
:ds=\EP2;1~\E\\:ei=\E[4l:fs=\E\\:\
:i1=\E>\E[?3l\E[?4l\E[?7h\E[?8h\E[1;24r:im=\E[4h:\
:mb=\E[5m:md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:\
:se=\E[27m:sf=\ED:so=\E[7m:sr=\EM:ts=\EP2~:ue=\E[24m:\
:up=\E[A:us=\E[4m:tc=vt100:
Znaczenie poszczególnych kodów nie jest zwykle przedmiotem zainteresowania przeciętnego użytkownika czy administratora systemu linuxowego. Informacje takie mogą być potrzebne dopiero wtedy, gdy trzeba skonfigurować nowy (nie obsługiwany przez system) typ terminalu.
Charakterystyki terminali zawarte w pliku /etc/termcap są używane przez plik /etc/ttys. Pierwsza kolumna pliku /etc/ttys zawiera nazwę terminalu, na podstawie której ustalana jest wartość zmiennej środowiskowej TERM. Dokładniejsze dane o parametrach terminalu odczytywane są z pliku /etc/termcap poprzez odszukanie wpisu odpowiadającego danej nazwie terminalu.
|
Większość terminali może emulować kilka różnych standardów. Jeśli nie potrafisz znaleźć w pliku /etc/termcap wpisu odpowiedniego dla terminalu, który chcesz podłączyć, poszukaj wpisu dla jednego z emulowanych typów terminali. Jest to na pewno rozwiązanie prostsze niż stworzenie nowego wpisu. |
Dodawanie terminalu
Terminal można dodać do systemu linuxowego w taki sam sposób jak drukarkę - za pomocą polecenia mknod. Najpierw należy zdecydować, do którego portu będzie on podłączony. Porty szeregowe mają nazwy takie jak /dev/ttyS0 (port określany w systemie DOS jako COM1), /dev/ttyS1 (w systemie DOS - COM2) itd.
Większość komputerów klasy PC wyposażona jest w dwa porty szeregowe, choć możliwe jest podłączenie dodatkowych dwóch (czyli od /dev/ttyS0 do /dev/ttyS3). Linux używa portów szeregowych w oparciu o ich adresy podawane przez BIOS. Zwykle są to następujące wartości:
ttyS0 (COM1) 0x03f8
ttyS1 (COM2) 0x02f8
ttyS2 (COM3) 0x03e8
ttyS3 (COM4) 0x02e8
Jeśli w systemie dostępny jest tylko jeden port szeregowy, prawie zawsze jest on skonfigurowany jako COM1. Jeżeli nie jesteś pewny ustawień w Twoim systemie, możesz sprawdzić odpowiednie wartości za pomocą jakiegoś programu użytkowego (np. MSD.EXE dla systemu DOS) lub po prostu ustalić je metodą prób i błędów, zaczynając od najniższych wartości.
Aby utworzyć nowe urządzenie terminalu, trzeba użyć polecenia mknod (ang. make node; polecenie to opisane jest bardziej szczegółowo w podrozdziale „Polecenie mknod”), a następnie zmienić prawa dostępu do nowego pliku urządzenia tak, by mógł on być czytany i zapisywany przez użytkownika root lub daemqn. W większości systemów odpowiednie pliki urządzeń są konfigurowane już podczas instalacji.
Polecenie, które należy wydać, aby utworzyć plik terminalu, ma postać:
mknod -m 660 /dev/ttyS0 c 4 64
Parametr -m 660 ustala odpowiednie prawa dostępu do pliku. /dev/ttyS0 to określenie portu szeregowego, odpowiadającego DOS-owemu portowi COM1. Parametr c określa, że urządzenie jest typu znakowego (większość terminali, za wyjątkiem bardzo szybkich modeli, pracuje jako urządzenia znakowe), a następujące po nim liczby definiują główny i poboczny numer urządzenia (w tym przypadku odpowiednio 4 i 64). Polecenia tworzące pliki urządzeń dla portów COM2 - COM4 miałyby postać:
mknod -m 660 /dev/ttyS1 c 4 65
mknod -m 660 /dev/ttyS2 c 4 66
mknod -m 660 /dev/ttyS3 c 4 67
Po wykonaniu polecenia mknod należy jeszcze zmienić identyfikator właściciela pliku, na przykład wydając polecenie
chown root.tty /dev/ttyS0
podstawiając za /dev/ttyS0 nazwę pliku urządzenia, do którego polecenie ma się odnosić. Właścicielem pliku będzie użytkownik root.tty. Należy również zmodyfikować odpowiednie wpisy w pliku /etc/ttys, ustawiając typ terminalu tak, aby proces jego inicjalizacji mógł przebiegać poprawnie. Plik /etc/inittab zawiera wpisy dla standardowych portów szeregowych, możesz więc użyć ich jako szablonu i dopasować prędkość transmisji i inne parametry.
Polecenia stty oraz tset
Polecenie stty pozwala sprawdzić i ustawić opcje dotyczące obsługi terminalu. Jest ono bardzo złożone, posiada kilkadziesiąt różnych opcji modyfikujących działanie sterownika terminalu. Na szczęście tylko przy wyjątkowo „intensywnej” administracji będziesz musiał ich używać, więc w tym rozdziale po prostu zignorujemy większość szczegółów.
Aby sprawdzić aktualne ustawienia terminalu, wystarczy wydać polecenie stty bez żadnych parametrów. Dzięki temu można zweryfikować, czy informacje zapisane w plikach konfiguracyjnych /etc/inittab i /etc/gettydefs zostały poprawnie odczytane.
Polecenie tset również jest dość skomplikowane, ale większość jego opcji używana jest bardzo rzadko (szczególnie jeśli nie masz do czynienia z jakimiś przedpotopowymi terminalami i niestandardowymi łączówkami). Polecenie to służy do inicjalizowania sterownika terminalu. Jeśli nazwa urządzenia nie zostanie określona jawnie jako parametr tego polecenia, użyta zostanie nazwa wskazywana przez zmienną środowiskową TERM.
Polecenie tset może zostać zapisane w jednym z plików inicjalizacyjnych przetwarzanych podczas logowania. Przykładowo użytkownik, który zawsze loguje się przez modem, może w pliku inicjalizacyjnym (.profile, .cshrc itp.) wpisać polecenie
tset -m dialup:vt100
Spowoduje ono ustawienie typu terminalu na vt100 za każdym razem, gdy loguje się on do systemu przez modem. Oczywiście typ terminalu zostanie ustawiony na vt100 nawet wtedy, jeśli w rzeczywistości użytkownik loguje się z terminalu innego rodzaju. Zapobiec takiej sytuacji można stosując polecenie:
tset -m dialup:?vt100
które spowoduje, że system zapyta o potwierdzenie typu terminalu:
TERM=(vt100)?
Po wciśnięciu klawisza Enter typ terminala zostanie ustawiony na vt100, ale możliwe jest również podanie innej wartości.
Jak na razie polecenie to nie wygląda na szczególnie skomplikowane. Rogi pokazuje dopiero wtedy, gdy trzeba skonfigurować terminal podłączony na stałe. Przykładowo, jeśli trzeba uruchomić sterownik dla terminalu podłączonego przez port szeregowy, postać polecenia może być następująca:
eval `tset -s -Q -m dialup:?vt100 -m switch:z29`
Szczegóły składni tego polecenia nie są istotne dla większości administratorów. Jeśli jednak chcesz uzyskać dokładniejsze informacje na ten temat, zajrzyj na strony man dotyczące poleceń tset i stty.
Resetowanie terminalu
Od czasu do czasu zdarza się, że terminal podłączony przez port szeregowy przestaje zachowywać się poprawnie, bądź to nie wyświetlając znaku zachęty, bądź też wyświetlając różne „krzaczki”. Istnieją dwa proste sposoby wyjścia z takiej sytuacji. Jeśli jednak nie zadziałają, terminal powinien zostać wyłączony, a następnie uruchomiony ponownie (możesz również być zmuszony do wyłączenia procesów uruchomionych z tego terminalu).
Pierwszy sposób to wciśnięcie klawiszy Control+j, wpisanie polecenia stty sane, a następnie ponowne wciśnięcie Control+j. Terminal powinien zostać przywrócony do stanu używalności. Prawdopodobnie polecenie, które wpisujesz, nie zostanie wyświetlone na ekranie, więc wpisuj je uważnie.
Jeśli terminal nadal nie zachowuje się jak należy, spróbuj wpisać reset, a następnie wcisnąć klawisz Enter lub Control+j. Jeśli to również nie pomaga, terminal zawiesił się i musi zostać zresetowany ręcznie.
Modemy
Proces dodawania modemu nie różni się zasadniczo od dodawania terminalu. W większości przypadków można zastosować procedurę omówioną w podrozdziale „Terminale”.
Modemy w systemach linuxowych używane są do łączenia się z siecią lub z innym systemem oraz do przyjmowania połączeń przychodzących. Jeśli modem służy do podłączenia zdalnego terminalu, procedura jego instalacji jest taka, jak opisano w rozdziale „Terminale”; różni się tylko tym, że trzeba wybrać inne wpisy z pliku /etc/inittab. W przypadku modemu należy odszukać blok wpisów określający parametry połączeń z coraz mniejszymi prędkościami przesyłania danych.
Modemy, które mają być używane do połączeń z siecią i obsługi UUCP, zostaną omówione w rozdziale 37. „Praca w sieci” i rozdziale 39. „UUCP”. Rozdziały te zawierają również informacje o konfigurowaniu odpowiednich plików.
Jeśli modem ma służyć do łączenia się z innymi systemami, można go skonfigurować używając obsługiwanego za pomocą menu programu, wywoływanego z poziomu programu setup. Potrafi on automatycznie ustawić większość niezbędnych opcji.
Podsumowanie
W tym rozdziale podaliśmy najbardziej podstawowe informacje dotyczące urządzeń, dodawania ich do systemu i zarządzania nimi. Stosują się one do prawie wszystkich dystrybucji Linuxa, choć mogą istnieć pewne różnice w nazwach parametrów poszczególnych programów. Jeśli potrzebujesz dokładnych informacji na temat jakiegoś polecenia, zawsze możesz zajrzeć na strony man lub do dokumentacji.
Konfigurowanie i dodawanie do systemu urządzeń SCSI (ang. Small Computer System Interface) omówione jest w rozdziale 36. „Obsługa urządzeń SCSI”.
Jak skonfigurować system, by można było korzystać z poczty elektronicznej, dowiesz się z rozdziału 40. „Konfigurowanie poczty”.
Polecenie tar i proces tworzenia kopii zapasowych przedstawione są w rozdziale 45. „Kopie zapasowe”.
556 Część VI ♦ Linux dla administratorów
556 E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\33.DOC
E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\33.DOC 535
Rozdzia³ 33. ♦ Urządzenia 555