{ }
menu zespół linki Logowanie
Stabilny hosting
BSDGuru zawdzięcza
firmie Datanet.pl
Hosting BSDGuru.org - DataNet.pl

Porty szeregowe


15.1. Wstęp

UNIX od zawsze wspomagał komunikację z portami szeregowymi. Faktem jest iż pierwsze komputery w środowisku UNIX korzystały z portów szeregowych jako wyjść i wejść dla użytkowników. Rzeczy jednak bardzo się zmienily od czasu gdy "średni" terminal składał się z drukarki szeregowej pracującej z prędkością 10-ciu znaków na sekundę i klawiatury.
Ten rozdział pokaże Ci niektóre z dróg którymi FreeBSD kożysta z portów szeregowych.

15.2. Podstawy

Ta sekcja powinna dać Ci podstawowe informacje na temat portów szeregowych. Jeżeli nie znajdziesz tutaj wystarczającej informacji na interesujące Cię tematy sprawdź w sekcji "TERMINAL i połączenia Dial'up" tego dokumentu.

Urządzenie ttydX lub cuaaX jest używane do otwierania przez Ciebie aplikacji. Gdy proces otwiera urządzenie, przyjmuje ono swoje podstawowe ustawienia wejścia/wyjścia. Zobaczyć je możesz wydając z lini poleceń następującą komendę:

	#stty -a -f /dev/ttyd1

Gdy zmienisz ustawienia tego urządzenia będą one działały do chwili gdy urządzenie nie zostanie zamknięte. Z chwilą jego pomownego otwarcia powróci ono do ustawień podstawowych. Aby wprowadzić zmiany w ustawieniach podstawowych, powinienneś otworzyć i dostosować "stan pierwotny" (initial state) urządzenia.

Dla przykładu aby załączyć urządzenie w konfiguracji: CLOCAL mode, 8 bitów i XON/XOFF flow controll jako podstawowe ustawienia dla ttyd5, powinienneś wydać następujące polecenie:

	#stty -f /dev/ttyid5 clocal cs8 ixon ixoff

Dobrym miejscem na umieszczenie takich konfiguracji jest plik /etc/rc.serial . Gdy w nim umieścimy zmiany, uruchamiane aplikacje będą z niego pobierały ustawienia dla poszczególnych urządzeń (czyli w tym przypadku ttyid5) i przyjmowały je jako standartowe.
Oczywiście nadal będziesz mógł zmieniać te wartości z lini poleceń.

Możesz także oczywiście zapobiegać zmianom ustawień przez inne aplikacje wprowadzając urządzenie w stan blokady. Dla przykładu, aby zablokować prędkość urządzenia ttyd5 na 57600 bps, należało by wykonać następujące polecenie:

	#stty -f /dev/ttyld5 57600

Teraz aplikacja która otworzy urządzenie ttyd5 i będzie próbowała zmienić prędkość na porcie zostanie zablokowane na 57600 bps.

Oczywiście powinienneś tworzyć ustawienia stanu początkowego i stanu blokady danego urządzenia z możliwościa zapisu tylko przez root'a. Skrypt MAKEDEV nie robi tego z chwilą tworzenia wpisów ustawień danego urządzenia.

15.3. Terminale

Terminale dostarczają wygodniej i taniej drogi dostępu do Twojego systemu, gdy nie jesteś przy konsoli serwera ale jesteś podłączony do sieci. Ten rozdział opisuje jak używać terminali w FreeBSD.

15.3.1. Używanie i typy terminali

Pierwotny system UNIX nie posiadał konsoli. Zamiast tego, ludzie wchodzili i uruchamiali programy za pomocą terminali, które były połączone z komputerem-serwerem za pomocą portów szeregowych. Jest to całkiem podobnie jak gdybyśmy używali modemu i jakiegokolwiek terminala programowego to wdzwonienia się to innego zdalnego systemu w którym możemy pracować jedynie w trybie textowym.

Dzisiejsze komputery klasy PC posiadaja konsole zdolne do wysokiej jakości grafiki, ale zdolność do utrzymania połączenia na porcie szeregowym nadal instenije jak w przypadku wszystkich systemów UNIX w dniu dzisiejszym. FreeBSD nie stanowi tutaj żadnego wyjątku. Używając terminala podłaczonego do nieużywanego portu szeregowego możesz zalogować się i uruchomić każdy program który mogłbyś normalnie uruchomić na konsoli lub w okienku programu xterm w X Window.

Dla dużych użytkowników, możesz podłączyć wiele terminali w systemie FreeBSD i umieścić je na biurkach pracowników. Dla "domowych użytkowników" mogą służyć komputery takie jak starsze IBM PC lub Macintosh które będą podpięte jako sieciowy terminal do mocniejszego komputera na którym działać będzie FreeBSD. Możesz zamienić coś co byłoby jednoużytkownikowym komputerem w potężny wielodostępowy system.

W systemie FreeBSD są trzy rodzaje terminali:

  • "głupie" terminale
  • Komputery PC pracujące jako terminale
  • Terminale systemu X Windows

Opisane one są w następnych sekcjach.

15.3.1.1. Głupie terminale

Głupie terminale są wyspecjalizowanymi częściami sprzętu które możesz podłączyć do serwera poprzez porty szeregowe. Nazywają się głupie ponieważ mają tylko moc obliczeniową wystarczającą do wyświetlania, wysyłania i otrzymywania tekstu. Nie możesz uruchomić na niech żadnego programu.Komputer do którego podłączamy "głupie" terminale ma całą potrzebną moc obliczeniową potrzebną do uruchamiania edytorów tekstu, kompilatorów, klienta poczty, gier i wielu innych narzędzi.

Jest wiele rodzaji głupich terminali, tworzonych przez wiele różnych firm takich jak naprzykład Digital Equipment Corporation's (DEC) i jeko terminal VT-100 i Wyse's WY-75. Prawie każdy z nich będzie działał w systemie FreeBSD. Niektóre z terminali wyższej klasy mogą nawet wyświetlać grafikę, ale nieliczne pakiety oprogramowania mogą kożystać z tych zaawansowanych cech.

Głupie terminale są bardzo popularne w sieciach gdzie ich urzytkownicy nie potrzebują dostępu do aplikacji graficznych, jak te dostępne w systemie X Windows.

15.3.1.2. Komputery PC pracujące jako terminale

Jeżeli głupie terminale maja tylko zdolność do wyświetlania, wysyłania i przyjmowania tekstu, to z pewnością każdy "niepotrzebny" komputer może pracować jako głupi terminal. Wszystko czego potrzebujesz to odpowiedni kabel i programową emulację terminala do uruchomienia na komputerze.

Taka konfiguracja jest najpopularniejsza w domu. Dla przykładu : jeśli ktoś aktualnie pracuje na konsoli Twojego FreeBSD, to Ty możesz pracować w tym samym czasie będąc podłączonym z komputera o mniejszej mocy ale pracującego jedynie w trybie tekstowym do Twojego komputera z FreeBSD.

15.3.1.3. Terminale systemy X Windows

Terminale systemu X Windows są najbardziej wyrafinowane z dostępnych terminali. Zamiast podłączania ich poprzez porty szeregowe, zwykle są podłączone do sieci poprzez Ethernet. Mogą one używać aplikacji systemu X a nie tylko tekstowych.

W tym rozdziale nie znajduje sie opis instalacji, konfiguracji lub też używania X terminali. Wprowadzilismy X terminale tylko ze względu na kompletność tego rozdziału.

15.3.2. Kable i porty

Do podłączenia terminala do systemu FreeBSD potrzebujesz właściwego kabla i portu szeregowego do którego się podłączysz. Ta sekcja powie Ci co musisz zrobić. Jeżeli jesteś już obeznany z tematu terminali i posiadasz właściwy kabel możesz od razu przejść do rozdziału KONFIGURACJA.

15.3.2.1. Kable

Ponieważ terminale używają portów szeregowych, będziesz musiał użyć kabla szeregowego (RS-232C) do połączenia się z komputerem na którym pracuje FreeBSD.

Są 2-a rodzaje kanbla szeregowego. Którego z nich użyjesz zależy od od tego który terminal chcesz podłączyć

  • Jeżeli chcesz podłączyć osobisty komputer jako pracujący terminal użyj kabla do null-modemu.Kabel ten służy do łączenia 2-óch komputerów razem.
  • Jeśli posiadasz komputer który został fabrycznie przeznaczony jako terminal najlepszym żródłem informacji będzie dokumentacja dołączona do niego. Jeżeli nie posiadasz takowej spróbuj połączenia przez null-modem. Jeżeli nie będzie ono działać spróbuj standartowego kabla.

Także port szeregowy którego używasz w terminalu i w FreeBSD musi mieć odpowiednii wolny port abyś mógl użyć danego kabla.

15.3.2.1.1. Kabel typu Null-modem

Zerowy kabel modemowy przepuszcza niektóre sygnały wprost a niektóre przełącza. Dla przykładu wysyłanie danych odbywa się poprzez jeden pin w komputerze wysyłającym a jest odbierane przez inny pin w komputerze na koncu transmisji.

Jeżeli chciałbyś samemu zrobić sobie swój własny kabel, poniżej jest tablica pokazująca rekomendowane drogi do zbudowania swojego wlasnego kabla do połączenia null-modem. Pokazuje ona złącze typy RS-323C, typy sygnałów i numery pinów w wtyczce DB-25.

signal	pin				pin	signal
TxD	2	połączony z		3	RxD
RxD	3	połączony z		2	TxD
DTR	20	połączony z 		6	DSR
DSR	6	połączony z 		20	DTR
SG	7	połączony z 		7	SG
DCD	8	połączony z		4	RTS
RTS	4	połączony z		5	CTS
CTS	5	połączony z		8	DCD

Nota. Dla DCD do RTS, połącz piny 4 i 5 wewnętrznie w 
gniazdku, i dopiero z pinem 8-smym po 2-giej stronie.

15.3.2.1.2. Standard kabla RS-232C

Standartowy kabel RS-232C przesyła sygnały jeden do jednego. To znaczy że pin wysyłający dane na jednym koncu kabla idą do pinu wysyłającego dane na drugim końcu. To jest właśnie typ kabla do łączenia modemu i niektórych terminali do FreeBSD.

15.3.2.2. Porty

Porty szeregowe są bezpośrednimi urządzeniami przez które dane są transferowane pomiędzy serwerem FreeBSD a terminalem. Ta sekcja opisze jakie typy portów możemy używać i jak są one adresowane w FreeBSD.

15.3.2.2.1. Rodzaje portów

Kilka zdań na temat istniejących portów szeregowych. Zanim kupisz lub zbudujesz kabel, powinienneś mieć pewność że będzie on pasować to portu w Twoim terminalu i w komputerze na którym działa FreeBSD.

Większość terminali posiada port typu DB-25. Komputery osobiste, włączając w to komputery klasy PC działające z systemem FreeBSD posiadają porty DB-25 lub DB-9. Jeżeli posiadasz wieloportową kartę w swoim komputerze możesz mieć także porty typu RJ-12 lub RJ-45.

Najlepiej sprawdzić w dokumentacji dołączonej do sprzętu i w niej poszukać specyfikacji używanych portów. Niekiedy jednak wystarczy dokładnie oglądnać sprzęt aby znaleść odpowiednie porty.

15.3.2.2.2. Nazewnictwo portów

W FreeBSD dostep do portów szeregowych znajduje sie w katalogu /dev. Możesz z nich korzystac na 2-a różne sposoby.

  • Porty służące do przyjmowania połączeń nazywają się /dev/ttydX gdzie X jest numerem portu zaczynając od zera. Generalnie używamy tych portów także dla terminali. Wymagają one aby na lini pojawił się sygnał DCD aby zacząć pracę.
  • Porty służące do wywoływania połączeń nazywają się /dev/cuaaX. Zwykle portów tych nie używa się dla terminali lecz dla modemów. Możesz ich używać jeśli kabel lub terminal nie posiada wspomagania sygnalu CD (carrier detect).

Zobacz także strone manual'a sio(4) celem uzyskania większej ilości informacji.

Jeżeli masz podpiety terminal do pierwszego portu szeregowego (COM1 w systemie DOS), powinienneś używać /dev/ttyd0 aby komunikować się z terminalem. Jeżeli jest to drugi port szeregowy (COM2) powinienneś używać /dev/ttyd1 itd.

Nota. Sprawdź czy Twój kernel jest przystosowany do wspomagania komunikacji po portach szeregowych, zwłaszcza gdy pracujesz z kartą wieloportową. Zobacz do rozdziału Konfiguracja kernela FreeBSD w celu uzyskania większej ilości informacji.

15.3.3. Konfiguracja

Ta sekcja opisuje co potrzebujesz skonfigurować w swoim systemie aby umożliwić otwieranie sesji dla terminali. Zakładam że masz już poprawnie skonfigurowanego kernela który wspomaga połączenia z portami szeregowymi poprzez które terminale łączą się.

W skrócie, musisz przekazać procesowi init'a, który jest odpowiedzialny za kontrolę procesów i ich inicjalizacje, aby wystartowal proces getty, który jest odpowiedzialny za uruchomienie programu login.

Aby to wykonać musisz wyedytować plik /etc/ttys. Musisz wykonywać to oczywiście z poziomu root'a, aby móc wprowadzać zmiany w tym pliku.

  1. Dodaj wpis do pliku /etc/ttys nazwę urządzenia z katalogu /dev, jeżeli oczywiście jeszcze nie jest tam wpisana.
  2. Określ że ma być na tym porcie uruchamiany /usr/libexec/getty , i określ stosowny typ getty z pliku /etc/gettytab.
  3. Określ typ terminala.
  4. Ustaw port na "on"
  5. Zdecyduj czy port powinien być "secure".
  6. Zrestartuj init'a aby przeładował plik /etc/ttys .

Opcjonalnie możesz stworzyć własny getty który później wykorzystasz w kroku 2-gim, robiąc odpowiedni wpis w /etc/gettytab. Ten dokument jesnak nie powie ci jak to zrobić. Wiecej informacji uzyskasz czytając manuale gettytab(5) oraz getty(8).

W poniższych sekcjach opiszemy szczegółowo jak wykonać te kroki. Użyjemy działającego przykładu aby zilustrować co jest potrzebne aby to zrobić. W naszym przykładzie będziemy podłączać 2-a terminale do systemu: Wyse-50 i stary 286 IBM PC i działający na nim Procomm terminal programowo emulujący vt-100. Połączymy terminal Wyse-50 do drugiego potru szeregowego i 286 to szóstego portu szeregowego (w karcie wieloportowej).

Jeżeli chcesz znaleść więcej informacji o pliku /etc/ttys, przeczytaj manuala ttys(5) .

15.3.3.1. Dodawanie wpisu do pliku /etc/ttys

Pierwsze co musisz zrobić to dodać odpowiedni wpis do pliku /etc/ttys, o ile jeszcze go tam nie ma.

Plik /etc/ttys zawiera listę wszystkich portów poprzez które możesz się zalogować do systemu. Dla przykładu pierwsza wirtualna konsola ttyv0 ma swój wpis w tym pliku. Dzięki temu możesz sie przez nią zalogować na konsole. Plik zawiera wpisy także o innych wirtualnych konsolach, portach szeregowych i pseudo terminalach. Dla wbudowanych terminali, takich jakimi są porty szeregowe wpisy dokonujemy pomijając ich dokładną lokalizację (/dev).

Gdy instalujesz system FreeBSD, plik /etc/ttys zawiera wpisy dla pierwszych czterech portów szeregowych: od ttyd0 do ttyd3. Jeżeli podłączasz terminal pod jeden z tych portów nie musisz wprowadzać żadnych zmian.

W naszym przypadku, podłączaliśmy Wyse-50 do 2-giego portu szeregowego, ttyd1, który jest już w tym pliku. Musieliśmy dodać jednak wpis dla 286 PC podłączanego do szóstego portu na karcie wieloportowej. Poniżej jest fragment pliku /etc/ttys po tym jak dadaliśmy do niego nowy wpis:

ttyd1	"/usr/libexec/getty std.9600" unknown off   secure
ttyd5

15.3.3.2. Określanie programu getty

Następne co musimy zrobić to określić program który będzie używany do obsługi procesu logowania się na terminalu. Dla FreeBSD standatdowym programem służącym do tego jest /usr/lib/getty. Wyświetla on linie poleceń login: .

Program getty pobiera (opcjonalnie) jeden paramatr z lini poleceń używanej przez getty. Rodzaj getty mówi nam o charakterystyce danego połączenia z terminalem, tzn. o predkości połączenia, i parzystości. Program getty pobiera swoje ustawienia z pliku /etc/gettytab .

Plik /etc/gettytab zawiera wiele juz zdefiniowanych usatwień dla nowych i starych typów połączenia z terminalem. W prawie wszystkich przypadkach wpisy zaczynające sie od std , będą pracowały dla z terminalami na stałe przyłączonymi do serwera. Wpis ten ignoruje parzystość. W pliku tym znajdują sie linie z określeniami prędkości dla std od 110 do 115,200 bps. Oczywiście nie ma żadnych przeszkód abyś dodał tam swoje własne wpisy. Aby jednak dowiedzieć się o tym więcej przeczytaj w manualu stronę gettytab(5).

Gdy ustawiasz rodzaj getty dla pliku /etc/ttys, upewnij się czy połączenia komunikacyjne na terminalu zgadzają si.

Dla przykładu, Wyse-50 ma następujące ustawienia : brak parzystości i połączenie 38400 bps. PC 286 ustawione także na brak pażystości ale prędkość określimy jako 19200bps. Poniżej są linie w pliku /etc/ttys w których określamy właśnie te 2-a terminale.

ttyd1	"/usr/libexec/getty std.38400" unknown off  secure
ttyd5	"/usr/libexec/getty std.19200"

Uwaga. Drugie pole, w którym określamy program który ma być używany do uruchamiania terminala, zamykamy w cydzysłowiach. Jest to ważne, ponieważ gdybyśmy nie ujęli tego w cudzysłowia argumenty dla getty mogłyby być potraktowane jako następne pole.

15.3.3.3. Określanie podstawowego typu terminala

Trzecie pole w pliku /etc/ttys określa domyślny typ terminala dla danego portu. Dla portów dial-up'owych, będziesz wpisywał unknown lub dialup w tym miejscu ponieważ większość użytkowników posiada dial-up z praktycznie każdym rodzajem terminala lub softwerowego terminala. Dla komputerów na stałe przyłączonych do serwera, type terminala nie zmienia sie, więc możesz umieścić tam prawdziwy typ terminala.

Użytkownicy powinni stosować polecenie tset w ich plikach konfiguracyjnych dla ich kont (.login i .profile lub inne w zależności od specyfikacji serwera) do sprawdzenia typu terminala i wyświetlenia odpowiedniego znaku zachęty jeżeli jest to wymagane. Ustawiając typ terminala w /etc/ttys powinniśmy tak to zrobić aby użytkownicy nie mieli problemów z zalogowaniem się.

Aby znaleść odpowiedni typ terminala wspieranego przez FreeBSD, musisz przeglądnać plik /usr/share/misc/termcap. Jest tam lista okolo 600-set typów terminali. Możesz oczywiście dodać więcej jeżeli tego potrzebujesz. Aby jednak dowiedzieć się o tym więcej przeczytaj w manualu strone gettytab(5).

Dla przykładu, Wyse-50 jest typem terminala Wyse-50 (pomimo iż może on emulować inne typy pozostawimy go w trybie Wyse-50) . PC 286 jest uruchamiany z Procomm który emuluje terminal vt-100. Poniżej jest odpowiednie ale jeszcze nie ukończony wpis z pliku /etc/ttys dla naszego przykładu.

ttyd1	"/usr/libexec/getty std.38400"	wy50 off  secure
ttyd5	"/usr/libexec/getty std.19200"	vt100

15.3.3.4. Odblokowywanie portów

Następnym polem z pliku /etc/ttys, czyli czwartym w kolejności, jest pole które decyduje czy otworzyć port portu. Wstawiając w nie on uruchomimy proces init dla drugiego wpisu z pliku /etc/ttys, czyli getty, który wywoła dla nas proces logowania. Jeżeli wstawisz tam off, nieuruchomi sie getty i nie będzie można się zalogować na tym porcie.

Naturalnie, ustawia się to pole w przeważającej ilości przypadków na wartość on. Poniżej znowu wycinek pliku /etc/ttys z naniesioną konfiguracją. My w obydwu przypadkach ustawilismy wartość tego pola na on.

ttyd1	"/usr/libexec/getty std.38400"	wy50  on secure
ttyd5	"/usr/libexec/getty std.19200"	vt100 on

15.3.3.5. Określanie bezpiecznych portów

Doszliśmy już do ostatniego pola (no, prawie do ostatniego, jest jeszcze opcjonalne pole window, ale opuścimy je). A więc ostatnie pole mówi nam czy dany port jest bezpieczny.

Co znaczy bezpieczny port?

To znaczy że możemy sie z tego portu zalogować na konto root'a (lub każde inne o UID=0). Na porty nie określone jako secure, żaden użytkownik o UID=0 nie będzie mógł się zalogować.

Jak używać bezpiecznych i niezabezpieczonych portów?

Markując port jako niezabezpieczony, terminal na który się połączymy nie bedzie nam pozwalał na zalogowanie sie jako użytkownik z UID=0. Użytkownicy którzy znają hasło root'a na twój serwer będą najpierw musieli zalogować się jako normalni użytkownicy. Aby otrzymać prawa root'a będą musieli użyć komendy su.

I właśnie dlatego będą dwa zapisy aby pomóc wyśledzić ścieżkę uzyskania praw root'a, obie komendy login i su są zapisywane w logach systemowych (i loginy są również zapisywane w pliku wtemp).

Markując oprt jako bezpieczny, damy możliwość zalogowania się na niego użytkownikowi z prawami root'a. Będzie on (bądź inne osoby znające hasło na root'a) zalogować bezpośrednio jako użytkownik root. Niebędzie musiał wtedy używać komendy su aby uzyskać prawa root'a.

Którego typu powinienneś użyć?

Używaj "insecure". Typu "secure" używaj tylko dla terminali które nie są w sieci publicznej i najlepiej aby znajdowały się za "zamknietymi drzwiami" lub ścianą ognia.

I oto kompletne wpisy dla pliku /etc/ttys, wraz z komentarzem gdzie znajdują się dane terminale.

ttyd1	"/usr/libexec/getty std.38400"	wy50  on  insecure  
	# Kuchnia
ttyd5	"/usr/libexec/getty std.19200"	vt100 on  insecure  
	# Gościnna Łazienka

15.3.3.6. Wymuszenie restartu init aby przeładować ustawienia /etc/ttys

Gdy uruchamiasz FreeBSD, pierwszy proces, init, czyta zawartość pliku /etc/ttys i zgodnie z nim uruchamia programy zgodnie z listą dla każdego wpisu w którym pole czwarte miało wartość on, pozwalając na zalogowanie sie na dany terminal.

Po tym jak wyedytujesz i dokonasz zmian w pliku /etc/ttys, nie musisz restartować systemu aby init zobaczył zmiany w tym pliku. Więc, init ponownie odczyta plik /etc/ttys, gdy otrzyma sygnał SIGHUP.

Po tym jak zapiszesz wprowadzone zmiany do pliku /etc/ttys, wyślij sygnal SIGHUP do procesu init wpisując:

	#kill -HUP 1

(Proces init zawsze ma ID 1)

Jeżeli wszystko skonfigurowało się poprawnie, i wszystkie kable są wpięte w odpowiednie porty komunikacyjne, i terminal jest załączony, powinienneś zobaczyć linie logowania. Twój terminal jest gotowy do pierwszego zalogowania.

15.3.4. Usuwanie błędów

Nawet jeżeli całą operacje przeprowadzamy z najdrobniejszymi szczegółami, ciągle coś może pojść nie tak. Poniżej lista symoptomów i sugerowanych możliwości rozwiązania problemu.

Nie pokazuje się okno logowania

Upewnij się że terminal jest podłączony i załączony do prącu. Jeżeli jest to osobisty komputer pracujący jako terminal, upewnij się że jest na nim uruchomiona programowa emulacja na dobry port komunikacyjny.

Upewnij się że kable są poprawnie wpięte do obydwu komputerów.

Upewnij się że są to dobre kable.

Upewnij się że terminal i FreeBSD mają ustawioną taką samą prędkość transmisji (bps) i parzystość. Jeżeli masz terminal graficzny, upewnij się że kontrast i jasność nie są wyzerowane. Jeżeli jest to drukarka pracująca jako terminal upewnij się że jest w niej papier i tusz w odpowiednich ilościach i miejscach.

Upewnij się że uruchomiony zostal proces getty i obsługuje terminal. Wpisz

#ps -axww|grep getty

aby otrzymać listę uruchomionych procesów getty. Powinienneś w niej zobaczyć wpis dla Twojego terminala. Dla przykładu :

22189	d1  Is+  0:00.03  /usr/libexec/getty std.38400 ttyd1

pokazuje że proces getty jest uruchomiony na drugim porcie komunikacyjnym ttyd1 i używa wpisu std.38400 z /etc/gettytab.

Jeżeli nie ma uruchomionego takiego procesu getty sprawdź czy odblokowałeś port w pliku /etc/ttys. Upewnij się żę napewno wykonałeś polecenie kill -HUP 1

Dziwne znaczki występujące zamiast lini login:

Upewnij się że terminal i FreeBSD są zgodne ze sobą jeżeli chodzi o ustawienia prędkości (bps) i parzystości. Sprawdz proces getty i miej pewność że używasz dobrego typu getty. Jeżeli nie wyedytuj /etc/ttys i ponownie wykonaj polecenie kill -HUP 1

Znaki są wyświetlane podwójnie, a hasło nie jest ukrywane

Przełącz terminal (lub programową emulację terminala) z "half duplex" lub "local echo" na "full duplex"

15.4. Obsługa połączeń wychodzących

Ten dokument dostarczy Ci sugestii odnośnie skonfigurowania FreeBSD jako systemu do przyjmowania połączeń typu dial-up. Ten dokument jest napisany w oparciu o doświadczenia autora (Guy Helmer ) z systemem FreeBSD wersja 1.0 i 1.1 oraz 1.1.5.1 (oraz doświadczeniem z połączeniami dial-up w innych systemach UNIX), aczkolwiek ten dokument może nie odpowiedzieć na Twoje wszystkie pytania dotyczące konfiguracjii lub dostarczyć jej przykłądów niewystarczających w Twoim przypadku. Autor nieponosi też odpowiedzialności za ewentualne straty danych powstałe w wyniku używania zawartych tutaj wskazówek.

15.4.1. Wymagania

Aby zacząć pracę nad tym rozdziałem potrzebna jest podstawowa wiedza na temat systemu FreeBSD. Autor zakłada że: masz zainstalowany system FreeBSD, wiesz jak edytować w nim pliki oraz jak korzystać z manuali systemowych. Jako omówienie opisane poniżej, dla określonej wersji systemu FreeBSD, znajduje się podstawowa wiedza na temat terminologi, modemów oraz okablowania.

15.4.1.1. Wersja systemu FreeBSD

Pierwsze co zakładamy to to że używasz FreeBSD w wersji 1.1 lub wyższej (włączając wersję 2.X). FreeBSD w wersji 1.0 zawiera dwa różne sterowniki sieciowe, co komplikuje sytuację. Więc, sterownik urządzenia szeregowego (sio) jest udoskonalany w każdym wydaniu FreeBSD, więc w nowszej wersji FreeBSD będzie udoskonalony i bardziej efektywny sterownik niż w wcześniejszej wersji systemu.

15.4.1.2. Terminologia

Szybkie wyjaśnienie terminologii:

bps
Bits per Second -- prędkość z jaką dane są przesyłane 
(bitów na sekundę)

DTE
Data Terminal Equipment -- dla przykładu Twój 
komputer

DCE
Data Communications Equipment -- Twój modem

RS-232
Standard agencji EIA dla komunikacji z portami 
szeregowymi dla hardwar'u

Jeżeli potrzebujesz więcej informacji na ten temat terminologi i tematu komunikacji, autor poleca do przeczytania pozycję "The RS-232 Bible" (niestety brak numeru ISBN), która jest warta odwołania.

Gdy mówimy o prędkości przesyłu danych, autor nie używa terminu "baud". "Baud" odnosi się do ilości elektrycznych zmian stanu, który może być uzyskany w okresie czasu, podczas gdy "bps" jest poprawnym terminem którego należy używać.

15.4.1.3. Zewnętrzne modemy kontra modemy wewnętrzne

Zewnętrzne modemy są mniej kłopotliwe do połączeń dial-up, ponieważ często mogą być konfigurowane na stałe poprzez parametry przechowywane w nie kasującej się pamięci RAM, i dostarczają nam informacji o sygnałach RS-232 poprzez migające diody. Migające diody imponują oglądającym, ale mogą nam także pokazywać co obecnie modem robi.

Wewnętrzne modemy zwykle nie posiadają niekasującej się pamięci RAM, dlatego ich konfiguracje może odbywać się tylko poprzez ustawianie zworek. Jeżeli modem wewnętrzny posiada nawet jakies diody, to i tak kożystanie z nich jest dość małowygodne ponieważ znajdują sie one w tylniej częsci komputera lub są przysłonięte obudową.

15.4.1.4. Modemy i kable

Za podstawową wiedzę na ten temat przyjmuje się:

  • Wiesz jak połączyć modem z komputerem tak żeby mogły się ze sobą komunikować
  • Jesteś zaznajomiony z komendami Twojego modemu, lub wiesz gdzie ich szukać jeżeli zaszłaby taka potrzeba.
  • Wiesz jak skonfigurować swój modem (prawdopodobnie poprzez program do komunikacji z terminalem) gdzie możesz ustawić parametry RAM "na stałe".

Pierwsze co należy zrobić to podłączyć modem, przeważnie jest do proste, wiekszość szeregowych kabli działa bez problemów. Będziesz także potrzebował kabla z odpowiednią wtyczką (DB-9 lub DB-25 żeński lub męski) na każdym końcu, a kabel musi być typu DCE-to-DTE z następującymi kablami syngałowymi:

	- Transmitted Data (SD)

	- Recived Data (RD)

	- Request to Send (RTS)

	- Clear to Send (CTS)

	- Data Set Ready (DSR) 

	- Data Terminal Ready (DTR)

	- Carrier Detect (CD)

	- Signal Ground (SG)

FreeBSD wymaga sygnałów RTS i CTS dla sterowania strumieniem danych przy prędkościach powyżej 2400 bps, sygnał CD do wykrycia kiedy nadchodzi odpowiedź lub linia się podnosi, i sygnału DTR do resetowania modemu po zakończeniu sesji. W niektórych kablach jest więcej lini niż wymaga się do przesyłania sygnałów, więc jeżeli masz problem , jak naprzykład zalogowana sesja nie kończy się gdy linia "podnosi się", problem może wynikać z winy kabla.

Drugim wymogiem jest to abyś umiał posługiwać się modemem którego używasz. Jeżeli nie znasz poleceń lini komend swojego modemu, bedziesz potrzebował podręcznika modemu lub podręcznego poradnika użytkownika.

Ostatnią żeczą która musisz wiedzieć to jak ustawić swój modem aby dobrze pracował z systemem FreeBSD. Jak i inne UNIX'owe systemy operacyjne, FreeBSD używa sygnałów sprzętowych do znajdywania nadchodzących połączeń, lub odpowiedzi na wywołanie połączenia, lub też resetowania modemu po połączeniu. FreeBSD unika wysyłania komend do modemu lub sprawdzania statusu z modemu. Jeżeli jesteś obeznany z podłączaniem modemów do bazujacych na PC BBS'ów, może się to kłopotliwe.

15.4.1.5. Szeregowe interfejsy brane pod uwagę

FreeBSD obsługuje NS8250-, NS16450-, NS 16550- i NS 16550A-based EIA RS-232C (CCIT V.24) interfejsy komunikacyjne.Urządzenia 8250 i 16450 mają jedno znakowy bufor. Urządzenie 16550 posiada 16-sto znakowy bufor, który zwiększa wydajność systemu. Błąd w planowaniu 16550 przeszkadza w używaniu 16-sto znakowego bufora, więc jeżeli to możliwe staraj się używać 16550A. Ponieważ jedno-znakowy bufor urządzenia wymaga większej pracy systemu operacyjnego niż 16-sto znakowy bufor, karta 16550A jest bardziej wygodna i preferowana. Jeżeli system ma wiwle aktywnych portów szeregowych lub duże load'y, karta 16550A jest lepsza dla uzyskania niskiej ilości błędów transmisji.

15.4.2. Szybki przegląd

Poniżej jest proces w jakim FreeBSD postępuje aby zalogować połączenie Dial'up. Proces getty uruchomiony przez init, czeka aby otworzyć określony port szeregowy (dla przykładu /dev/ttyd0). Komenda ps ax powinien pokazać:

4850	??	I  0:00:09  /usr/libexec/getty V19200  ttyd0

Gdy urzytkownik dzwoni modemem i modemy nawiązą połączenie, sygnał CD jest potwierdzeniem modemu. Kernel zauważy ze połączenie zostało odkryte i getty zostało otwarte dla portu. getty wysyła linię logowania login: na określonej prędkości lini. getty sprawdza czy otrzymywane znaki są dopuszczalne, i , w standardowej konfiguracji, jeżelie znajduje śmieci (prawdopodobnie połącznenie modemów ma inną prędkość niż getty), getty stara się dostosować predkość tak aby otrzymywane znaki były czytelne.

Mamy nadzieję że getty znajdzie poprawną prędkość i urzytkownik zobaczy słowo login: . Po tym jak wprowadzi on swoją nazwę urzytkownika, getty wykona program /usr/bin/login, który dokonczy logowanie pytając o hasło a następnie uruchomi shell.

Przyglądnijmy się głębiej konfiguracji.

15.4.3. Konfiguracja kernela

Typowy kernel FreeBSD jest przygotowany do obsługi czterech portów szeregowych, znanych w DOS'ie pod nazwami : COM1:, COM2:, COM3: i COM4:. FreeBSD może obecnie pracować także z "głupimi" wieloportowymi kartami szeregowymi jak naprzykład Boca Boeard 1008 i 2016 (proszę przeczytaj manuala sio(4) aby dowiedzieć się więcej o konfiguracji kernela z wieloportową kartą szeregową). Standardowy kernel szuka jedynie standardowych portów COM.

Aby zobaczyć czy Twój kerel rozpoznał któryś z Twoich portów szeregowych, obserwuj komunikaty podczas procesu botowania sie kernela, lub użyj polecenia /sbin/dmesg aby powtórzyć te komunikaty. W szczególności szukaj lini zaczynających się od słowa sio. Hint: aby zobaczyć tylko komunikaty zawierające w sobie słowo sio użyj polecenia :

	#/sbin/dmesg | grep 'sio'

Dla przykładu, w systemie z czterema portami szeregowymi, są to następujące porty:

	sio0 at 0x3f8-0x3ff irq 4 on isa 
	sio0: type 16550A
	sio1 at 0x2fe-0x2ff irq 3 on isa
	sio1: type 16550A
	sio2 at 0x3e8-0x3ef irq 5 on isa
	sio2: type 16550A 
	sio3 at 0x2e8-0x2ef irq 9 on isa
	sio3: type 16550A

Jeżeli Twój kernel nie rozpoznał wszystkich portów szeregowych, prawdopodobnie będziesz musiał stworzyć kernel z określonymi parametrami specjalnie dla Twojej konfiguracji sprzętowej.

Proszę przeczytaj w BSD System Menager's Manual rozdział "Building Kernels with Config" [tekst znajdziesz także w /usr/src/share/doc/smm] i "FreeBSD Configuration Options" [ z /sys/conf/options i /sys/arch/conf/options.arch z arch zaczynającym się dla przykładu od i386 ] aby dowiedzieć się więcej na temat konfiguracji i tworzenia kernela. Może będziesz musiał rozpakować źródła dystrybucji kernela, jeżeli nie masz tych źródeł obecnie w systemie *srcdist/srcsys.?? w FreeBSD 1.1, srcdist/sys.?? w FreeBSD 1.1.5.1, lub wewnątrz dystrybucji w FreeBSD 2.0) aby móc (umieć) skonfigurować i stworzyć kernel.

Stwórz konfiguracje kernela dla własnego systemu (jeżeli takowej jeszcze nei posiadasz) wejdź do katalogu /sys/i386/conf. Jeżeli tworzysz nowy plik konfiguracyjny, skopij plik GENERICAH (obecnie GEENRIC, albo LINT) do YOURSYS, gdzie YOURSYS jest nazwą Twojego systemu, ale pisaną z dużych liter. Wyedytuj go i zmień następujące linie:

device  sio0 at isa? port "IO_COM1" tty irq 4 vector siointr
device  sio1 at isa? port "IO_COM2" tty irq 3 vector siointr
device  sio2 at isa? port "IO_COM3" tty irq 5 vector siointr
device  sio3 at isa? port "IO_COM4" tty irq 9 vector siointr

Możeszy odkomentować lub calkowicie usunąć linie dla użądzeń których nie masz. Jeżeli masz wieloportową kartę szeregową, jak Boca Board BB2016, przeczytaj manuala sio(4) jeżeli chcesz mieć kompletne informacje na temat jak wpisać linie dla wieloportowej karty. Bądź ostrożny jeżeli używasz pliku konfiguracyjnego z innej wersji systemu, ponieważ flagi użądzeń różnią się w niektórych wersjach.

NOTA: port "IO_COM1" jest substytutem dla port 0x3f8, IO_COM2 dla 0x2f8, IO_COM3 dla 0x3e8 i IO_COM4 dla 0x2e8, które mają wspólne adresy portów dla respektowanych portów szeregowych; przerwania 4,3,5,9 są wspólnymi przerwaniami dla lini. Tak więc regularne porty szeregowe nie mogą wspólnie kożystać z przerwań na ISA-bus (wieloportowe karty mają wbudowaną na płycie elektronikę, która pozwala wszystkim urządzeniom typu 16550A na płycie dzielić jedno albo dwa przerwania lini zgłoszeniowej).

Gdy skończysz korygować swój plik kernela, użyj programu config jak w dokumentacji "Building Berkeley Kernels with Config" i przeczytaj manuala config(8) aby przygotować strukturę kernela, później go stworzyć i zainstalować a następnie przetestować.

15.4.4. Pliki specjalne urządzeń

Większość urządzeń w kernelu jest dostępna jako "pliki specjalne urządzeń", które znajdują się w katalogu /dev . Urządzenie sio jest dostępne jako użądzenie /dev/ttyd? (wdzwaniania) i /dev/cuaa? (połączeń wychodzących). W FreeBSD versji 1.1.5 i wyższych są tam także urządzenia inicjalizujące (/dev/ttyid? i /dev/cuai0?) i urządzenia blokujące (/dev/ttyld i /dev/cual0). Urządzenia inicjalizujące są używane do zainicjowania portu szeregowego za każdym razem gdy port ten jest otwierany, tak jak polecenie crtcts dla modemów które używają sygnalizacji CTS/RTS do sterowania przepływem danych. Urządzenia blokujące sa używane aby nadać flagę zablokowane co chronić będzie programy lub użytkowników przed zmianą parametrów, przeczytaj manuala termios(4), sio(4) i stty(4) aby dowiedzieć się o ustawieniach terminala, blokowaniu i inicjowaniu urządzeń i i ustawianiu opcji terminala.

15.4.4.1. Tworzenie plików specjalnych urządzeń

Skrypt shell'owy o nazwie MAKEDEV w katalogu /dev zarządza plikami specjalnymi urządzeń. Aby użyc skryptu MAKEDEV do stworzenia pliku specjalnego dla urządzenia do dial'up dla portu COM1: (port 1) użyj MAKEDEV ttyd1 .

MAKEDEV tworzy nie tylko pliki specjalne urządzenia /dev/ttyd? , ale także /dev/cuaa? (i wszystkie pliki do urządzeń inicjalizujących i blokujących w systemie) i usuwa usuwa plik specjalny terminala podpietego na sztywno (/dev/tty0?) jeżeli takowy istnieje.

Po stworzeniu nowych plików specjalnych urządzeń, sprawdź uprawnienia tych plików (a zwłaszcza /dev/cua* ) aby mieć pewnie że jedynie uzytkownicy którzy powinni mieć do niech dostęp moga czytać i zapisywać na nich -- najprawdopodobniej nie będziesz chciał dopuścić wszystkich swoich użytkowników aby używali Twoich modemów do łączenia się. Standardowe uprawnienia dla plików /dev/cua* powinny być wystarczające:

crw-rw----  1  uucp  dialer  28, 129 Feb 15 14:38  /dev/cuaa1
crw-rw----  1  uucp  dialer  28, 161 Feb 15 14:38  /dev/cuaia1
crw-rw----  1  uucp  dialer  28, 193 Feb 15 14:38  /dev/cuala1

Te uprawnienia dopuszczają do używania użytkownika uucp oraz innych użytkowników z grupy dialer aby mogli korzystać z urządzenia.

15.4.5. Plik konfiguracyjny

Są trzy pliki konfiguracyjne w katalogu /etc które najprawdopodobniej będziesz musiał zmodyfikować aby dopuścić połączenia dial-up do twojego systemu. Pierwszy , /usr/gettytab, zawiera informacje o konfiguracji dla deamona /usr/libexec/getty. drugi, /etc/ttys, zawiera informacje które mówią /sbin/init jakie urządzenie tty powienien posiadać proces getty uruchamiany dla niego. Na końcu możesz umieścić polecenie inicjalizacji portów w skrypcie /etc/rc.serial jeżeli posiadasz system w wersji 1.5.1.1 lub wyższej, lub możesz inicjalizować porty z skryptu /etc/rc.local .

Są dwie szkoły konfigurowania modemów Dial-up w UNIX'ie. Jedna grupa konfiguruje swoje modemy i system tak że nei ma znaczenia z jaką prędkościa użytkownik wdzwania się do ich systemu, interfejs portu RS-232 uruchamia sie z zablokowaną prędkością. Kożyść wynikająca z takiej konfiguracji jest taka że użytkownik wdzwaniający się zawsze uzyska połączenie. Problemem jest to że system nie wiem jaka jest prawdziwa prędkość połączenia, wiec pełnoekranowe programy jak Emacs nie rozszerzą swoich metod 'screen-painting' aby stworzyć lepsze odpowiedzi dla niższych prędkości.

Druga szkoła to konfiguracja swoich modemow na interfejsach RS-232 tak aby prędkość bazowa jest uzależniona od prędkości zdalnego użytkownika. Połączenie w standardzie V.32bis (14,4 Kbps) z modemem uruchomionym na interfejsie RS-232 z prędkościa 19,2 Kbps, gdy połączenie 2400bps uruchamia interface RS-232 w tej właśnie prędkości. Ponieważ getty nie zrozumie żadnego szczególnego raportu z połączenia modemów, getty wyświetli login: w prędkości zgodnej z prędkościa inicjalizującą i będzie sprawdzał wracające do niego znaki. Jeżeli użytkownik zobaczy u siebie śmieci, powinien naciskać dopóki nie zobaczy poprawnych znaków na swoim monitorze. Jeżeli prędkość nie została określona, getty szuka wszystkiego co użytkownik nazywa śmieciami, i próbuje przejść do następnej prędkości i ponownie wyświetlić login: . Oczywiście, sekwencja logowania nie wygląda tak "czysto" jak w poprzednim metodzie wykorzystującej blokowanie prędkości, ale użytkownik przy niższych prędkościach powienien otrzymywać lepsze interaktywne odpowiedzi z programów pełno-ekranowych.

Autor będzie próbował dać pośrednie informacje pomiedzy tymi dwoma sposobami, ale jest uprzedzony do posiadania konfiguracji w której prędkość połączenia modemów jest zależna od prędkości połącznia.

15.4.5.1. /etc/gettytab

/etc/gettytab jest stylem termacap(5) plikiem konfiguracyjnym dla informacji o getty. Proszę zobaczyć w manual'u gettytab(5) w celu uzyskania kompletnych informacji na ten temat.

15.4.5.1.1. Konfiguracja z stała prędkością

Jeżeli blokujesz swoją prędkość komunikacji z modemem, prawdopodobnie nie będziesz musiał dokonywać żadnych zmian w pliku /etc/gettytab .

15.4.5.1.2. Konfiguracja z dopasowywaną prędkością

Będziesz musiał ustawić wpis w /etc/gettytab aby przekazywał on procesowi getty informacje na o prędkości jaką chcesz używać dla swojego modemu. Jeżeli masz modem 2400bps, będziesz prawdopodobnie używał istniejącego wpisu D2400. Ten wpis istnieje w FreeBSD 1.1.5.1. w pliku gettytab, więc nie będziesz potrzebował dodawać nic chyba że jest to inna wersja FreeBSD.

#
# Fast dialup terminals, 2400/1200/300 rotary 
# (can start either way)
D2400|d2400|Fast-Dial-2400:\
		:nx=D2400:tc=2400-baud:
3|D1200|Fast-Dial-1200:\
		:nx=D300:tc=1200-baud:
5|D300|Fast-Dial-300:\
		:nx=D2400:tc=300-baud:

Jeżeli masz modem o większej prędkości, będziesz prawdopodobnie potrzebował dodać wpis w plik /etc/gettyrab; poniżej jest przykładowy wpis pozwalający używać Ci modemu 14.4 Kbps z górnym interfejsem ustawionym na 19.2 Kbps.

	#
	# Additioooons for a V.32bis Modem
	#

	um|V300|High Speed Modem at 300,8-bit:\
		:nx=V19200:tc=std.300:
        un|V1200|High Speed Modem at 1200,8-bit:\
                :nx=V300:tc=std.1200:
        uo|V2400|High Speed Modem at 2400,8-bit:\
                :nx=V1200:tc=std.2400:
        up|V9600|High Speed Modem at 9600,8-bit:\
                :nx=V2400:tc=std.9600:
        um|V19200|High Speed Modem at 19200,8-bit:\
                :nx=V9600:tc=std.19200:

w FreeBSD 1.1.5 i późniejszych taki wpis zaowocuje połączeniem z ustawieniami 8-bit, bez parzystości. W wersjach FreeBSD poniżej 1.1 dodaj parametr :np: do wpisu std.xxx na początki pliku dla 8-smio bitowych, bez parzystości, inaczej, standardowo połączenie ma parametry 7bit, parzystość.

Powyższy przykłąd startuje z prędkościa 19.2 Kbps (dla połącznień V.32bis), następnie przełącza się na 9600bps (dla V.32), 2400 bps, 1200 bps, 300bps i wróci do 19.2 Kbps. Przełączanie połączeń jest zdefiniowane w nx=("następny w tablicy"). Każda z lini używająca wpisu tc=("kontynuacja tablicy") podnosi resztę z "standardowych" ustawień dla konkretnej prędkości połączenia.

Jeżeli posiadasz modem 28.8 Kbps i/lub chcesz skorzystać z kompresji na modemie 14.4 Kbps, będziesz musiał użyć większych prędkości połączenia niż 19.2 Kbps. Poniżej jest przykład wpisu w gettytab startującego od prędkości 57600 Kbps:

	#
	# Additions for V.32bis or V.34 Modem
	# Starting at 57.6 Kbps
	#
	vm|VH300|Very High Speed Modem at 300,8bit:\
		:nx=VH57600:tc=std.300:
        vn|VH1200|Very High Speed Modem at 1200,8bit:\
                :nx=VH300:tc=std.1200:
        vo|VH2400|Very High Speed Modem at 2400,8bit:\
                :nx=VH1200:tc=std.2400:
        vp|VH9600|Very High Speed Modem at 9600,8bit:\
                :nx=VH2400:tc=std.9600:
        vq|VH57600|Very High Speed Modem at 57600,8bit:\
                :nx=VH9600:tc=std.57600:

Jeżeli masz wolny procesor lub duże load'y systemowe i nie masz portu szeregowego 16550-based, możesz otrzymywać blędy sio "silo" przy połączeniu 57.6 Kbps.

15.4.5.2. /etc/ttys

/etc/ttys jest listą ttys dla init do monitorowania. /etc/ttys także dostarcza bezpiecznych informacji do login: (użytkownik root może logować się jedynie na ttys oznaczone jako secure). Zobacz w manualu ttys(5) aby dowiedzieć się więcej.

Będziesz musiał wcześniej zmodyfikować istniejące linie w /etc/ttys lub dodać nowe aby init mógł uruchomić proces getty automatycznie dla nowego portu dial-up. Ogólny format lini będzie taki sam, czy używasz blokowanej prędkości czy też ustawianej w konfiguracji:

	ttyd0	"/usr/libexec/getty xxx"	dialup	on

Pierwszy atrybut na poczatku lini określa urządzenie specjalne, dla tego wpisu -- ttyd0 znaczy /dev/ttyd0 jest plikiem który getty będzie obserwować. Drugi atrybut, "/usr/libexec/getty xxx" (xxx jest powtórzone w ustawieniach inicjalizacyjnych gettytab) jest procesem init uruchamianym na urządzeniu. Trzecim atrybutem, dialup, jest standardowy typ terminala. Czwartym parametrem , on, wskazującym na init że ta linia jest opcjonalna. Może istnieć także piąty parametr, secure, ale ale powinien on być używany tylko dla terminali fizycznie bezpiecznych (jak naprzyklad konsola).

Standardowym typem terminala (dialup dla powyższego przykładu) może różnić się w lokalnych preferencjach. dialup jest tradycyjnym standardowym typem terminala dla lini dial-up, więc użytkownicy mogą tworzyć swój własny skrypt z ustawieniami aby zauważyć że terminal jest jako dialup i automatycznie zmienić go na inny typ. Aczkolwiek autor znalazł wygodniejszy sposób, jego strona ustawia vt100 jako standardowy terminal, ponieważ użytkownicy używają emulacji VT100 an swoich zdalnych systemach.

Po tym jak dokonasz zmian w /etc/ttys, bedziesz musiał do procesu init sygnał HUP aby go ten zczytał na nowo ustawienia w pliku. Możesz użyć komendy:

	# kill -HUP 1

aby wysłać ten sygnał. Jeżeli jest to pierwszy raz gdy zmieniasz ustawienia systemu, pomimo to, byćmoże będziesz musiał zaczekać dopóki twój modem nie zostanie odpowiednio skonfigurowany i podłączony zanim wyślesz HUP do init.

15.4.5.2.1. Plik konfiguracyjny z blokowaną prędkością

Dla konfiguracji z blokowaną prędkością, twoje wpisy w ttys będą potrzebować wpisu z poprawną prędkością aby go dostarczyć do getty. Dla modemu którego prędkość na porcie jest zablokowana na 19200 Kbps, wpis ttys powinien wyglądać mniejwięcej tak:

ttyd0	"/usr/libexec/getty	std.19200"	dialup	on

Jeżeli modem jest zablokowany na innej prędkości przesyłania danych, zastąp wpis std.19200 odpowiednim dla prędkości wg schamatu std.speed z /etc/gettytab.

15.4.5.2.2. Konfiguracja z ustawianą prędkością

W konfiguracji z ustawianą prędkością, twoje wpisy ttys będą wymagały właściwego początku "auto-baud" (sic) wpisu w /etc/gettytab. Dla przykładu, jeżeli dodasz powyższe wpisy dla modemów z negocjowaną prędkością która startuje od 19.2 Kbps (wpisy w gettytab zawierają punkt startowy na V19200), twój ttys powinien wyglądać tak:

ttyd0	"/usr/libexec/gettty	V19200"		dialup	on

15.4.5.3. /etc/rc.serial lub /etc/rc.local

Modemy wysokich prędkości, jak V.32, V.32bis i V.34, wymagają używania sprzetowego sterowania przepływem danych. Możesz dodać komende stty do /etc/rc.serial w FreeBSD 1.1.5.1. i wyżej lub w /etc/rc.local w FreeBSd 1.1, aby ustawić flagę sprzętowej kontroli transmisji danych w kernelu FreeBSD dla portu modemowego.

Dla przykładu, w FreeBSD 1.1.5.1, /etc/rc.serial czyta:

	#!/bin/sh
	#
	# Serial port initial configuration

	stty -f /dev/ttyid1 crtscts
	stty -f /dev/cuai01 crtscts

Te ustawienia flagi crtscts dla termios napierwszy port szeregowy (COM2:) są dla inicjalizacji urządzeń dial-in i dial-out.

W starszych systemach jak FreeBSD 1.1, te wpisy dodawaliśmy do pliku /etc/rc.local aby ustawić te flagę na urządzeniu jako crtscts:

	# Set serial ports to use RTS/CTS flow control
	stty -f /dev/ttyd0 crtscts
        stty -f /dev/ttyd1 crtscts
        stty -f /dev/ttyd2 crtscts
        stty -f /dev/ttyd3 crtscts

Ponieważ w FreeBSD 1.1 nie ma plików specjalnych urządzeń, jeden poprostu wyłącznie ustawia flagi na urządzeniach, i należy mieć nadzieję że nie zostaną one zmienione.

15.4.6. Ustawienia modemu

Jeżeli posiadasz modem który pozwala na trwłe ustawienia parametrów w nieulegającym resetowaniu RAM'ie, będziesz musiał użyć programu terminala (jakim jest naprzykład Telix pod PC-DOS lub tip pod FreeBSd) aby ustawić parametry. Podłącz modem używając tej samej prędkości początkowej jaką używa getty i skonfiguruj RAM modemu zgodnie z następującymi wymaganiami:

  • zapewnić CD przy połączeniu
  • zapewnić DTR dla operacji; zrzucić DTR i zresetować modem
  • sterowanie przepływem danych przez CTS
  • zablokować sterowanie przepływem danch XON/XOFF
  • RTS otrzymuje sterowanie przepływem danych
  • bez komendy echo

Proszę przeczytaj dokumentację do swojego modemu by znaleść komendy i/lub zworki które do tego służą.

Dla przykładu aby ustawić powyższe ustawienia na modemie USRobotics Sportster 14,400 zewnętrznym, jedną z możliwości jest wpisanie takiej komendy do modemu:

	ATZ
	AT&C1&D2&H1&I0&R2&W

Będziesz prawdopodobnie także potrzebował to zrobić aby zmienić inne ustawienia w modemie jak naprzykład wtedy gdy chcesz używać V.42bis i/lub kompresji MNP5.

Zewnętrzny modem USR Sportster 14,400 ma także kilka zworek, które muszą zostać usatwione, dla innych modemów możesz posłużyć się poniższym przykładem:

- Przełącznik 1: Góra - DTR Normal
- Przełącznik 2: Nieważny (Verbal Result Codes/Numeric 
				Result Codes)
- Przełącznik 3: Góra - Suppress Result Codes
- Przełącznik 4: Dół - Bez echo, offline commands
- Przełącznik 5: Góra - Auto Answer
- Przełącznik 6: Góra - Carrier Detect Normal
- Przełącznik 7: Góra - Załaduj standardowy NVRAM
- Przełącznik 8: Nieważny (Smart Mode/Dumb Mode)

Wyświetlenie kodu wynikowego powinno być zablokowane dla modemów dial'upowych aby uniknąć problemów które mogą wystąpić gdy getty poda omyłkowo linię login: do modemu, jest to w lini poleceń i modem wyświetli echo lub zwróci kod wynikowy. Słyszałem że taka sekwencja może prowadzić do "głupiej" rozmowy getty z modemem.

15.4.6.1. Plik konfiguracyjny z blokowaną prędkością

Dla konfiguracji z blokowaną prędkością, będziesz musiał skonfigurować modem tak aby utrzymywał stałą prędkość przesyłania danych pomiędzy modemem a komputerem, niezależną od prędkości komunikacji między nimi. W zewnętrznym odemie USR Sportster 14,400, poniższe komendy zablokują prędkość przesyłania danych pomiędzy modemem a komputerem do wielkości podanej w komendzie:

	ATZ
	AT&B1&W

15.4.6.2. Konfiguracja z ustawianą prędkością

Dla konfiguracji różnoprędkościowych , będziesz musiał skonfigurować tak swój modem aby podnosił on prędkość na porcie szeregowym do wielkości z jaką otrzymuje on dane. W modemie zewnętrznym USR Sportster 14,400 poniższe komendy blokują błędy modemu, poprawna prędkość przesyłania danych zawarta jest w poleceniu, ale dopuszczalna prędkość portu szeregowego będzie dostosowywana do połączenia pozbawionego błędów.

	ATZ
	AT&B2&W

15.4.6.3. Sprawdzania konfiguracji modemu

Większość modemów oferujących nam wyrzsze prędkości posiada komendy pozwalające nam na sprawdzenie nam obecnych parametrów działania modemu, w postaci czytelnej dla człowieka. W zewnętrznym modemiem USR Sportster 14,400, komenda ATI5, wyświetli ustawienia które są przetrzymywane w niekasowanej pamięci RAM. Aby zobaczyć prawdziwe operacyjne parametry modemu wpisz komendę ATZ a następnie ATI4.

Jeżeli posiadasz modem innej firmy sprawdź instrukcję modemu, jak podwójnie sprawdzić paarmetry konfiguracujne modemu.

15.4.7. Rozwiązywanie problemów

Poniżej znajdziesz kilka porad jak sprawdzić twój modem.

15.4.7.1. Sprawdź swój system

Podłącz swój modem do komputera z FreeBSD, uruchom go, i jeżeli na modemie zaświecą się diody (DST i PWR) zobacz czy dioda DTR świeci gdy na konsoli pojawia sie login: . Jeżeli się zaświeciła znaczy to że system uruchmił proces getty i przygotował port komunikacyjny i czeka na połączenie z modemem.

Jeżeli dioda DTR nie zapaliła się, zaloguj się na konsoli i wpisz komendę ps ax aby zobaczyć czy system próbuje uruchomić proces getty na właściwym porcie. Powinienneś zobaczyć linie takie jak poniżej spośród wyświetlanych :

114 ??  I      0:00.10 /usr/libexec/getty V19200 ttyd0
115 ??  I      0:00.10 /usr/libexec/getty V19200 ttyd1

Jeżeli zobaczysz coś innego jak naprzykład

114 d0  I      0:00.10 /usr/libexec/getty V19200 ttyd0

i modem nie będzie akceptował połącznia, znaczyć to będzie że proces getty jest uruchomiony poprawnie i czeka na otwarcie portu komunikacyjnego. Będzie to wtedy prawdopodobnie problem z kablem lub konfiguracją modemu, ponieważ getty nie jest w stanie otworzyć portu komunikacyjnego dopóki CD (Carrier Detect) has been asserted by the modem.

Jeżeli nie widzisz żadnego procesu getty czekającego na otwarcie przeznaczonego portu ttydX, sprawdź ponownie wpisy w /etc/ttys czy nie popełniłeś tam jakiegoś błędu. Sprawdź także plik z logami (/var/log/messages) czy mie ma tam jakiś wpisów z init lub getty określających problem. Jeżeli nie ma tam żadnych logów, sprawdź jeszcze raz /etc/ttys i /etc/gettytab czy dobrze wpisane są wymagane pliki urządzeń specjalnych ttydX, czy nie popełniłeś jakiejś innej literówki.

15.4.7.2. Spróbuj wdzwonić się

Spróbuj wdzwonić się do systemu, upewnij się że masz ustawione: 8 bits, brak parzystości, 1 bit stopu, na zdalnym systemie. Jeżeli nie otrzymasz znaku zachęty, lub też otrzymasz ``śmieci'', spróbuj naciskać raz na sekundę. Jeżeli nadal nie zobaczysz lini login: po chwili, spróbuj wysłać sygnał BREAK. Jeżeli używasz szybkiego modemu do dzwonienia, spróbuj ponownie się połączyć blokując wcześniej prędkość interfejsu modemu ( przez AT&B1 dla modemu USR Sportster dla przykłądu).

Jeżeli nadal nie zobaczysz lini login:, sprawdź ponownie zawartość pliku /etc/gettytab zwracając uwagę na

Nazwa inicjacyjna wyszczególniona w /etc/ttys zgadza się z tą samą linią w /etc/gettytab

Każdy wpis nx= pasuje do innej nazwy z gettytab

Każdy wpis tc= pasuje do inneh nazwy z gettytab

Jeżeleli dzwonisz a modem na systemie FreeBSD nie odpowiada, upewnij się że modem jest skonfigurowany tak aby odpowiadać na telefon gdy sygnał DTR jest zapewniony. Jeżeli mogem wygląda na skonfigurowany poprawnie, sprawdź czy modem dostaje sygnał DTR sprawdzając czy na modemie pali się odpowiednia dioda(jeżeli modem posiada jakąś).

Jeżeli sprawdziłeś już wszystko kilka razy i nadal nie możesz się wdzwonić, zrób sobie przerwę i spróbuj później. Jeżeli i to nie pomoże, może powinienneś wysłać mail'a na główną grupę newsową FreeBSD opisując swój modem i problem i dobrzy ludzie na grupie postarają Ci się jakoś pomóc.

15.4.8. Podziękowania

Dziękuje tym ludziom za komentaż i porady:

Sean Kelly kelly@ad1440.net
za dużą ilość dobrych sugestii

15.5. Dial-out Service

Informacje scalone FAQ.

Poniżej znajdują sie podpowiedzi dzięki którym twój komputer będzie mógl połączyć się używając modemu z innym komputerem. Są one odpowiednie aby ustanowić sesję terminala z zdalnym hostem.

Jest to użyteczne do logowania się do BBS.

Ten rodzaj połączeń może być niezmiernie pomocny podczas pobierania plików z Internetu, jeżeli masz problemy z PPP. Jeżeli potrzebujesz czegoś z FTP a nie masz połączenia FTP, użyj sesji terminala. Później użyj zmodem aby przesłać je na swój komputer.

15.5.1. Dlaczego nie mogę uruchomić tip lub cu?

Na twoim systemie, prawdopodobnie programy tip i cu mają prawa wykonywania tylko dla użytkownika uucp i grupy dialer. Możesz używaj tej grupy do kontrolowania kto może kożystać z twojego modemu lub zdalnych systemów. Poprostu dodaj swojego użytkownika do drupy dialer.

Możesz także udostępnić wszystkim użytkownikom możliwość uruchamiania programów tip i cu wpisując:

    # chmod 4511 /usr/bin/tip

Nie musisz wydawać tego polecenia dla cu, ponieważ cu jest tylko linkiem do programu tip.

15.5.2. Mój zapasowy modem Hayes nie ma wsparcia, co mogę zrobić?

Obecnie, strona manuala dla programu tip jest nieaktuala. Ogólny dialer jest już wbudowany. Wystarczy użyć polecenia at=hayes w twoim pliku /etc/remote.

Sterownik dla Hayes nie jest na tyle rozbudowany aby rozpoznać niektóre bardziej zaawansowane komunikaty z modemu jak naprzykład BUSY, NO DIALTONE lub CONNECT 115200 i poprostu je odrzuci. Powinienneś wyłączyć te komunikaty gdy używasz programu tip (używając ATX0&W).

A więc, przekroczenie czasu nawiązywania połączenia dla tip wynosi 60 sekund. Twój modem powinien używać czegoś mniejszego, w przeciwnym razie tip będzie informował nas o problemach w komunikacji. Spróbuj ATS7=45&W.

Aktualnie, jako dostraczony tip nie posiada pełnego wsparcia. Rozwiązaniem jest wyedytowanie pliku tipconf.h w katalogu /usr/src/usr.bin/tip/tip. Oczywiście potrzebujesz źródeł dystrybucji.

Zmień linie #define HAYES 0 na #define HAYES 1. Następnie wykonaj polecenia make i make install. Wszystko będzie działąć lepiej po wykonaniu tych czynności.

15.5.3. Jak mam oczekiwać na wpisanie tych komend AT?
Zrób to co jest nazwane ``direct'' w twoim pliku /etc/remote. Dla przykładu jeżeli twój modem podpięty jest do pierwszego portu komunikacyjnego, /dev/cuaa0, umieść w lini:

    cuaa0:dv=/dev/cuaa0:br#19200:pa=none

użyj maksymalnej wielkości bps którą obsługuje twój modem w zmiennej br. Następnie, wpisz tip cuaa0, dzięki czemu połączysz się z modemem.

Jeżeli w twoim systemie nie ma urządzenia /dev/cuaa0, wykonaj następujące czynności:

    # cd /dev
    # MAKEDEV cuaa0

Lub użyj z poziomu root'a cu z następującymi opcjami:

    # cu -lline -sspeed

line jest portem szeregowym (np. /dev/cuaa0) a speed jest prędkością (np. 57600). Gdy skończysz wpisywać komendy AT wpisz ~. aby wyjść z cu.

15.5.4. Znak @ dla zmiennej pn nie działa!

Znak @ przy określaniu zmiennej numeru telefonu (tł. z ang. phone number czyli pn) mówi programowi tip żeby sprawdzał plik /etc/phones w poszukiwaniu tego numeru. Niestety @ jest także specjalnym znakiem w zmiennych plików takich jak /etc/remote. Aby go użyć musisz poprzedzić go backslash'em:

    pn=\@

15.5.5. Jak mogę wybierać numer telefonu z lini komend?

Wpisz to co nazwane jest ``generic'' w pliku /etc/remote. Dla przykładu:

    tip115200|Dial any phone number at 115200 bps:\
            :dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du:
    tip57600|Dial any phone number at 57600 bps:\
            :dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du:

Następnie możesz wpisać:

    # tip -115200 5551234

Jeżeli wolisz cu od tip, użyj standardowego wpisu cu:

    cu115200|Use cu to dial any number at 115200bps:\
            :dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du:

a następnie:

    # cu 5551234 -s 115200

15.5.6. Czy muszę za każdym razem wpisywać prędkość bps?

Umieść ją w wpisie dla tip1200 lub cu1200, ale idź do przodu i użyj dla każdej prędkości bps odpowiednią wartość br. Dla tip domyślną prędkością jest 1200 bps, której wpis z ustawieniami jest szukany. Niemusisz przecież używać 1200bps.

15.5.7. Mogę przekazać numer hosta bezpośrednio do terminala serwera?

Chętniej niż czekać dopóki nie połączysz się i wpiszesz CONNECT za każdym razem, użyj wartości cm dla tip'a. Dla przykładu te wpisy w /etc/remote:

pain|pain.deep13.com|Forrester's machine:\
    :cm=CONNECT pain\n:tc=deep13:
muffin|muffin.deep13.com|Frank's machine:\
    :cm=CONNECT muffin\n:tc=deep13:
deep13:Gizmonics Institute terminal server:\
    :dv=/dev/cuaa2:br#38400:at=hayes:du:pa=none:pn=5551234:

pozwolą Ci wpisać tip pain lub tip muffin i połączyć się z tymi hostami; oraz tip deep13 aby dostać się do terminalu serwera.

15.5.8. Czy tip może próbowac więcej niż jedną linię dla każdej strony?

Jest to częsty problem gdy uniwersytet ma kilkanaście lini modemowych i kilkunastuset studentów próbujących się na nie łączyć...

Stwórz wpis dla twojego uniwersytetu w /etc/remote i użyj @ jako wartości zmiennej pn:

    big-university:\
            :pn=\@:tc=dialout
    dialout:\
            :dv=/dev/cuaa3:br#9600:at=courier:du:pa=none:

Póżniej, umieść listę numerów telefonów dla uniwersytetu w pliku /etc/phones:

    big-university 5551111
    big-university 5551112
    big-university 5551113
    big-university 5551114

tip będzie próbował każdego telefonu z listy, po czym zakończy pracę. Jeżeli chcesz aby ciągle próbował się połączyć, uruchom tip w pętli while.

15.5.9. Dlaczego musze dwukrotnie wciskać CTRL+P aby wysłać pojedyńcze CTRL+P?

CTRL+P jest standardowo ``wymuszającym'' znakiem, używanym do informowania tip że następny znak jest daną. Możesz ustawić wymuszający znak dla każdego innego znaku używając ~s escape, które znaczy ``ustaw zmienną''.

Typ ~sforce=single-char (tł. pojedyńczy znak) następuje w nowej lini. single-char jest pojedyńczym znakiem. Jeżeli wykluczasz pojedyńcze znaki, wtedy znak wymuszający jest znakiem pustym, które możesz otrzymać używając CTRL+2 lub CTRL+SPACJA. Dobrą wartością dla pojedyńczego znaku jest SHIFT+CTRL+6, które jest używany w niektórych serwerach terminali.

Możesz ustawić wymuszający znak na cokolwiek zechcesz, definiując go w pliku $HOME/.tiprc:

    force=

15.5.10. Nagle wszystko co wpisuję jest pisane DUŻYMI LITERAMI??

Musisz użyć CTRL+A, ``podniesione znaki'' zostały zaprojektowane dla osób z zepsutym klawiszem caps-lock. Użyj ~s jak powyżej i ustaw zmienną raisechar na odpowiadającą tobie. Oczywiście możesz ustawić ją tak samo jak znak wymuszający, jeżeli uważasz że nie będziesz którejkolwiek używał.You must have pressed CTRL+A, tip's ``raise character,'' specially designed for people with broken caps-lock keys. Use ~s as above and set the variable raisechar to something reasonable. In fact, you can set it to the same as the force character, if you never expect to use either of these features.

Oto prosty plik .tiprc doskonały dla użytkowników Emacs którzy często kożystając z kombinacji CTRL+2 i CTRL+A:

    force=^^
    raisechar=^^

^^ odpowiada kombinacji SHIFT+CTRL+6.

15.5.11. Jak mogę używać tip do trancferu plików?

Jeżeli rozmawiasz z innym systemem UNIX, możesz wysłać i otrzymać pliki używając ~p (upuść, wyślij) i ~t (przyjmij). Komendy te uruchamiają cat i echo na zdalnym systemie aby otrzymywać i wysyłać pliki. Składnia to:

~p lokalny-plik [zdalny-plik]

~t zdalny-plik [lokalny-plik]

Niestety nie ma tutaj sprawdzania błędów, więc prawdopodobnie powinienneś użyć innego protokołu, jak naprzykłąd zmodem.

15.5.12. Jak mogę uruchomić zmodem z tip'em?

Aby otrzymywać pliku, uruchom program wysyłający na zdalnym końcu. Następnie wpisz ~C rz aby rozpocząc odbieranie ich lokalnie.

Aby wysłać pliki, uruchom program odbierający na zdalnym końcu. Następnie wpisz ~C sz pliki aby wysłać je do zdalnego systemu.



Tłumaczenie: paolo.

Id: Aleksander Fafuła  2004-02-16 

mlodszy, pt., 18/07/2008 - 22:18