TOP UNIX-V DDNOS NOS-2 UNIX-V.1 DOMAIN NTOS UNIX-V.2 DOS OS/DDP UNIX-V.3 EDX OS/2 UNIX-PC ELF OS4 UNKNOWN EMBOS OS86 UT2D EMMOS OSX V EPOS PCDOS VM FOONEX PERQ/OS VM/370 FUZZ PLI VM/CMS GCOS PSDOS/MIT VM/SP GPOS PRIMOS VMS HDOS RMX/RDOS VMS/EUNICE IMAGEN ROS VRTX INTERCOM RSX11M WAITS IMPRESS RTE-A WANG INTERLISP SATOPS WIN32 IOS SCO-XENIX/386 X11R3 IRIX SCS XDE ISI-68020 SIMP XENIX ITS SUN Appendix C Installing DNS on a Sun when running NIS ==================== 2) How to get DNS to be used when running NIS ? First setup the appropriate /etc/resolv.conf file. Something like this should do the "trick". ; ; Data file for a client. ; domain local domain nameserver address of primary domain nameserver nameserver address of secondary domain nameserver where: "local domain" is the domain part of the hostnames. For example, if your hostname is "thor.ece.uc.edu" your "local domain" is "ece.uc.edu". You will need to put a copy of this resolv.conf on all NIS(YP) servers including slaves. Under SunOS 4.1 and greater, change the "B=" at the top of the /var/yp/Makefile to "B=-b" and setup NIS in the usual fashion. You will need reboot or restart ypserv for these changes to take affect. Under 4.0.x, edit the Makefile or apply the following "diff": *** Makefile.orig Wed Jan 10 13:22:11 1990 --- Makefile Wed Jan 10 13:22:01 1990 *************** *** 63 **** ! | $(MAKEDBM) - $(YPDBDIR)/$(DOM)/hosts.byname; \ --- 63 ---- ! | $(MAKEDBM) -b - $(YPDBDIR)/$(DOM)/hosts.byname; \ *************** *** 66 **** ! | $(MAKEDBM) - $(YPDBDIR)/$(DOM)/hosts.byaddr; \ --- 66 ---- ! | $(MAKEDBM) -b - $(YPDBDIR)/$(DOM)/hosts.byaddr; \ ==================== -- Craig Richmond. Computer Officer - Dept of Economics (morning) 380 3860 University of Western Australia Dept of Education (afternoon) 2368 craig@ecel.uwa.edu.au Dvorak Keyboards RULE! "Messes are only acceptable if users make them. Applications aren't allowed this freedom" I.M.VI 2-4 . &dDUUCP - Unix to Unix Copy&d@ Система пересылки файлов по телефону. Если uucp правильно сконфигурировано, то его использование выглядит примерно так: uucp -r moj_fajl 'pulsar!fajl_tam' перешлет moj_fajl на удаленную машину pulsar. Хотя, скорее всего не сделает, из-за ограничений на права доступа. А, впрочем, такая команда скорее всего сработает: uucp -r moj_fajl 'pulsar!~' через некоторое время этот файл вы сможете обнаружить на машине pulsar в каталоге /usr/spool/uucppublic/ в этот каталог разрешено копирование с удаленных машин, для не- го используется специальное обозначение: "~" Пусть вас не удивляет, что в команде uucp использовались оди- нарные кавычки. Они нужны, чтобы заэкранировать "!" и "~" от вашего командного интерпретатора ksh или bash. Ключ -r в коман- де uucp нужен, чтобы НЕ ЗАСТАВЛЯТЬ нашу машину немедленно начи- нать звонить на pulsar. Она сама позвонит, в предусмотренное для этого время. uucp поддерживается на двух уровнях: 1. Пользовательский. Это команды uucp - постановка файла в очередь на удаленную пересылку, и uux - постановка в очередь на пересылку удаленной команды. 2. Системный. Периодически, автоматически запускается демон uucico - (UUCP Copy in Copy out). Он созванивается с удаленными машинами по телефону. На удаленной машине также запускается "встречный" демон uucico. Наш демон "проталкивает" на удаленную машину все файлы, которые к этому времени накопились в очереди на отправку туда. После этого он "принимает" файлы, которые приготовила для нас удаленная машина (их к нам проталкивает "встречный" демон uucico, а наш принимает). После этого сеанс uucico заканчивается. А пользователи обнаруживают, что у них возникли новые файлы. Предполагается, что системные администраторы на нашей и на удаленной машине не забыли правильно описать и проконфигуриро- вать систему UUCP. &dDКонфигурация нашей машины как UUCP клиента.&d@ После этого наша машина сможет звонить на удаленные машины и посылать/забирать оттуда файлы. Для этого мы должны задать: 1. Наше собственное UUCP имя. 2. Имя(имена) удаленной(ых) UUCP системы. 3. Телефонный номер(а), по которому нужно туда звонить. 4. Login и пароль, которые выделены там для нашего uucp-account'а. 5. Порт, к которому подключен наш модем. 6. Наборщик - описание "AT" команд для управления нашим модемом. Эти данные задаются в нескольких конфигурационных файлах, кото- рые должны лежать в каталоге /etc/uucp/ (или /usr/lib/uucp/ , или /usr/lib/uucp/taylor_config ) (или в каком нибудь другом, см. man uucp для более точной информации). Это файлы: Config # задает имя нашей машины (и многое другое) ; Systems # описывает удаленные uucp-системы: имя, но- # мер телефона, uucp-logname, uucp-passwd ; Devices # порты, к которым подключены модемы. Dialers # описывает модемы-наборщики (систему AT-ко- # манд). (А в Linux они называются: config, sys, port, dial) Итак, представим классический случай. У вас один Hayes-совмес- тимый модем V32/V42bis на 14400 baud (GVC, ZyXEL, US- Robotics...), подключенный к последовательному порту /dev/modem (если у вас порт называется /dev/contty03, вам никто не мешает сделать символический линк ln -s /dev/contty03 /dev/modem не так ли ?). Имя вашего узла fedfuru. ВНИМАНИЕ. На большинстве Unix-ов выделены раздельные специаль- ные файлы для одного и того-же порта: терминальная линия (для подключения терминала или модема, НА который будут звонить - используется для getty или ttymon), и линия с модемным управле- нием, на выход - например, чтоб звонить НАРУЖУ модемом. Эти специальные файлы и называются по разному, например: SunOS: /dev/ttyy01 IN, /dev/ttyz01 OUT Linux: /dev/ttyS1 IN, /dev/cua1 OUT ISC: /dev/ttyFD01 IN, /dev/ttyFM01 OUT SVR4/88: /dev/contty00 IN, /dev/??????? OUT ###следующий абзац написан "мелким шрифтом"(можно не читать)### На самом деле все не совсем так. Цитирую Linux-Serial-HOWTO: > There has been some discussion on the merits of /dev/mouse > and /dev/modem. I strongly discourage the use of these links. > In particular, if you are planning on using your modem for > dialin you will run into problems because the lock files will > not work correctly if you use /dev/modem. Also, Taylor UUCP does not support symlinks either. Однако uugetty позволяет корректно отрабатывать эту ситуацию. См. параметр ALTLOCK в /etc/defaults/getty файле. ################_конец_"мелкого шрифта"_####################### Вам надо подключиться к двум uucp-узлам: 1: Узел Релком, имя узла kiae, телефоны: 9469984, 9469994. Вы зарегистрированы там под именем/паролем uufedurp/ABCd8 2: Ваше московское отделение, имя узла fedfond, телефон 095- 125-7623. Вы зарегистрированы там под именем/паролем uufedurp/KLmn10 В каталоге /etc/uucp редактируем файлы Systems, Devices, Dialers Systems: ------- Удаленные машины ----------------------------- kiae Any modem1 19200 946-9984 "" \n\r\d\r\d\r ogin:-BREAK-ogin: uufedurp ssword: ABCd8 fedfond Any modem1 19200 8w095-125-7623 "" \n\r ogin:-BREAK-ogin: uufedurp ssword: KLmn10 Devices: --------------- Описание портов ---------------------- modem1 contty03 - 19200 gvc1440 Dialers: --------------- Команды модемов ---------------------- gvc1440 =,-, "" \M\dATZ\r\c OK\r \EATDP\T\r\c CONNECT \m\c ---------------- Это все -------------------------------------- ###следующий абзац написан "мелким шрифтом"(можно не читать)### А дальше идет описание Taylor-uucp. Проблема в том, что в стан- дартной поставке SVR4/88 _нет_ Taylor-uucp, а есть только т.н. HoneyDanBer-uucp, он же BNU (Basic Networking Utilities). Taylor новее и гибче, к тому же поддерживает два формата конфи- гурационных файлов - традиционный (Config, Systems, Devices, Dialers, ...) и свой (config, sys, port, dial, ...). Есть кон- вертер туда-обратно. В Linuxе Taylor-uucp скомпилирован так, чтобы сначала искать Taylor-конфигурацию в /usr/lib/uucp/taylor_config/, если там ничего нет - искать HDB-конфигурацию в /usr/lib/uucp/hdb_config/. IMHO главный изъян HDB - невозможность указывать альтернативные номера теле- фонов. ################_конец_"мелкого шрифта"_####################### ###следующий абзац написан "мелким шрифтом"### Если вы используете не устаревший BNU-uucp, а Taylor-uucp 1.05: В каталоге /usr/lib/uucp/taylor_config создаем файлы config, sys, port, dial следующего содержания: /* Примечание: в дистрибутивах RedHat Linux конфигурационные файлы uucp должны лежать в /etc/uucp/ */ config: ------------------------------------------------------- uuname fedfuru # Наше собственное имя sys: ------- Удаленные машины --------------------------------- system kiae # Узел Релком ############################ myname fedfuru time Any port modem # Имя описания порта в файле port speed 38400 chat ogin:-BREAK-ogin: uufedurp ssword: ABCd8 phone 946-9984 alternate # Второй телефонный номер. phone 946-9994 system fedfond # Московское отделение ################## time Any myname fedfuru port modem # Имя описания порта в файле port speed 38400 chat ogin:-BREAK-ogin: uufedurp ssword: KLmn10 phone 8w095-125-7623 port: --------------- Описание портов ------------------------ port modem # Обозначение порта из файла sys type modem device /dev/modem speed 38400 dialer gvc1440 # Имя наборщика-модема в файле dial dial: --------------- Команды модемов ------------------------ dialer gvc1440 # Обозначение наборщика из файла port # Строка инициализации модема. # Вместо \T будет подставлен телефонный номер chat "" ATZ OK ATH0E0Q0 OK ATDP\T CONNECT # ATZ - загрузить profile 0 # ATH0 - повесить трубку # ATE0 - no echo # ATQ0 - выводить код возврата chat-fail BUSY # Воспринимать как ошибку набора chat-fail ERROR chat-fail NO\sCARRIER chat-fail NO\sDIALTONE --------------------------------------------------------------- ################_конец_"мелкого шрифта"_####################### Все. Клиентская часть UUCP сконфигурирована. Теперь, чтобы "протолкнуть" посланные файлы, достаточно периодически выполнять команды: uucico -s kiae uucico -s fedfond А еще лучше, добавить эти команды в crontab, чтобы они выполнялись автоматически, по несколько раз в сутки. &dDКонфигурирование UUCP с использованием sysadm&d@. Все вышеперечисленные настройки можно сделать, используя утили- ту системного администратора sysadm. Надо войти в меню network_services / basic_network &dDКонфигурирование серверной части UUCP.&d@ Итак, мы уже можем звонить на чужие машины, и пересылать на них файлы. Теперь нужно сделать, чтобы чужие машины (клиенты) могли звонить нам. Для этого нужно: 1: Иметь описание звонящей нам uucp-системы в файле Systems - для клиента такое же, как и для сервера. 2: Проверить права доступа для клиента в файле Permitions 2: Завести для него специальный uucp-login 3: Убедиться, что модем стоит в "Auto-answer" режиме, и на порт /dev/modem запущена программа getty (или ttymon), позволяю- щая логиниться по телефону на порт /dev/modem 1. Описание добавляется в файл Systems, (номер телефона и название порта не обязательны), если мы сами не собираемся туда звонить, но я бы посоветовал их вписать, для единообразия. 2. В файле /etc/passwd завести строчку вида: uupetrov:x:1002:14:UU Petrov:/var/spool/uucp:/usr/lib/uucp/uucico выполнить команды: pwconv passwd uupetrov 3. Любой терминальной программой "войти" в модемный порт и вы- полнить команды atz0 # Загрузить пользовательский profile 0 ats0=1 # Регистр0=1 - снимать трубку после 1-го звонка at&w0 # Сохранить текущий setup в profile 0 at&y0 # Чтобы при включении питания загружался профайл 0 # at&f # загрузить заводские установки, если вы запутались # с профайлами, можно сделать модему "reset" Ввиду отсутствия коммуникационных программ в SVR4 (за исключением сумасшедшего "cu"), используйте "echo". echo atz0 > /dev/modem echo ats0=0 > /dev/modem echo at&w0 > /dev/modem # и так далее А еще лучше gold, там есть режим прямой связи с любым портом. 4. В файле /etc/inittab иметь строчку вида: c3:234:respawn:/usr/lib/saf/ttymon -g -d /dev/modem -l contty &dDЧто где лежит в системе UUCP.&d@ /usr/bin/uucp - переслать файлы с/на удаленную uucp-систему /usr/bin/uux - выполнить команду на удаленной uucp-системе /usr/bin/uustat - статистика по выполненным пересылкам /usr/lib/uucp/uu* - системные утилиты UUCP /etc/uucp/ - каталог конфигурационных файлов UUCP /usr/lib/uucp/taylor_config - конфигурация UUCP в Linux /usr/lib/uucp/ - конфигурация UUCP в других системах /var/spool/uucppublic - каталог в который можно пересылать файлы с удаленных машин /usr/spool/mqueue - очереди отправляемой электронной почты /usr/ucblib/mqueue - или здесь эта очередь ? /var/spool/uucp/"машина" - очередь файлов на отправку на "машину" /var/spool/uucp/.Log - статистика о работе uucp &dDОсталось настроить нашу электронную почту.&d@ Если у вас самый простейший случай: вся ваша почта проходит че- рез один "знающий" host, с которым вы соединены по uucp, то на- до в файле /etc/sendmail.cf иметь такую строку: . . . # "Smart" relay host (may be null) DSuucp-dom:kiae . . . В этом случае вся ваша внешняя почта (т.е. отправляемая за пределы вашей локальной сети) будет переправляться по uucp на uucp-узел "kiae" и дальнейшей ее доставкой будет озабочен именно kiae. Предполагается, что он успешно справится с этой задачей. А еще чтобы было описание uucp-dom (ниже в том же файле). Кстати, чтобы всех окончательно запутать, sendmail.cf на Motoн role лежит вовсе не в /etc/, а в /usr/ucblib/. Если у вас какой-либо другой случай - то это - тяжелый случай. Дерзайте, успехов вам! # И надо сделать, чтоб сендмаил не отрезал 8-й бит у посылаемой почты # Если sendmail8.x.x, то в sendmail.cf: # strip message body to 7 bits on input? O7False # А еще бывает, что sendmail не знает, как правильно называется # наша машина. Тогда мы пишем что-то в таком стиле: Cwlocalhost feduru.urup.ru feduru.mss.ru &dDПроверка работоспособности и отладка конфигурации.&d@ Для начала проверим, правильно ли подсоединен модем. Запускаем программу cu - эмулятор терминала. cu -l /dev/modem # Или как там у вас этот порт называется После этого вы переключитесь на работу со своим модемным пор- том. Все, что вы будете набирать с клавиатуры, будет перенап- равляться в порт /dev/modem , все, что "приходит" с этого пор- та, будет рисоваться на вашем терминале. Попробуйте модемом набрать телефонный номер atdp100 Проверьте, правильно ли сконфигурирован "порт" модема и описа- ние системы в файле Systems. cu pulsar Проверьте права доступа к файлам /dev/modem, /dev/contty*. Дол- жно быть (???): crw-rw---- 1 root uucp ... /dev/contty0 crw-rw---- 1 root uucp ... /dev/modem Запустите uucico с максимальным уровнем выдачи отладочной ин- формации. Запускать надо из под пользователя uucp /usr/lib/uucp/uucico -r1 -x9 -f -s pulsar /usr/lib/uucp/uucico -x all -f -s kiae А затем посмотрите на содержание файлов со статистикой uucp в каталоге /var/spool/uucp : .Admin/audit.local .Log/ .Status/ ERRLOG LOGFILE SYSLOG Например, такой командой tail -f /var/uucp/.Admin/audit.local & tail -f /var/uucp/.Log/uucico/kiae &dDПо результатам переписки&d@. ###следующий абзац написан "мелким шрифтом"(можно не читать)#### Dmitry Mayorov Compulsory Health Insurance Fund Phone: +7 (812) 112-3517 St. Petersburg, Russia > Навешал фильтров на sendmail, rmail, > а вот это непонятно. Или они научились все из кои8 в исо пере- > ворачивать на лету ? Нет, конечно, потребовалось лечить. Дело сильно упростило то обстоятельство, что внутри сети везде ISO. Перекодировать по- этому мне надо только то, что идет через UUCP, то бишь наружу. Для этого пришлось: 1. Поправить sendmail.cf: # RelCom UUCP - with ISO 8859-5 to KOI-8 translation Muucp-koi, P=/usr/local/bin/_uux, F=mDFMhu, S=52/31, R=21, M=100000, ^^^^^^^^^^^^^^^^^^^ мой, см. ниже A=_uux - -r -a$f -gC $h!rmail ($u) 2. Сделать /usr/local/bin/_uux из трех строк: #!/bin/sh PATH=:/usr/bin:/usr/local/bin:/usr/ucb:/bin: /usr/local/bin/iso-koi | /usr/bin/uux $* (iso-koi - понятно какой фильтр) Это все, на самом деле, весьма грязный hack - вряд ли стоит его включать в учебник. Оно, конечно, работает, но вот надо по крайней мере еще и правильный код возврата как-то обеспечить - с проверкой ошибок и прочими фенечками. Чтобы принимаемая почта из KOI превращалась в ISO, достаточно: 1. Переименовать rmail в /usr/local/bin/__rmail; 2. Сделать свой rmail, тоже из трех строчек: #!/bin/sh PATH=:/usr/bin:/usr/local/bin:/usr/ucb:/bin: /usr/local/bin/koi-iso | /usr/local/bin/__rmail $* Вышеуказанную экзекуцию надо производить именно над rmail, по- тому что rbmail проверяет контрольные суммы. А вот rbmail в SVR4/88 совсем нет. Надо искать исходники, соби- рать... А RelCom (по крайней мере мой провайдер) именно его пользует. Это третья причина (после отсутствия Taylor-uucp и удобного Mail-user агентa), по которой я не стал поднимать uucp/e-mail на Motorolе. -- Dmitry Mayorov Compulsory Health Insurance Fund Phone: +7 (812) 112-3517 St. Petersburg, Russia -- Конец цитаты -- ################_конец_"мелкого шрифта"_####################### &dDSolaris: настройка uucp по direct line&d@ В файле Systems на Солярке удаленная машина описывается так: ranisi Any dirt06 9600 unused "" P_ZERO "" \n\c ogin:-\n\c-ogin: uuintra\n\c ssword: parolf9f10\n\c "" P_ZERO По сравнению с нормальным tailor-uucp престарелый соляркин по прямому кабелю выкинул несколько фортелей: Не захотел идти наружу с 38400, пришлось ставить 9600 Посылаемый ^M в конце каждой строки chat-а принимающий Linux понимать отказался, пришлось делать в конце \n\c Работать стал только с насильственно взведенным P_ZERO - "no parity" - без этого на приеме вместо латиницы получалась 8-битная русица. В uucp-овый crontab ставим раз в 5 минут вызов uucico 0,5,10,15,18,20,25,30,35,40,45,50,55 * * * * (\ /usr/lib/uucp/uucico -r1 -f -s ranisi ; sleep 30 ; \ /usr/lib/sendmail -q ) > /dev/null 2>&1 У солярного uucico не оказалось ключа "force" redial (-f - совсем не тот форце, которого хотелось мне) &dDЧтоб заставить uucico ходить на телнетовский порт&d@ > в логах наблюдается откровенный мусор: \177}\030\177} \177}#\177} port type pipe port command /bin/telnet -8E hostname &dDSecure uucp по tcp&d@ &dDВариант 1. port type tcp with ssh-port forwarding&d@ НА СЕРВЕРЕ: конфигурите uucp-tcp-сервер с localhost /etc/inetd.conf : uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/sbin/uucico -l /etc/hosts.allow : uucico: 127.0.0.1 # uucico желает его читать, а работает он с uid uucp - приходится дать read chmod og+r /etc/hosts.allow /etc/uucp/passwd : propisatx uu-логин, пароль _нешифрованный_ uuyourlogin yourpasswd НА КЛИЕНТЕ: коннект будете делать на localhost, а ssh делает его проброс /etc/inetd.conf : uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/sbin/uucico -l /etc/hosts.allow : uucico: 127.0.0.1 /etc/uucp/port : описать порт tcp-connect port tcp-connect type tcp service 540 /etc/uucp/sys : добавить тип порта . . . port tcp-connect address 127.0.0.1 chat ogin: \L ssword: \P alternate . . . "Перед употреблением" запускаем из под root ssh с активизированным forward ssh1 -C -L 540:127.0.0.1:540 193.232.173.6 . &dDСистема печати в Unix. LP spoolling&d@ (описана система печати в System V) Печатать, конечно, можно и так: cat file > /dev/lp. Но в многопользовательской системе такой фокус не всегда пройдет. Поэтому печатаемый файл ставят в очередь на печать. Имеем принтер. У принтера есть ИМЯ_ПРИНТЕРА - придумывается администратором. ПОРТ_ПРИНТЕРА - специальный файл в который надо выталкивать данные для печати. ИНТЕРФЕЙСНАЯ_ПРОГРАММА - программа, которая как раз и будет этим заниматься. Если у нас нормально сконфигурена система печати, то печататься можно так: lp -d ИМЯ_ПРИНТЕРА file или, если мы хотим напечатать на "default" принтере cat file | lp lpstat Посмотреть в каком состоянии очередь печати cancel [идентификатор_запроса ...] [принтер ...] Срубить запрос на печать lp просто складывает файл в SPOOL КАТАЛОГ. ДЕМОН ПЕЧАТИ lpsched обнаруживает вновь поступивший файл, ставит его в очередь на печать, и, когда очередь доходит, запускает наконец ИНТЕРФЕЙСНУЮ ПРОГРАММУ, вход которой берется из печатаемого файла, а ее вывод перенаправляется на ПОРТ_ПРИНТЕРА. &dDПодключить к системе новый принтер&d@ --------------------------------------------------------------- lpshut # на время реконфигурации надо "гасить" lpsched lpadmin -pLJ_printer -i/usr/lib/lp/model/lj_print -v/dev/lpt2 или lpadmin -pNash_Nowyj_Printer -mstandard -v/dev/contty enable Nash_Nowyj_Printer accept Nash_Nowyj_Printer lpsched # после реконфигурации надо вновь запустить lpsched --------------------------------------------------------------- accept - позволяет ставить в очередь печать на этом принтере enable - разрешает печатать стоящие в очереди задания ключи команды lpadmin -pИмя_Нового_Принтера -vПОРТ_ПРИНТЕРА -iИНТЕРФЕЙСНАЯ_ПРОГРАММА - маршрутное имя программы, которая печатает -mМОДЕЛЬ_ПРОГРАММЫ - имя "модели" такой программы, лежащей в каталоге /usr/lib/lp/model -o nobanner - разрешить userу писать lp -o nobanner (рекомендую ампутировать banner в интерфейсном скрипте) -d printer - сделать принтером по умолчанию -?Удаленный_хост - можно подключать принтер удаленной машины -?Имя_принтера_на_удаленном_хосте (ключи не помню, посмотреть в man) -s host!printer - для Solaris - подключение удаленного принтера # перед этим вписать принтер в /etc/lp/Systems Вместе с системой накопления вывода на принтеры поставляются образцы интерфейсных программ. Они представляют собой shell-процедуры, перекодирующими печатаемый файл в формат соответствующего принтера. &dDПримеры&d@ lpadmin -pstar1 -i/udd/print/inter -v/dev/xpit0 # локальный принтер lpadmin -pstar1 -mdumb -v/dev/lpt1 &dDПодключить к системе удаленный принтер&d@ (ключи варьируются для разных версий Unix) HP-UX: lpadmin -pLJ_printer -?host -?printer Solaris: вписать удаленную машину в /etc/lp/Systems а затем lpadmin -pLJ_printer -s 'host!printer' ; accept LJ_printer lpadmin -dstar1 # Установить принтером по умолчани` lpadmin -xstar1 # Ликвидировать принтер star1 &dDФайлы&d@ /usr/lib/lp/model # Образцы интерфейсных программ (модели) /etc/lp # Каталог конфигурации системы LP /var/spool/lp/* # Каталоги с очередями man lpadmin # Естественно! . &dDГрафическая оболочка X-Windows System&d@ Для начала немного истории и общих мест. Представим, что нам нужно написать программу, которая будет работать в графическом режиме. Нам потребуется: опрашивать клавиатуру, снимать события и координаты мыши, рисовать на экране, ... Как это делалось на MS-DOSе? Очень просто. Пишем одну большую программу, в ней - все: и логика, и обработка событий, и слежение за перемещениями мыши, ну, а когда требуется что-то нарисовать, мы даем команду на запись в порты EGA контроллера, рисуем пиксел... Через год появляется контроллер VGA, еще через год SVGA 800x600, 16 цветов, вслед за ним UVGA 1024x768, 256 цветов, затем XGA 1280x1024, 16Мб цветов... &dDОсновная идея X Windows&d@. Имеем две независимых программы. Одна умеет рисовать на графическом мониторе, и вообще, обслуживать все это железо. Она называется X-сервер. Вторая программа - называем ее клиент X Windows, рисовать физически не умеет. Зато она знает, что именно надо рисовать, и умеет командовать. Команды типа: "нарисовать прямоугольник", "провести линию", "открыть окно", "вывести символ в заданном фонте", "опросить координаты мыши", и т.п. передаются X-серверу, а тот их исполняет - рисует. Формат и спецификации этих команд опубликованы, стандартизованы, и широко известны. Все вместе они называются "Протокол X Windows". Итак, повторим. X-сервер. Программа, которая написана специально под конкретное физическое устройство (имеется в виду - монитор, графконтроллер, мышь и клавиатура), умеет на нем рисовать, и умеет понимать команды рисования по протоколу X Windows System. X-клиент. Прикладная программа, обеспечивающая графический интерфейс с пользователем. Команды для рисования на экране передает X серверу по протоколу X Windows System. X-терминал. Ящик (монитор, графконтроллер, мышь, клавиатура, ну и, естественно, процессор и оперативная память), на котором запущена программа X-сервер. X-терминалом может служить самая обыкновенная графическая Unix-рабочая станция, на которой X сервер выполняется, как одна из многих прикладных задач. Специализированный X-terminal - ящик, на котором запускается только X сервер, и ничего кроме. Можно использовать PC под MS-DOSом, на котором запущена DOSовская программа, реализующая X сервер. Xlib - библиотека C-ишных функций, реализующих протокол X Windows System. С помощью этой библиотеки можно писать графические программы - X-клиенты. Что мы с этого имеем. Мы получаем универсальный GAPI - (Graphical Application Programming Interface) - средство программирования графических приложений. Пользовательские графические программы при этом полностью отвязаны от железа, от конкретного графконтроллера. О железе пусть беспокоится X-сервер. Протокол X Windows умеет "ездить" по сети: например по TCP/IP, или по DEC-net. Поэтому Xсервер может крутиться на одной машине, а X-клиент - на другой. То есть, картинка рисуется на одной машине, а программа, которая ее обеспечивает - крутится на другой. X-сервер способен обслуживать сразу много клиентов, причем всех - одновременно. На нашем графическом экране может быть открыто сразу много окон - каждое окно порождается его собственным X клиентом. Клиенты эти могут быть запущены и на нашей машине (к которой подключена графическая подсистема), и на удаленных ма- шинах, соединеннных с нами по сети. Чего нам это стоит. Понятно чего. Ресурсов. X Windows очень любит ресурсы - память, процессор, диск. Способен съесть их в неограниченных количес- твах. А еще ведь надо программировать. (К счастью, не всем на- до). Кто видел, как выглядят программы для MS Windows или Mac, может представить себе внешний вид исходных текстов X-овой программы. &dDКак это запускается&d@. Пусть в нашей сети есть машина с графической подсистемой и X сервером, и сетевой адрес этой машины pcat107.foms.msk.ru на pcat107 нужно выполнить команду: xhost + # разрешить X-овым программам с ЛЮБОЙ машины # рисовать на экране машины pcat107 Запускаем на нашем компьютере X-овую программу, так, чтобы ее окошко рисовалось на мониторе pcat107. Для этого на нашем компьютере нужно выполнить команду: xterm -display pcat107:0.0 & &dDБиблиотеки, Motif, и война круглых и квадратных кнопок&d@. Можно писать X-овые программы, используя библиотеку Xlib. Многие так и пишут, хотя это весьма тяжело - уж больно невысок уровень Xlib'а. В помощь программистам было создано несколько toolkit'ов - библиотек более высокого уровня, в которых реали- зованы различные widget'ы. Widget - непереводимый термин X Windows. Склеен из двух слов - Window и Gadget (приспособление), является графическим объектом с привязанными к нему свойствами и реакциями на действия пользователя. Примеры widgetow: "кнопка", "менюшка", "окошко с текстом", "линейка прокрутки",... Известны следующие toolkit'ы: Xaw - Anthena Widgets. Очень черно-белый, очень плоский, весьма небогатый. Зато - бесплатный. Посмотрите, как выглядят программы xterm, xedit, xman. Они сделанны на Xaw. xview - Набор библиотек и объектов, использованных в реализа- ции набора пользовательских утилит Sun-овской версии X Windows - "Open Windows". Весьма симпатично. Круг- лые кнопки, "шприцы-иголки" (замечательная вещь!), очень хорошо продуманный интерфейс пользователя, в том числе активно используемая трех-кнопочная мышь. Исходные тексты библиотек xview открыты, предоставля- ются бесплатно. Однако набор DeskSet - 15 пользова- тельских утилит входящих в OpenWindows, сделанный на библиотеке xview, SunSoft готов предоставить только за плату. В бинарном виде - весьма дешево ($100). В исходных текстах - весьма дорого ($200K) Motif - Библиотека поставляются организацией OSF за не совсем маленькую плату. Исходные тексты библиотек недоступ- ны, либо чрезмерно дороги. Кнопки - квадратные, да и вообще Motif'овские приложения до безобразия напоми- нают MS Windows (что, IMHO, является серьезным прес- туплением) В борьбе BSD и Unix V победил, как известно, System V, а в вой- не круглых и квадратных кнопок выиграл Motif. &dDКонфигурирование X Windows&d@ В Linux используется X11 в реализации XFree86. Чтобы его сконфигурировать, выполните команду xf86config &dDЗапуск X Windows&d@. На некоторых машинах он сам запускается. А также иногда удается запустить его вручную командами: startx и/или openwin Solaris: 1. Установите переменные окружения: OPENWINHOME=/usr/openwin export OPENWINHOME LD_LIBRARY_PATH=/usr/openwin/lib export LD_LIBRARY_PATH PATH=/usr/openwin/bin:$PATH export PATH XAPPLERESDIR=/usr/openwin/lib/app-defaults export XAPPLERESDIR 2. Запустите X Windows командой openwin "Нормальные" Unix'ы: 1. Установите переменные окружения: PATH=/usr/bin/X11:$PATH XAPPLERESDIR=/usr/lib/X11/app-defaults 2. Запустите X Windows командой startx "Ненормальные" Unix'ы (Unixware). Когда регистрируете пользователя, ответьте Yes на вопрос "Хотите графический DeskTop". Тогда после login'а X Windows будет запускаться автоматически. Если вы прозевали, и ответили No, то никаким осмысленным способом запустить X Windows для себя вам не удастся. &dDНастройки пользовательского окружения X Windows&d@ При наличии пользовательских настроечных файлов, лежащих в домашнем каталоге пользователя, используются они. Если их нет, используются стандартные, общественные, обычно лежащие в каталоге /usr/lib/X11 или /usr/openwin/lib Персональные и общественные пользовательские настройки хранятся в файлах: $HOME/.Xdefaults $HOME/.OWdefaults /usr/lib/X11/Xdefaults /usr/openwin/lib/Xdefaults /usr/openwin/lib/app-defaults/* После любых исправлений файл с ресурсами необходимо перезачитать:" xrdb -merge .Xdefaults Окружение (desktop) - т.е. программы, которые стартуют автоматически при запуске X Windows находится в файлах: Solaris: $HOME/.openwin-init /usr/openwin/lib/openwin-init "Нормальнные" X windows: $HOME/.xinitrc /usr/lib/X11/xinit/xinitrc Настройки window-manager'a - т.е. - поведение окон, менюшки пользователя, раскладка команд на клавиши мышки, ... Solaris: $HOME/.openwin-menu $HOME/.openwin-menu-* /usr/openwin/lib/openwin-menu /usr/openwin/lib/openwin-menu-* Linux $HOME/.fvwmrc /usr/lib/X11/fvwm/system.fvwmrc . &dDРедактор VI. Список команд&d@ &dDРЕЖИМЫ&d@: Ввода == ESC ====> Командный == :Q ==> Редактора ed ^ | ^ | +----aAiIcCrRs <---+ +----- vi -------+ &dD &d@ &dDПЕРЕМЕЩЕНИЕ ПО ФАЙЛУ&d@ {стрелки},hjkl ^U/^D табуляция вверх/вниз ^F/^B страницу вниз/вверх ^E/^Y подвинуться на строку вниз/вверх w/b/e вперед/назад на слово/в конец слова W/B/E вперед/назад на слово/в конец опробеленного слова (/) назад/вперед на предложение {/} назад/вперед на абзац [[/]] назад/вперед на функцию или секцию % найти парную скобку ( или { {n}G на строку {n} {n}| в колонку {n} H/M/L в начало/середину/конец экрана z/z./z- текущую строку в начало/середину/конец экрана ^/$/0 начало/конец строки &dD &d@ &dDРЕДАКТИРОВАНИЕ ТЕКСТА&d@ x уничтожить символ X забой J склеить строки &dD &d@ &dDВ РЕЖИМЫ ВВОДА&d@ a/i / A/I вставка за/перед _ / концом/началом строки R режим замены r буква на букву s буква на буквы o/O вставить строку под/над _ C$ Заменить конец строки &dD &d@ &dDИНФОРМАЦИЯ&d@ ^G о текущем файле и строке &dD &d@ &dDОТКАТКА&d@ u откатка (одна) ^L/^R перерисовать &dD &d@ &dDРЕДАКТИРОВАНИЕ В РЕЖИМЕ ВВОДА&d@ ESC вернуться в командный режим Забой Забой ^W/^U Убрать слово/Убрать строку ^V Вставить CRTL-символ[ы] &dD &d@ &dDОПЕРАТОРЫ С ПОЗИЦИОНИРОВАНИЕМ&d@ p/P вспомнить фрагмент за/перед _ {n} ["буква_буфер] "команда" {m}"команда позиционирования" весь фрагмент запоминается! или повтор команды для строки d уничтожать фрагмент y запоминать фраг c заменить фрагмент (==> в режим ввода ) &dD<&d@/&dD>&d@ сдвинуть влево/вправо ! команда пропустить фрагмент через фильтр &dD &d@ &dDПРИМЕРЫ&d@ 7yy запомнить 7 строк в неименованном буфере "aAd{ добавить к буф a с удалением от _ до начала абзаца !G sort отсортировать строки от курсора и до конца &dD &d@ &dD"МАКРОКОМАНДЫ"&d@ :map клавиша_имя_макро тело_макрокоманды {CR} :map! клавиша_имя_макро тело_макрокоманды {CR} - в режиме ввода :ab сокращение сокращаемый_текст {CR} - в режиме ввода &dD &d@ &dDПОИСК&d@ ?строка искать вверх /строка искать вниз n повторить поиск N вернуться на последнюю найденную строку &dD &d@ &dDПОИСК_С_ЗАМЕНОЙ&d@ :s/рег_выраж/замена/gc - глобальный с подтверждением :Q/vi вход / выход в режим ed :g/строка - поставить визуальный фильтр :+5 движение по файлу &dD &d@ &dDРЕДАКТОР_ED. Вход ":" (надолго "Q") Выход "CR" / (VI)&d@ ^^ Перейти в альтернативное окно :[1,$] w [>>] [file] записать в file [от 1 до $ строки] :q[!] закончить сеанс [форсированно] :[15]r [file] или [!komanda] вставить после [15] стр :e редактировать новый файл :n редактировать следующий файл :sh выйти в Shell :! команда запустить на выполнение Shelloм &dD &d@ &dDУСТАНОВКА РЕЖИМОВ VI&d@ :set nu / nonu нумеровать/ненумеровать строки :set smd{CR} показывать текущий режим EXINIT="конфигурационные команды" - переменная окружения .exrc - файл с командами конфигурации . &dDКак подключить русские фонты к компьютеру с X11&d@ 1. Создаем каталог cyrfonts. Копируем туда файлы *.bdf или *.pcf mkdir cyrfonts cp *.bdf *.pcf cyrfonts Замечание: предпочтительно добыть фонты в формате PCF а не BDF Проблема в том, приложение заказывает размер фонта, которого у X или FONT-сервера нет, то FONT-сервер пытается скалировать и в случае .BDF погибает и убивает все, что под ним запущено. Конвертировать bdf-фонты можно командой bdftopcf. 2. В каталоге с фонтами создаем оглавление фонтов для X-server'а : fonts.dir cd cyrfonts mkfontdir 3. Указываем X-server'у, чтоб он брал фонты из нашего каталога xset +fp $HOME/cyfonts xset fp rehash 4. Пользуемся русскими фонтами. xterm -fn koi9x15 mailtool -fn koi6x10 и т.д. &dDЧтобы русские фонты включались и находились по умолчанию&d@ 5. До запуска X-Windows установить переменную окружения FONTPATH Если у вас Bourne Shell /bin/sh или bash или ksh FONTPATH=$HOME/cyrfonts: export FONTPATH Если судьба угораздила пользоваться C-Shell /bin/csh или tcsh setenv FONTPATH $HOME/cyrfonts: 6. Или скопировать фонты в директорию со стандартными фонтами. cp *.bdf /usr/lib/X11/fonts/misc cd /usr/lib/X11/fonts/misc mkfontdir xset fp rehash 7. Если у вас XFree, то добавить строчку в файл /etc/X11/XF86Config FontPath "/home/yourname/cyrfonts/" 8. Установить фонт по умолчанию в своем .Xdefaults файле. Добавить в файл .Xdefaults такие строчки: font.name: koi9x15 icon.font.name: koi6x10 XTerm*font: koi6x10 XTerm*VT100*font1: koi6x10 XTerm*VT100*font2: koi8x13 XTerm*VT100*font3: misc16 XTerm*VT100*font4: misc24 XTerm*VT100*font5: demos8x14 XTerm*VT100*font6: demos8x16 emacs.font: koi9x15 emacs.default_font: koi9x15 &dDЕсли у вас SunOs 4.1.1 и, соответственно, NeWS&d@ Тогда вся вышеописанная процедура не сработает. У NeWS совершенно собственный формат фонтов. 1. Преобразуем фонты в формат NeWS convertfont *.bdf 2. Создаем оглавление для NeWS server'а bldfamily 3. Подключаем фонты в точности, как в стандартном X11 xset +fp `pwd` # Дополняем каталог, подключаем фонты. xset fp rehash # Чтоб сервер перезачитал каталоги с фонтами все. Еще можно в файл Synonims.list воткнуть строчку с aliaсами. Иначе фонты будут браться только по имени файлов. &dDРедактирование фонтов.&d@ Некоторые комплектты X-Windows имеют редактор фонтов. Он может называться xfed, fontedit, xfd. Если у вас такового нет, попробуйте найти исходники. xfed font.bdf convertfont -v font получаем font.vfp fontedit font.vfp затем convertfont -b ?? font.vfp и получаем font.ff &dDПодключение русской клавиатуры в X-Windows&d@ Достаньте файлы с раскладкой клавиатуры. (Их можно найти во многих местах, в частности здесь). Выполните команду xmodmap файл-с-раскладкой.xmm Переключатель рус/лат - клавиша CapsLock Чтобы отключить русскую клавиатуру, выполнитте команду xmodmap default.xmm &dDПодключение русской клавиатуры в XFree86&d@ XF86Config: Section Keyboard LeftAlt Meta AltGr ModeShift Right_Ctl ModeLock ScrollLock ScrollLock EndSection Вешает переключатель на правый Ctrl, при этом еще и лампочка CapsLock будет загораться. &dDПереключатель кирилицы в XFree86 3.2.2&d@ В свежей версии Xfree_3.3.2