Статья
Старые компьютеры в роли графических терминалов
(ранее была опубликована в журнале "Downgrade" #4)

http://ru54.com/~nostalgy
http://nostalgy.net.ru
©2012 М.Бабичев (Антиквар)

Во многих организациях, а также у некоторых домашних пользователей сохранились устаревшие, но работоспособные компьютеры, которые, с одной стороны, жаль выбрасывать, а с другой - непонятно, как использовать на практике, потому что современную операционную систему на них не установишь, а полноценно работать с DOS, Windows 3.1 или Windows 95 в настоящее время умеют лишь немногие, да и они зачастую вынуждены обращаться к более современному программному обеспечению. Если же речь идет об образовательных учреждениях - школах, ВУЗах - то здесь использовать старые программы и вовсе не получится, так как учебные планы предусматривают освоение учениками современного софта. Неужели это означает приговор для тысяч доживших до наших дней 486-х и "первых" Pentium'ов? К счастью, нет. Даже на таких компьютерах, в том числе не оснащенных жесткими дисками, пользователи могут работать со вполне современными операционными системами, например, Windows 2003/2008 Server или AltLinux Terminal 5.0.

Для этого старые компьютеры нужно "переделать" в графические терминалы (консоли). Консолью с давних времен принято называть текстовый дисплей (монитор) и клавиатуру, соединенные через сеть с сервером, на котором, собственно, и работает пользователь. Однако, современная консоль может работать и в графическом режиме, поддерживать мышь, звуковой адаптер, CD/DVD и другое вспомогательное оборудование. Понятно, что с прорисовкой рабочих столов и с передачей на сервер сигналов с клавиатуры и мыши справится даже маломощный компьютер. Зато терминальный сервер должен иметь достаточные ресурсы для того, чтобы несколько человек могли одновременно запускать на нем разные "громоздкие" программные пакеты. Однако, ресурсы такого сервера, как "системы массового обслуживания", используются более рационально, чем ресурсы персональных компьютеров. Скажем, для работы 10 пользователей вместо 10 полноценных ПК может быть достаточно купить один сервер, имеющий лишь в 2-3 раза большие память и быстродействие, чем каждый из этих ПК. Не нужно оснащать терминалы источниками бесперебойного питания - достаточно оснастить таким источником сервер. То есть, терминальная система может быть экономически выгодной. А учитывая, что все данные пользователей хранятся на одном компьютере, она может быть выгодной и для администратора: не нужно заменять "посыпавшиеся" жесткие диски или переустанавливать давшие сбой ОС на пользовательских машинах, легче следить за порядком, бороться с вирусами, делать резервное копирование...

Прежде всего, заметим, что реализовать терминальную систему можно различными способами:

I. Сервер на базе Windows 2000/2003 Server и т.п.:

а) Терминал целиком загружает с дисковода или жесткого диска RDP-клиент (Remote Desctop Protocol) DOSRDP
б) Терминал целиком загружает с дисковода RDP-клиент FRWT 2.01 (Free Remote Windows Terminal), или с жесткого диска FRWT 3.4.1
в) Терминал считывает с дисковода код сетевой загрузки Etherboot, который с помощью DHCP и TFTP получает с сервера RDP-клиент WtWare 4.5.11 (Windows Terminal [soft]ware)
г) Терминал считывает из ПЗУ сетевого адаптера код сетевой загрузки PXE, который с помощью DHCP и TFTP получает с сервера RDP-клиент WtWare...

II. Сервер на базе Linux с LTSP (AltLinux Terminal с пакетом Linux Terminal Server Project):

а) Терминал считывает с дисковода код сетевой загрузки Etherboot 5.4.0, который с помощью DHCP и TFTP получает с сервера LTSP-клиент (файл initrd.gz)
б) Терминал считывает из ПЗУ сетевого адаптера код сетевой загрузки PXE, который с помощью DHCP и TFTP получает с сервера LTSP-клиент
в) Терминал целиком загружает с CD-ROM'а LTSP-клиент (initrd.gz и др...)

Наиболее простыми в настройке, но наименее удобными и надежными в повседневном использовании являются способы Iа и Iб. В этих случаях интенсивно используются и изнашиваются дисководы и дискеты, поскольку при каждом запуске терминала в его память загружается DOS, и считывается клиент, занимающий практически весь объем дискеты. Понятно также, что такой запуск терминалов отнимает сравнительно много времени.

Более надежными, удобными и быстрыми вариантами являются эти же способы, но с загрузкой DOS и клиентов с жестких дисков. Аналогичен им способ IIв, при котором загрузка производится с CD-диска. Жесткие диски и CD-приводы значительно быстрее и надежнее дисководов и дискет. Однако, необходимость использования на терминальных клиентах винчестеров или CD-приводов делает терминальную систему менее целесообразной: терминалы с "винчестерами" шумят и боятся ударов также, как и обычные ПК. Что же касается CD-приводов - оснастить ими каждый терминал может быть проблематично, а вот 3-дюймовый дисковод, как правило, есть на любом старом компьютере. Кроме того, не каждый старый компьютер содержит в BIOS подпрограмму загрузки с CD-диска.

Вышеупомянутые варианты позволяют иметь наиболее простой терминальный сервер, задача которого - подключать к себе по сети клиенты с фиксированными IP-адресами, и работать с ними через протокол RDP. Так, в Windows Server достаточно настроить сетевой адаптер, свойства сети, и включить сервер терминалов.

Сложнее настроить, но приятнее использовать варианты Iв и IIа. С дискет отсуществляется лишь начальная загрузка, то есть, на них содержится не полноценный клиент, а маленький (десятки килобайт) код Etherboot для обеспечения загрузки терминала по сети, который быстро считывается с дискеты, почти не изнашивая дисковод. Etherboot заменяет код сетевой загрузки PXE, записанный в микросхему ПЗУ сетевого адаптера (BOOT ROM). Конечно, если есть сетевые адаптеры с PXE BOOTROM, можно обеспечить наиболее удобные, надежные и "красивые" варианты запуска терминалов Iг и IIб. Однако, PXE содержат далеко не все сетевые платы.


Рассмотрим более подробно порядок создания терминальной системы на базе Windows 2000/2003 Server. Прежде всего, нужно напомнить, что Windows - платная коммерческая программа, которую нужно лицензировать. ОС Windows Server стоит значительно дороже Windows для рабочих станций. Кроме того, для подключения терминальных клиентов к Windows Server, нужно дополнительно приобретать клиентские лицензии (о терминальных лицензиях см. Приложение 4). Тем не менее, даже при таком "полностью легальном" раскладе терминальная система может быть выгоднее, чем несколько ПК, на каждый из которых установлена отдельная лицензионная Windows. Кроме того, к терминалам для Windows Server предъявляются несколько меньшие системные требования, чем к терминалам системы AltLinux Terminal. Однако, ввиду того, что многие школы принудительно переводят на Linux, область применения терминальных серверов Windows сейчас заметно сократилась.

Решив строить систему на базе Windows Server, определимся с выбором версии Windows. Автор испытывал Windows Server 2000 и 2003. Процесс установки и настройки этих систем примерно одинаков. Windows 2000 менее "тяжеловесна" (что может играть роль, если терминальный сервер сравнительно маломощен), однако, в ней используется версия 5.0 протокола RDP, которая не позволяет переназначать локальные диски клиентов на сервер (т.н. mapping) без использования сторонних программных средств типа Citrix Metaframe. "Маппинг" нужен, чтобы пользователи могли, например, записать файл с сервера на дискету, вставленную в дисковод терминала, или записать на сервер файлы через CD-ROM терминала. "Маппинг" должен поддерживаться как терминальным сервером, так и терминальным клиентом (из опробованных нами клиентов для этого пригоден лишь WtWare 4.5.11). Так вот, Windows 2003 Server содержит RDP версии 5.2, которая поддерживает "маппинг", а кроме того, позволяет получить на экране терминала больше, чем 256 цветов.


Установка и начальная настройка Windows 2003 Server Rus

1. После ввода лицензионного ключа, появится окно "режимы лицензирования". Укажите вариант "на сервер", и выберите число подключений с запасом на будущее, например, если сейчас у вас 10 терминалов, стоит указать 15-20 подключений.

2. Окно "сетевые параметры" - выберите "особые параметры".

3. Протокол Интернета. Свойства. Укажите вручную IP-адрес сервера (сервер должен иметь фиксированный адрес!). В нашем примере - 192.168.0.1, маска сети 255.255.255.0. Если сервер не подключен к внешней сети, шлюз и DNS можно не указывать.

4. После завершения программы установки Windows и установки пакета обновлений R2, Windows запустится в обычном режиме. Если зайти в нее под именем "Администратор", автоматически появится окно "Управление данным сервером" (также его можно запустить через Пуск - Администрирование). Там надо выбрать пункт "Добавить или удалить роль",

5. После этого в окне "Параметры настройки" выбрать "Особая конфигурация". В списке "Роль сервера" будет строка "Сервер терминалов". По умолчанию там стоит "Нет". Измените этот параметр на "Да". После этого будет установлена и настроена служба терминалов. Теперь администратор может зайти на рабочий стол сервера через сеть. Но нужно сделать кое-что еще.

6. Пуск - Администрирование - Управление компьютером. Вкладка Служебные программы - Локальные пользователи - Пользователи. Создайте пользователей для терминалов. Например, по одному на каждый терминал. Так, у нас они называются K1, K2... K10, и заходят в систему без пароля. При создании пользователя поставьте галочки "запретить смену пароля пользователем" и "срок действия пароля не ограничен". Добавьте пользователей в группы "Пользователи" и "Пользователи удаленного рабочего стола", чтобы они могли заходить через терминал.

7. Однако, пользователи без пароля по умолчанию не могут работать через терминалы! Чтобы это исправить, выбираем Пуск - Администрирование - Локальная политика безопасности. Там открываем вкладку Локальные политики - Параметры безопасности. Ищем пункт "Учетные записи: ограничить использование пустых паролей". Вместо "Включен" устанавливаем параметр "Отключен".

Вот, собственно и вся первоначальная настройка сервера. Теперь на нем можно работать с терминалов, на которых с дискет целиком загружаются такие клиенты, как DOSRDP или FRWT. Для использования терминалов, у которых начальная загрузка производится с PXE BOOTROM сетевой платы или с дискеты, содержащей код Etherboot, нужно дополнительно настроить на сервере службы DHCP и TFTP, и поместить в публичный каталог TFTP-сервера файлы терминального клиента WtWare 4.5.11. Но об этом позже...

Для Windows 2000 Server Rus порядок установки несколько иной. Там при установке также нужно выбрать режим лицензирования "На сервер". После этого в окне "Компоненты Windows 2000" нужно поставить галочки на компонентах "Лицензирование служб терминалов" и "Службы терминалов". Затем, в окне "Установка служб терминалов" выберите "Режим сервера приложений". В следующем окне следует выбрать "Разрешения группы пользователей Windows 2000". Что касается сетевых параметров - нужно, как и для Windows 2003, выбрать "Особые параметры" сети...


Рассмотрим теперь простейший вариант терминального клиента. Аппаратные требования к нему таковы. Минимум 486-й процессор с частотой желательно не менее 66 МГц, а лучше Pentium. Оперативная память - не менее 8 Мб для DOSRDP и FRWT, и не менее 16 Мб для WtWare. Мышь для COM-порта или PS/2. Видеоадаптер минимум ISA-шный с 512 Кб видеопамяти, что позволяет получить разрешение экрана от 640х480 (DOSRDP) до 800х600 (FRWT) при 8-битном цвете (256 цветов). Но лучше поставить PCI-ную видеокарту с 1-2 Мб памяти. Нужно заметить, что для "школьной" системы AltLinux Terminal 5 необходима PCI-ная видеокарта с 1 Мб памяти, как минимум. Сетевой адаптер может быть ISA-шным или PCI-ным, если терминалы будут работать с Windows Server, и ТОЛЬКО PCI-ным, если терминалы подключаются к AltLinux Terminal.

Что касается необходимой скорости сети, то для 10 терминалов, работающих с Windows Server, может быть достаточно 10-мегабитной сети. Но для системы Altlinux Terminal LTSP 10-мегабитной сети явно недостаточно даже для 10 скромных терминалов (с низким разрешением экрана, без звука). Поэтому, если у вас больше 5-6 терминалов, используйте 100/1000-мегабитную сеть. Компромиссным решением может быть разделение сети из 10-12 машин на две части: одна с 10-мегабитными адаптерами, другая со 100-мегабитными. Обе части подключаются к общему свитчу (коммутатору). Если 10-мегабитная сеть коаксиальная, подключить ее к коммутатору можно через старый хаб, оборудованный BNC-разъемом. Если вам попадется такой хаб - не выбрасывайте его! Он может здорово пригодиться в роли "медиаконвертера".

Клиент должен быть оснащен дисководом 3.5", либо маленьким жестким диском (например, твердотельным - карта памяти Compact Flash, подключаемая к порту IDE через переходник).


DOSRDP. Желательно использовать DOSRDP XP версии 2.0 или 2.4. Это наиболее неприхотливый клиент, запускающийся из-под ДОС, и работающий с сетью через пакетный драйвер сетевого адаптера. Дистрибутив DOSRDP содержит программу установки SETUP.EXE, работающую под Windows, и позволяющую на основании указанных вами параметров создать готовую загрузочную дискету. Впрочем, можно обойтись и без SETUP. Скопируйте на загрузочную дискету или в отдельный каталог жесткого диска следующие файлы из дистрибутива:

1. пакетный драйвер вашей сетевой платы
2. TCP.CFG - файл настроек клиента
3. G4W.DAT - лицензионный ключ клиента
4. RUN.DAT - что-то нужное
5. G2.EXE - запускает, собственно, сам клиент
6. MOUSE.EXE - драйвер мыши
7. MOUSE.INI - файл настроек драйвера

Также создайте файл RUN.BAT для запуска клиента, в которй включите, как минимум, следующие строки:

MOUSE
REM Допустим, у нас сетевой адаптер NE2000, который
REM настроен на IRQ5 и на адрес ввода-вывода 300h
NE2000 0x60 5 0x300
G2


Рис.1 Заставка DOSRDP

Если все нормально, при запуске RUN.BAT загрузится DOSRPD, который покажет на экране графическую заставку (Рис.1), а затем - удаленный рабочий стол Windows. Скорее всего, этого не произойдет - ведь мы не отредактировали TCP.CFG. В нашем случае он будет иметь такой вид:

[COMMON]
my_ip=192.168.0.10
netmask=255.255.255.0
server=192.168.0.1
gateway=192.168.0.1
video=800*600
mouse=logitech
keyboard=1033
refreshrate=60HZ
hostname=Computer
user=K1
password=
colordepth=8
port=3389

Проверьте адреса клиента и сервера, маску сети. Установите разрешение и глубину цвета, соответствующие возможностям ваших видеокарты и монитора. Скажем, для ISA-шной карты стоит начать с разрешения 640x480, а colordepth=4 (16 цветов) или 8 (256 цветов). colordepth=16 есть смысл ставить лишь для PCI-ных видеокарт при использовании системы Windows 2003. Строки keyboard и port менять не надо.


FRWT. В нашем компьютерном классе с 10 машинами типа 486DX2-66 с 16 Мб ОЗУ и ISA-шными видеокартами с 512 Кб, клиенты DOSRDP работали недостаточно быстро, курсоры мышей перемещались по экранам с неприятной задержкой. Оказалось, что клиент FRWT 2.01, представляющий из себя загрузочную дискету с урезанным специализированным Linux'ом, обеспечивает заметно лучшее быстродействие. В отличие от DOSRDP, FRWT бесплатен, на него не нужно получать лицензию. Дистрибутив FRWT представляет из себя самораспаковывающийся или обычный образ дискеты 1.44 Мб. После распаковки образа на дискету, в ее корневом каталоге можно увидеть несколько файлов (help, licence, load, ramimage, vmlinuz, syslinux.cfg, term0.cfg, term1.cfg, logo.dis, logo.lss, f8.psf и ldlinux.sys).

Нам нужно отредактировать файл term0.cfg. Его строки снабжены комментариями на русском языке, поэтому подробно их рассматривать нет необходимости. FRWT автоматически определяет сетевой адаптер, но если используется адаптер типа NE2000, ему необходимо установить адресс ввода-вывода 300h. Если перемычек на сетевой плате нет, значит адрес задается с помощью утилиты конфигурации адаптера, работающей в DOS. Нужно найти в сети утилиту именно для вашей модели сетевой платы (определяется надписью на ее главной микросхеме, например UM9003, UM9008, W89C904F, RTL8019...).


Рис.2 Заставка FRWT


WtWare. FRWT зарекомендовал себя, как весьма удачный терминальный клиент. Однако, и ему свойственны некоторые недостатки. Во-первых, он занимает всю дискету, и при каждом запуске клиента дисковод должен прочитать дискету целиком, что вызывает повышенный износ дисководов и дискет, и занимает значительное время. Во-вторыых, как говорилось ранее, FRWT не поддерживает т.н. "маппинга", или "подключения" дисков терминала к серверу, чтобы пользователи могли работать со своими съемными дисками. Этим требованиям соответствует система WtWare - результат дальнейшего развития FRWT. Однако, WtWare не является бесплатной, ее нужно лицензировать. Но существует бесплатная версия клиента - WtWare Lite. К сожалению, "маппинг" локальных дисков можно включить, по сути, лишь в одной версии WtWare Lite 4.5.11.

В отличие от ранее рассмотренных терминальных клиентов, WtWare не загружается с локального гибкого или жесткого диска терминала. WtWare рассчитан на загрузку самого себя через сеть. Это позволяет упростить терминалы. В идеале они вообще могут не иметь никаких дисков, но их сетевые адаптеры должны быть оснащены т.н. PXE BOOTROM - микросхемой ПЗУ, в которую записан код PXE (подробнее о PXE см. Приложение 2).

Однако в старых сетевых платах, стоящих, как правило, в 486-х или "Пентиумах", микросхемы BOOT ROM, если они и есть, содержат не PXE, а иной загрузочный код - RPL, предназначенный для популярного в 90-х годах способа сетевой загрузки бездискового компьютера с сервера Novell Netware в сети IPX. Что явно не годится для решения нашей задачи в сети TCP/IP. Однако, выход есть: используются дискеты, на которые записан небольшой (десятки килобайт) код Etherboot, загружающийся вместо кода PXE из ПЗУ сетевого адаптера, и работающий аналогично.

Образ дискеты с Etherboot (EB-NET) для вашей модели сетевого адаптера можно загрузить с сайта http://rom-o-matic.net. Но лучше использовать уже созданные универсальные загрузчики Etherboot версий 5.2.2 или 5.4.0, автоматически определяющие достаточно большое количество сетевых адаптеров для шин ISA и PCI. Для подключения к Windows Server следует использовать версию 5.2.2. Для работы с AltLinux Terminal нужна версия 5.4.0.

Установка и настройка терминальной системы, основанной на WtWare Lite, осуществляется следующим образом. Прежде всего, нужно запустить на машине с Windows Server серверы DHCP и TFTP. В Windows для этого есть штатные серверные приложения, но, пожалуй, проще использовать стороннюю свободную программу Tftpd32, которая весьма проста в настройке. Ее можно установить на отдельном компьютере, что немного снизит нагрузку на сервер терминалов. Впрочем, при небольшом количестве клиентов целесообразно запускать TFTPD32 на терминальном сервере.

Рассмотрим Tftpd32 версии 3.35 с англоязычным интерфейсом. Размер пакета около 600 Кб. Распакуйте его в отдельный каталог сервера, например, C:\Tftpd32. Запустите программу (файл TFTPD32.EXE). В окне программы в строке "Current Directory" укажите путь к корневому каталогу терминального сервера. В этом каталоге будут находиться файлы, доступные терминальным клиентам. Например, C:\Tftpd32\TFTP_DIR. В строке "Server Interface" выберите адрес сетевого адаптера, к которому подключены терминальные клиенты. Ниже располагаются вкладки: "Tftp Server", "DHCP Server" и "Log Viewer". На вкладке "DHCP Server" нужно настроить следующие параметры:

- IP Pool starting address - начальный адрес пространства IP-адресов, которые DHCP-сервер будет "раздавать" клиентам. В нашем примере - 192.168.0.2
- Size of pool - количество адресов, доступных клиентам. Его надо брать с запасом, т.к. сервер не сразу выдает клиентам освободившиеся адреса. На 10 терминалов должно быть достаточно 50 адресов.
- Boot File - имя файла с образом терминального клиента, который клиенты будут загружать себе для выполнения. При использовании WtWare Lite нужно указать имя wtshell.nbi
- WINS/DNS Server - по умолчанию 255.255.255.255. Менять не надо.
- Default Router - адрес маршрутизатора. Можно указать адрес терминального сервера (в нашем примере 192.168.0.1).
- Mask - маска сети, в нашем случае 255.255.255.0

Затем следует нажать кнопку "Save" справа от вышеописанных строк. Настройки сохранятся в файле TFTPD32.INI в каталоге C:\Tftpd32. Внимание, если файл TFTPD32.INI имеет атрибут "Read Only" (только чтение), настройки не сохранятся. Этот атрибут надо убрать.

Внизу окна программы нажмите кнопку "Settings" для осуществления дополнительных настроек. В окне настроек в группе Global Settings поставьте галочки напротив пунктов TFTP Server и DHCP Server, прочие галочки следует убрать. Будут работать только выбранные службы. В группе "DHCP Options" все по умолчанию - проверьте, чтобы все галочки были поставлены, а напротив строки "Bind DHCP to this address" стоял адрес сетевого адаптера, к которому подключены терминалы (в нашем примере 192.168.0.1). В группе "Advanced TFTP Options" нужно поставить галочку напротив пункта "PXE Compatibility" ("совместимость с PXE"). При этом галочка возле пункта "Option negotiation" автоматически уберется. Прочее по умолчанию. В пункте "Bind DHCP to this address", отмеченном галочкой, тоже должен стоять адрес сетевого адаптера, с которым работают терминалы (в нашем случае 192.168.0.1).

Теперь перейдем к настройке WtWare Lite. Дистрибутив этой программы обычно содержится в файле с именем wtware.lite.4.5.11.ru.zip размером примерно 10 Мб. В этом архиве в каталоге /wtware.net/lite/4.5.11/ есть файл wtshell.nbi размером 1988096 байт. Его нужно скопировать в корневой каталог сервера TFTP (в нашем примере C:\Tftpd32\TFTP_DIR). Также в корневой каталог надо скопировать подкаталоги CONFIGS и PACKAGES из дистрибутива WtWare Lite. В каталоге CONFIGS содержится файл 00.00.00.00.00.00.wtc. Это пример файла конфигурации для терминального клиента. Система позволяет создать для каждого компьютера-терминала собственный файл конфигурации, имя которого должно соответствовать аппаратному MAC-адресу сетевого адаптера терминала (подробнее о MAC см. Приложение 1).

Например, аппаратный адрес ISA-шного адаптера Realtek RTL-8019 52:54:4C:04:86:03. Следовательно, файлу конфигурации терминала с таким адаптером нужно дать имя 52.54.4C.04.86.03.wtc и поместить его в подкаталог /CONFIGS корневого каталога сервера TFTP.

Подробное описание настроек конфигурационного файла содержится в документе CONFIG.HTM в подкаталоге DOCS дистрибутива WtWare Lite. Поэтому не будем их подробно рассматривать. Приведем лишь пример файла, который использовался в нашем классе на терминале номер 1:

win2kIP = 192.168.0.1
clienthostname = k1
user = user1

mouse = com1
mouse_wheel = off
video = Cirrus(S)
resolution = 800x600
refresh = 75
bpp = 8
floppy = on
turnoffmenu = on

infobox = lctrl
redraw_delay = 100
connect_timeout = 60

При подключении клиента K1 к терминальному серверу с адресом 192.168.0.1, на экране появляется окно входа в систему, в котором уже введено имя пользователя user1, который может входить без пароля. Просто нажав кнопку "Ok", пользователь заходит в Windows. Далее в файле указаны настройки мыши и монитора. Мышь без колесика подключена к порту COM1. Разрешение экрана 800х600, глубина цвета (bpp) 8 бит или 28=256 цветов. Строка floppy = on позволяет переназначать дисковод клиента на сервер. Эта возможность включена лишь в версии 4.5.11 WtWare Lite. Подробнее - см. Приложение 3.

Строка redraw_delay определяет интервал (в миллисекундах) между перерисовками экрана. Уменьшение периода делает работу более комфортной, но повышает загрузку сети и сервера. 100 мс - это разумный компромисс.

Теперь осталось лишь приготовить загрузочные дискеты с образами Etherboot 5.2.2. Для этого можно воспользоваться WinImage или бесплатной программой RAWRITE.EXE (работает в DOS и Windows 95/98). Запустив RAWRITE, введите имя файла с образом (например, eb-net.dsk), а затем букву дисковода (a). Если вы работаете в Linux, образ Eherboot можно записать на отформатированную дискету (она должна быть в это время размонтирована) командой вида:
cat eb-net.dsk > /dev/fd0
Где eb-net.dsk - путь и имя файла с образом, а /dev/fd0 - т.н. файл устройства для первого флоппи-дисковода.

Начав загружаться с такой дискеты, на экране терминала увидим надпись:
Loading ROM image................
ROM segment 0x0000 length 0x0000 reloc 0x00020000
Etherboot 5.2.2 (GPL) http://etherboot.org...

...и список поддерживаемых сетевых адаптеров.
Boot from (N)etwork or (Q)uit?
Если ничего не нажимать, загрузка сети пойдет через несоколько секунд. Можно нажать клавишу N и ускорить начало загрузки:
Probing pci nic...
(обнаружение сетевой платы PCI)
Probing isa nic...
(обнаружение сетевой платы ISA)
...
NE2000 base 0x3000, addr 52:54:4C:04:86:03
Эта надпись означает, что загрузчик обнаружил NE2000-совместимую плату с адресом ввода-вывода 300h. Также показан MAC-адрес платы. Далее видим:
Searching for server (DHCP)...
Загрузчик обращается к сети и ищет там DHCP-сервер. Если в течение ~10 секунд сервер не найден, нужно проверить (см. Приложение 1):

- горит ли индикатор линка с сетью на сетевой плате
- нормально ли подключен к сети сервер
- правильно ли сделаны сетевые настройки на сервере
- запущен ли на сервере Tftpd32, верно ли он настроен

Но допустим, адаптер и сеть исправны, DHCP-сервер в сети обнаружен. В таком случае на экране появится что-то вроде:

...Me: 192.168.0.5, Server: 192.168.0.1, Gateway 192.168.0.1

То есть, загрузчик подключился к DHCP-серверу и тот присвоил терминалу временный адрес 192.168.0.5. После этого, если сервер TFTP запущен и настроен, на экране возникнет сообщение:
Loading 192.168.0.1:wtshell.nbi ..(NBI)................
.......................................................
.......................................................
.............

Что говорит об успешном подключении к TFTP, и начале загрузки NBI-образа терминального клиента WtWare Lite (содержится в файле wtshell.nbi в "корне" сервера TFTP). Через несколько секунд загрузка завершится, о чем будут сигнализировать следующие строки:
.done
mknbi-1.2-7/first32.c (GPL)
Top of ramdisk is 0X02000000
Rambisk at 0X01EDF000 size 0X00121000

После чего на экране появится бегущая строка запускающегося клиента WtWare, и приглашение "Press DEL to enter SETUP". Нажав клавишу "Del", попадем в меню настройки терминального клиента, в котором есть пункты:

- Настроить видеокарту и мышь
- Установить WtWare на жесткий диск
- Обновить WrWare на жестком диске
- Запустить терминал в режиме отладки
- Перейти к командной строке

Нам понадобится пункт "Настроить видеокарту и мышь". Нужно выбрать наиболее подходящий драйвер для видеокарты клиента. Поддерживаются многие модели видеокарт. Стоит начать с универсального драйвера VESA. Затем выбирают тип мыши, разрешение экрана и количество цветов. После чего терминал тестирует видеоадаптер в выбранных разрешении и цветности. На экране появляются движущиеся вертикальные цветовые полосы. В конце теста система определяет, сколько секунд заняло его выполнение. Выбирая разные драйверы видеокарты, можно определить, какой из них обеспечивает наименьшее время выполнения теста, то есть, максимальное быстродействие видеосистемы. Найденные оптимальные настройки следует вручную записать в файл конфигурации терминала на сервер. Если такой файл имеется, WtWare, если не нажимать в ходе его запуска клавишу "Del", отобразит на экране приглашение входа в Windows и долгожданный рабочий стол.


LTSP. В последнее время многие школы, где использование терминальных систем наиболее целесообразно, принудительно переводятся на свободное программное обеспечение. Помимо школ, многие другие бюджетные и некоммерческие организации также не могут позволить себе покупку лицензии на Windows Server. К счастью, систему графических терминалов можно организовать и на базе Linux. Для этого на сервере Linux должен быть установлен, например, пакет LTSP (Linux Terminal Server Project).

На своем опыте автор этой статьи убедился, что многолетний стаж работы с DOS и Windows отнюдь не обеспечивает легкого и безболезненного перехода на т.н. NIX-системы (здорово помогает в этом деле файловый менеджер MC - Midnight Commander, linux-"клон" старых добрых Norton Commander и FAR. Чтобы запустить MC, достаточно ввести в консоли команду "mc"). Те проблемы которые возникают у "виндузятника" при начале работы с Linux, ему приходится, как правило, решать самому, путем проб, ошибок и накопления собственного драгоценного опыта. Ведь "линуксоиды" в большинстве своем отнюдь не горят желанием объяснять "перебежчику из вражьего стана" какие-то "тривиальные" с их точки зрения вещи. Так, например, поставив на сервер вместо Windows 2003 AltLinux Terminal 4, я обнаружил, что те 486-е терминалы, которые хорошо работали с Windows, стартуя с дискет Etherboot 5.2.2, упорно не желают подключаться к AltLinux. Попытки "гуглить" в интернет-поисковике ответ на возникающую ошибку, давали что-то невразумительное, вроде "тарбол чрута". Хочешь послать подальше бывшего "виндузятника", надоедающего вопросами? Ответь ему при случае: "создай тарбол чрута".

Итак, "курение мануалов" оказалось малопродуктивным. Сетевой загрузчик Etherboot 5.2.2 подключался к машине AltLinux по сети, через DHCP получал IP-адрес, по TFTP скачивал терминальный клиент отсюда:
/var/lib/tftpboot/ltsp/i586/nbi.img
Но дальше, когда этот клиент начинал запускаться, возникала ошибка:
VFS: Cannot open root device "nfs" or unknovn-block (0,255)
Please append a correct "root=" boot option; here are
available partitions;
kernel panic - not syncing; VFS: unable to mount root fs
or unknown-block (0;255)

Kernel Panic - это критическая системная ошибка в Linux, нечто вроде BSOD ("синего экрана смерти") в Windows. Причина ошибки в том, что клиент не может подключиться к серверу при помощи службы NFS ("сетевая файловая система"). А подключиться ему надо, чтобы сменить свой временный корневой каталог на некий каталог, находящийся на сервере. Как видите, терминальный клиент в Linux работает совсем не так, как в Windows. Он не является изолированной системой, общающейся с сервером через терминальный протокол. У него с сервером общая распределенная сетевая файловая система. Более того, "сервером" (X-сервером, взаимодействующим с консольным оборудованием) является терминал, а мощная машина на базе Linux выступает в роли "клиента". Есть от чего впасть в "когнитивный диссонанс"...

Пытаясь решить проблему с помощью более удачного загрузчика, я нашел Etherboot 5.4.0. Эта версия EB-NET весьма удачно эмулирует PXE-код сетевой платы. Поэтому AltLinux отдает терминалу для загрузки не nbi-образ клиента (nbi.img), а PXE-образ, хранящийся в файле initrd.gz, который лежит в том же каталоге, что и nbi.img. С initrd.gz процесс запуска клиента пошел немного дальше, но кернел паник снова возникла. На этот раз по причине проблем с сетевым адаптером. Попробовал загрузить систему со специального CD-диска, образ которого лежит на сервере в каталоге /opt/ltsp-boot.iso. Та же проблема. Возникла мысль: похоже, этот клиент просто не поддерживает ISA-шные сетевые платы. Заменил 486-ю материнскую плату без PCI на Pentium (поставив те же 16 Мб ОЗУ), установил в нее PCI-ную 10-мегабитную плату Realtek RTL-8029 (именно ее, потому что на ней есть сетевой разъем BNC, а у нас в классе древняя коаксиальная сеть)...
Процесс загрузки пошел еще дальше. Загрузилась нормальная текстовая консоль Linux. X-сервер, однако, не включился. Пришлось поставить вместо ISA-шной видеокарты с 512 Кб памяти PCI-ную с 1 Мб памяти. И на сей раз терминал успешно заработал в графическом режиме!

Таким образом, терминальная система на базе "школьного" AltLinux Terminal версии 4 или 5 была запущена. Поставив вместо RTL-8029 современный сетевой адаптер Intel с PXE, я обнаружил, что терминал загрузился через PXE без помощи дискеты. Altlinux Terminal действительно поддерживает загрузку бездисковых терминалов "прямо из коробки". Но какой ценой это достигается? Возрастают требования к клиентам. Терминал должен быть оснащен сетевой платой и видеоадаптером для шины PCI. Следовательно, 486-е материнские платы, не оснащенные этой шиной, не годятся. Конечно, это если решать проблему "в лоб". Есть предположение, что, "покопавшись" с файлом initrd.gz, сведущий в Linux человек может усовершенствовать штатный образ клиента, заставив его работать с сетевыми адаптерами наподобие NE-2000, и ISA-видеокартами. Впрочем, скорее всего, радости от такого клиента будет немного, потому что терминальный клиент под Linux работает в целом медленнее клиента под Windows. Но попробовать все же стоит. Также есть смысл испытать и другие Linux-дистрибутивы, оснащенные LTSP, например, K12LTSP (K12Linux на базе Fedora) или EdUbuntu.


Итак, в этой статье было показано несколько более или менее простых вариантов реализации терминальной системы, которая позволяет и поныне успешно использовать давно устаревшие компьютеры, выпущенные в 90-х годах. Начиная с 486-х машин с 8 Мб оперативной памяти и ISA-шными сетевыми и видеоадаптерами. Как наверняка уже убедился читатель, для этого не требуется каких-то особенно глубоких познаний и специального образования.

Разумеется, далеко не все варианты терминальных систем были описаны. Так, например, не была рассмотрена мощная, но сложная коммерческая система Citrix Metaframe. Хотя для нее и существуют DOS-клиенты. Однако, без Citrix сейчас вполне можно обойтись. В стороне остались RDP-клиенты для Windows 9x и Linux, VNC-клиенты для работы в Linux из Windows, FreeNX, SSH... Просто потому, что для них нужны относительно "мощные" терминалы, вполне способные работать в качестве "полноценных" ПК. Либо требуется глубокое знание UNIX/Linux-систем.

Автор же счел необходимым рассмотреть простые в реализации варианты, предъявляющие минимальные требования к аппаратуре "тонких клиентов", которые при отсутствии терминальной системы подвергаются беспощадной, но неоправданной утилизации, что является расточительным и варварским по отношению к природе. В наше время, когда все больше внимания уделяется экологии и энергосбережению, дешевые, долговечные, бесшумные и потребляющие мало энергии терминальные системы особенно актуальны. Тормозит их распространение главным образом недостаток популярной литературы на тему графических терминалов. Хочется надеяться, что данная работа позволит в какой-то степени заполнить этот пробел.

Важное дополнение от 10.11.2011
Некоторые из указанных в статье программных продуктов найти в сети стало проблематично. Поэтому они размещены на нашем сайте http://nostalgy.net.ru, в разделе "Сети, связь, Интернет"

Антиквар


Приложение 1. Некоторые вопросы, касающиеся сетевой аппаратуры

MAC-адрес уникален для каждой сетевой платы и состоит из шести пар 16-ричных цифр. Узнать его можно разными способами:
- прочитать на этикетке, приклеенной к плате
- запустить в DOS утилиту для конфигурации платы
- запустить в DOS пакетный драйвер платы
- загрузить дискету с Etherboot
- запустить утилиту настройки клиента WtWare Lite

Если MAC-адрес, который отображается пакетным драйвером или кодом Etherboot, выглядит наподобие 00:00:00:00:00:00, это говорит о том, что драйвер не подходит, либо адрес и прерывание сетевой карты заданы неверно (возможен конфликт адресов или прерываний, чтобы его разрешить, следует запустить в DOS программу настройки и тестирования этой сетевой платы). Сеть в этом случае будет недоступна.

Бывает, что кабель к сетевой плате подключен, а светодиод "Link" ни на ней, ни на хабе не светится. Возможно, неисправен кабель или разъем. Но порой бывает, что в настройках сетевой платы, если она имеет разные сетевые разъемы (RJ-45, BNC, AUI), выбран другой сетевой интерфейс, например, BNC вместо витой пары. Либо жестко выставлен такой режим витой пары (10 или 100 Мбит, полный дуплекс или полудуплекс), который не поддерживается хабом. Еще бывает (на старых хабах), что вы подключили кабель к порту, который называется "Uplink") и предназначен для подключения к хабу верхнего уровня. К такому порту, впрочем, можно подключить сетевую плату - но через "перекрестный", "crossover" (а не "прямой") кусок витой пары.

Учитывая, что терминалы бывают весьма древними, возможно, они подключаются к сети через "тонкий коаксиал". Такой сегмент сети в виде общей шины не должен нигде иметь разрывов, а на концах сегмента должны стоять сопротивления - "терминаторы" по 50 Ом. Если измерить в любой точки сети сопротивление между оплеткой и центральной жилой кабеля, оно должно быть близко к 25 Ом (мерить можно и при работающих компьютерах). Это означает, что сегмент сети на коаксиале электрически исправен.


Приложение 2. Процесс сетевой загрузки терминального клиента при помощи PXE-кода в ПЗУ сетевой платы

PXE (Preboot eXecution Environment, "пиикси") содержат многие современные 100/1000-мегабитные сетевые адаптеры для шины PCI, а также адаптеры, встроенные в материнскую плату. Работает PXE следующим образом:

1. При включении питания, BIOS компьютера-терминала выполняет тест системы, а затем ищет дополнительные ПЗУ, с помощью которых можно произвести загрузку (помимо подпрограмм загрузки с дисковода, CD-диска или винчестера IDE, встроенных в основной BIOS, существуют подпрограммы, записанные в микросхемы ПЗУ, установленные на дополнительные платы, такие как контроллер SCSI или сетевой адаптер). Найдя ПЗУ в сетевом адаптере, BIOS передает ему управление.

2. Код загрузки из ПЗУ сетевого адаптера инициализирует (запускает) сетевой адаптер, и отправляет в сеть широковещательный запрос к DHCP-серверу. Этот сервер служит для автоматической выдачи компьютерам сетевых реквизитов. DHCP назначает терминальному клиенту временный IP-адрес, указывает ему маску сети, адреса шлюза и сервера DNS...

3. Клиент делает запрос к TFTP-серверу. TFTP (Trivial FTP) - упрощенный вариант протокола FTP, задача которого - передать по сети файл с сервера на клиент. Терминал скачивает в свою оперативную память из корневого каталога сервера TFTP файл, в котором содержится образ терминального клиента. Какой файл передавать клиенту - указано в настройках сервера TFTP.

4. Терминал запускает загруженный образ клиента. Клиент должен уметь работать с сетевым адаптером, видеокартой, клавиатурой и мышью терминального клиента. То есть, он должен или автоматически определять это оборудование, или дополнительно считывать файл конфигурации из каталога TFTP-сервера. Если это оборудование работает нормально, клиент подключается к терминальному серверу через протокол RDP, и пользователь видит на экране приглашение входа в систему. Введя имя и пароль, он получает доступ к "рабочему столу" на сервере.


Приложение 3. Использование дисководов терминальных клиентов

Для того, чтобы работать со своей дискетой, пользователь должен вызвать специальное меню, переместив указатель мыши в нижний правый угол экрана терминала, удерживая при этом левую клавишу Ctrl (см. строку infobox = lctrl в файле настроек клиента WtWare).


Рис. 3. Меню для подключения дискет в WtWare Lite

В меню, помимо прочего, присутствует кнопка с надписью "подключить", нажав которую пользователь "монтирует" свою дискету, которая будет видна ему в Windows, как сетевой диск. Перед извлечением дискеты ее нужно таким же способом "размонтировать".


Рис. 4. Дисковод терминала в окне "Мой компьютер"

Чтобы было удобнее работать с дискетой, вставленной в дисковод терминала, ей следует назначить букву диска. Это удобно делать в файловом менеджере FAR. Нажав комбинацию клавиш Alt-F1 или Alt-F2, вызываем в левой или правой панели список дисков, в котором также присутствует пункт "network". Выбрав его, увидим примерно такой список:
- Microsoft Windows Network
- Сетевой веб-клиент
- Службы терминалов Microsoft
В "Службах терминалов..." будет присутствовать сетевой каталог:
\\tsclient\FLOPPY
Ему можно назначить первую свободную букву, нажав F5 ("Map"), или букву по выбору, нажав F6 ("MapTo). После этого, нажав Alt-F1/F2, увидим в списке дисков дисковод клиента. Удобнее всего назначать ему букву B:


Приложение 4. Лицензирование терминального сервера Windows

К сожалению, терминальный сервер Windows требует приобретать лицензии на подключаемые к нему терминалы. Чем больше терминалов предполагается использовать, тем дороже лицензия. Лицензии не нужны только в том случае, если терминальный сервер будет использоваться для удаленного администрирования (в этом случае допускается не более двух терминальных подключений). Терминальный сервер Windows 2000/2003 напоминает программы, распространяемые по лицензии shareware. Если терминальная лицензия не приобретена, система отсчитывает определенное количество дней (Windows 2000 - 90 дней, Windows 2003 - 120), после чего терминалы перестают работать. Рассказывают, что некоторые "админы", использовавшие Windows Server неофициально и в некоммерческих целях, и потому не желавшие покупать какие-то терминальные лицензии, поступали гениально просто: перед установкой Windows Server они переводили часы компьютера далеко вперед, например, в 2020-й год. После того, как все терминалы поработают с сервером, и сервер выдаст угрожающее сообщение типа...
"Не удалось найти сервер лицензий сервера терминалов Windows 2003. Этот компьютер должен подключиться к серверу лицензий сервера терминалов Windows Server 2003 в течение 119 дней, иначе сервер терминалов перестанет работать..."
...хитрецы переводили часы сервера обратно в 2011-й год! После этого сервер терминалов соглашался проработать еще около 9 лет. Юридические аспекты такого использования сервера Windows рассматривать здесь не будем. Понятно, что лучше все-таки приобрести эти лицензии, или освоить терминальную систему на базе Linux с LTSP.


Приложение 5. Решение некоторых проблем с Altlinux Terminal 5.0

Те неискушенные пользователи Linux, которые установили Altlinux Terminal на школьный сервер в качестве готового терминального решения, могут, подобно мне, сталкиваться с некоторыми трудностями, решение которых не "лежит на поверхности", то есть, требует использования консоли. Наверное, стоит рассказать об этих случаях.

Привязка сетевых интерфейсов
Altlinux Terminal поддерживает загрузку терминалов, подключенных к сетевому адаптеру, который обозначен в системе, как eth0, и имеет адрес 192.168.0.1. Если на сервере два сетевых адаптера, тот, к которому подключены терминалы, при установке может принять имя eth1, и терминалы с него не загрузятся. Хорошо, если можно просто переключить сетевые кабели. А если, например, терминалы подключены к коаксиальному Ethernet'у? Более того, если установить в систему другой сетевой адаптер, он поменяет имя, скажем, вместо eth0 получится eth2, и терминалы тоже перестанут грузиться. Что делать? Не переустанавливать же сервер! Оказывается, достаточно открыть в текстовом редакторе файл
/etc/udev/rules.d/70-persistent-net.rules
и исправить там в строке, соответствующей "терминальному" адаптеру слово "eth1" "eth2" или "eth3" на "eth0" (разумеется, в этом файле не должно быть два адаптера с именами "eth0").

Восстановление загрузчика системы
В Altlinux используется устаревший загрузчик LILO. У него есть одна неприятная особенность. На некоторых компьютерах после некоторого времени работы система вдруг перестает загружаться. При запуске на экран в текстовом режиме выводится куча символов типа "99 99 99 99"... Это - ошибка 99 загрузчика LILO, установленного в главную загрузочную запись (MBR) жесткого диска. То есть, LILO неспособен найти дисковый раздел, с которого загрузка должна быть продолжена. В этом случае можно попробовать сделать две вещи:
1. Загрузиться с установочного DVD-диска, и выбрать в меню пункт "Восстановление системы", после чего ввести в консоли команду fixmbr, которая восстановит загрузчик в MBR. Но при следующем выключении сервера ошибка 99 может повториться!
2. В этом случае попробуйте снова проделать пункт 1, а затем загрузить сервер и посмотреть файл /etc/lilo.conf в котором хранятся настройки LILO. Посмотрите в этом файле строку "boot=..." - она указывает на устройство, с которого осуществляется загрузка. Скажем, если на сервере стоит один sata-винчестер, то загрузка должна идти с /dev/sda. Строка "root=..." указывает на дисковый раздел, на котором находится корневой каталог файловой системы. Обычно такой раздел называется /dev/sda1. Если у вас нет этих строк, или в них записан какой-то длинный набор символов - есть смысл попробовать прямо указать LILO, с какого диска и раздела надо грузиться. Так, я указал:
boot=/dev/sda
root=/dev/sda1
Однако, чтобы изменения вступили в силу, надо запустить программу sbin/lilo, которая изменит загрузчик в MBR.

Следует добавить, что изменить lilo.conf вы сможете только из-под учетной записи администратора (root-а). Зайти под root-ом в Altliunx Terminal можно только из-под текстовой консоли. То есть, запустите консоль (терминал), в ней укажите команду su, и введите пароль пользователя root. Теперь в этой консоли вы можете делать все без ограничений. Кстати, чтобы посмотреть информацию о разделах диска (узнать, на каком разделе корень файловой системы), введите в консоли команду df.

#