Programowanko💾-Połączenie terminalowe z innym komputerem
Do łączenia się użytkownika ze zdalnym komputerem służą komendy telnet i rlogin. Można również wykorzystać program kermit. Mimo iż najczęściej jest on wykorzystywany do połączeń terminalowych z wykorzystaniem modemu w najnowszych wersjach można z powodzeniem wykorzystywać go do uzyskiwania połączeń z wykorzystaniem sieci.
Funkcja zdalnego terminala umożliwia lokalnemu użytkownikowi (po połączeniu się ze zdalnym komputerem) na wydawanie komend interpretowanych przez zdalny system operacyjny i uruchamianie aplikacji. Bardzo ważną sprawą jest właściwe poinformowanie komputera, z którym się łączymy, jakie funkcje pozwala realizować używany terminal. Pozwoli to zdalnym aplikacjom w odpowiedni sposób pozycjonować kursor i właściwie interpretować naciskane przez nas klawisze.
Cechą specyficzną programów telnet i rlogin w systemie UNIX jest to, że nie emulują one (na ogół) żadnego typu terminala. Służą one jedynie do możliwie ,,przeźroczystego'' transportu znaków między komputerem zdalnym i lokalnym. Oznacza to tyle, że jeżeli pracujemy na komputerze lokalnym z terminala określonego typu, łącząc się z innym komputerem ciągle będziemy pracować z terminala tego samego typu. Cały problem polega jedynie na poinformowaniu zdalnego komputera o typie terminala z którego pracujemy. Protokól połączenia przekazuje podstawowe informacje o typie terminala. Problem może polegać na tym, że taki typ nie jest rozpoznawany przez zdalny komputer albo na tym, że jest źle ustawiony na komputerze lokalnym.
Co robić w takim przypadku?
Niestety nie ma no to pytanie łatwej i jednoznacznej odpowiedzi. Musimy posiadać pewną minimalną wiedzę na temat:
- jak inaczej możemy nazwać typ terminala z którego pracujemy (na przykład łącząc sie z komputera mikro-vax jest bardzo prawdopodobne, że uzgodni on z komputerem zdalnym terminal typu dec-vt100
, co nie zostanie najprawdopodobniej zrozumiane; możemy terminal przedefiniować na vt100; podobnie, pracując z komputera HP z terminala hpterm - niezbyt często rozumianego przez inne komputery - zastępujemy go terminalem typu hp).
- jakie typy terminala rozpoznaje komputer, z którym się łączymy (można wylistować kartotekę
/usr/lib/terminfo
wraz z podkartotekami - na przykład komendąls -R /usr/lib/terminfo | more
).
Warto również w zbiorze .profile
(jeżeli korzystamy z ksh lub sh i pochodnych) zdalnego komputera umieścić linię o takiej lub podobnej treści
eval `tset -m :\?${TERM:-vt100} -r -s -Q`
Dla csh może wyglądać tak ?
set noglob eval `tset -s -Q -m '?vt100'`
Komenda ta odczytuje ze zmiennej środowiska typ terminala uzgodniony podczas nawiązywania połączenia; jeżeli zmienna środowiska jest pusta podstawia za nią terminal typu ,,vt100'' (można tu wstawić typ bardziej nam odpowiadający), a następnie odpytuje użytkownika czy wartość jest właściwa:
TERM = (vt100)
na koniec, wreszcie, ustawia odpowiedni typ terminala w środowisku i inicjalizuje go.
Po połączeniu - możemy sprawdzić wartość zmiennej środowiska TERM za pomocą komendy env lub wydając polecenie:
echo $TERM
a następnie próbować zmienić jej wartość (gdy jest niewłaściwa) za pomocą komend:TERM=value; export TERM
- gdy używamy sh lub kshsetenv TERM value
- gdy pracujemy z csh.
Kolejny problem, który może sprawiać problemy ustalenie zestawu znaków używanych do:
- kasowania poprzedniego znaku,
- przerwania wykonywania procesu,
- zawieszenia procesu.
Do sprawdzenia i zmiany wartości tych parametrów w systemie UNIX służy komenda stty. Odpowiednie ustawienia możemy sprawdzić wydając komendę: stty -a, a żądane wartości ustawiać w pliku .profile lub .login albo wydawać z linii komendy.
Najczęściej spotykane ustawienia parametrów: kasowanie poprzedniego znaku (erase): Ctrl-H lub Del; przerwanie procesu (): Del albo Ctrl-C; zawieszenie wykonania zadania (susp): Ctrl-Z.
Można zdefiniować jeszcze (jeżeli nie zostało to zrobione) znak służący do kasowania słowa (werase): Ctrl-W i całej linii (kill): Ctrl-U.
Odpowiedni zestaw znaków należy wybrać w zależności od przyzwyczajeń użytkownika i możliwości terminala, z którego nawiązuje połączenie.
Oto przykładowe ustawienie parametrów (wygodne podczas pracy z terminala hpterm):
export TERM=hp
stty erase \^H intr \^C
W dawnych czasach (gdy pracowano na terminalach typu teletype - dalekopis) znakami używanymi do kasowania znaku poprzedniego był: #, a znakiem używanym do kasowania całej linii: @. Niestety, te czasy nie odeszły w przeszłość tak zupełnie: znaki te są używane przez system HP-UX jako znaki standardowe i zmieniane komendą stty. W szczególności obowiązują one w trakcie procedury podawania nazwy użytkownika i hasła (z wszelkimi tego konsekwencjami).