Налаштування X-терміналу

У цій статті я постараюся розказати вам про те, як ви можете зі старих і вже по суті нікому непотрібних комп’ютерів створити додаткові робочі місця.

Подаю характеристики комп’ютерів, з якими я проводив експерименти:

Термінальний сервер:

Celeron Tualatin 1100МГц, RAM 256МБ, HDD 40GB, розділ під віртуальну пам’ять 500MB, мережева карта D-Link 583TX на базі чіпа RealTek 8139. Ключову роль тут відіграє об’єм оперативної пам’яті, тому якщо ви плануєте декілька терміналів з офісними пакетами, то поставте побільше пам’яті.

Термінал клієнта:

Pentium 120МГц, RAM 24МБ, мережева карта (клон RealTek 8139), дисковод.

Коли ви вирішили поекспериментувати з термінальними рішеннями вдома, і будете використовувати лише два комп’ютери, то мережа може складатися з перехресного кабеля. Ну а якщо терміналів має бути більше, то це повинна бути повноцінна мережа з концентратором або комутатором. Принцип вибору мережі полягає на принципі: чим швидше, тим краще. Тому беремо за основу мережу з швидкодією 100Мбіт.

Етапи створення Х-термінала:

  • Створення дискети з термінал-ядром для завантаження Х-термінала.
  • Створення робочого-ядра для роботи на Х-терміналі.
  • Підготовка робочого-ядра для його завантаження на Х-термінал через мережу.
  • Налаштування роботи DHCP демона для видачі робочого-ядра Х-терміналу
  • Налаштування конфігураційних файлів Х-термінала та термінального сервера

На першому етапі є два варіанти:

  1. Ви маєте суперову мережеву карточку з BootROM і ця карточка прекрасно розпізнається ядром лінукса. Цей варіант буде дуже подібним до другого варіанта за винятком того, що термінал-ядро завантажується не на дискету, а в BootROM мережевої карти. Тому вам потрібно буде мати програму, яка зможе записати термінал-ядро у вашу мережеву карту, після чого ви можете переходити до другого етапу настройки Х-терміналу.
  2. ви маєте стандартну мережеву карточку за 5-10 баксів, яка про BootROM навіть нечула. Оскільки цей варіант найбільш поширений, то про нього я і буду вести нашу подальшу розмову. Нам потрібно створити спеціальну дискету яка буде емулювати BootROM дорогої мережевої карти.

Якщо ви впевнені в джерелі, з якого ви придбали мережеву карту і чітко знаєте її модель, тоді відразу ідіть на сервер http://rom-o-matic.net, де через декілька секунд зможете отримати термінал-ядро. Термінал-ядро для дискети займає близько 30КБ і має розширення lzdsk, тому будьте обережні при виборі ядра, яке ви бажаєте отримати.

Вважаємо, що перший крок на шляху створення дискети ми пройшли. ви маєте свіженьке термінал-ядро і тепер настав час записати його на дискету для перевірки працездатності нашого Х-терміналу. Процедура запису термінал-ядра на дискету виглядає так:

dd if=eb-5.0.7-dfe538.lzdsk of=/dev/fd0

Замість файла eb-5.0.7-dfe538.lzdsk ви повинні вказати файл з термінал-ядром для вашої мережевої карти. Назва dfe538 буде замінена на назву мережевої карти, для якої ви завантажили термінал-ядро.

Ну і якщо ви все правильно зробили і ваша впевненість у якості мережевої карти вас не підвела, то можете сміливо вставляти дискету у Х-термінал і переванта-жуватися (не забудьте послідовність завантаження Х-терміналу розпочати з дисководу). Через лічені секунди на екрані ви зможете побачити наступну інформацію:

.000021.0000 done
ROM segment 0x0800 length 0x4000 reloc 0x9400
Etherboot 5.0.7 (GPL) Tagged ELF for [RTL8139]
Boot from (N)etwork or from (L)ocal?

Якщо термінал-ядро розпізнає вашу мережеву карту, то воно видасть наступну інформацію:

Probing... [RTL8139] Found Realtek 8139 clone ROM address 0x0000
-ioaddr 0x6100, addr 00:50:FC:20:D8:99 100Mbps full-duplex

addr 00:50:FC:20:D8:99 – це MAC-адреса вашої мережевої карти, яка буде потрібна вам на останньому етапі конфігурування Х-терміналу.

Якщо щось буде не так, то термінал-ядро видасть помилку про те, що мережеву карту не знайдено.

Отже, перший етап ми виконали, а тепер подивимося, що буде, коли в нас події будуть розвиватися не так гладко. Основна проблема на першому етапі полягатиме в розпізнаванні мережевої карти термінал-ядром.

Для цього потрібно взнати правдиві параметри мережевих карт, які ви будете використовуватися на Х-терміналі та термінальному сервері. Почергово вставляємо мережеві карти в комп’ютер (звичайно при виключеному живленні) і після завантаження в лінукс виконуємо наступну команду:

lspci

Вона виводить список всього, що є в нашому комп’ютері:

00:00.0 Host bridge: Intel Corporation 82815 815 Chipset Host Bridge and Memory Controller Hub (rev 04)
00:01.0 PCI bridge: Intel Corporation: Unknown device 1131 (rev 04)
00:1e.0 PCI bridge: Intel Corporation: Unknown device 244e (rev 05)
00:1f.0 ISA bridge: Intel Corporation: Unknown device 2440 (rev 05)
00:1f.1 IDE interface: Intel Corporation: Unknown device 244b (rev 05)
00:1f.2 USB Controller: Intel Corporation: Unknown device 2442 (rev 05)
00:1f.3 SMBus: Intel Corporation: Unknown device 2443 (rev 05)
00:1f.4 USB Controller: Intel Corporation: Unknown device 2444 (rev 05)
01:00.0 VGA compatible controller: nVidia Corporation NV11 (rev b2)
02:0d.0 Multimedia audio controller: ESS Technology ES1969 Solo-1 Audiodrive (rev 02)
02:0e.0 Ethernet controller: D-Link System Inc: Unknown device 1300 (rev 10)

Як бачимо, наша мережева карта знаходиться на шині 02, в слоті 0e, тому беремо число 02:0e.0 і використовуємо його в наступній команді для того, щоб взнати деяку додаткову інформацію:

lspci -vn -s 02:0e.0

02:0e.0 Class 0200: 1186:1300 (rev 10)
Subsystem: 1186:1300
Flags: bus master, medium devsel, latency 32, IRQ 5
I/O ports at b000
Memory at ed800000 (32-bit, non-prefetchable)

У результаті цих нескладних команд ми отримали те, що нам необхідно, а саме: число 1186:1300. Перша його частина означає виробника мережевої карти, а друга – описує модель мережевої карти. Ці числа є унікальні для будь-якого виробника чи його моделі. З наступного файлу ви зможете взнати коди виробників, тут є коди всіх виробників, які хоч щось випускають для комп’ютерів:

/usr/share/pci.ids

У вас виникне закономірне питання: чому я це все описую? А тому, що саме таку підробку (абсолютно цього не знаючи) я поставив на Х-термінал, а потім два дні не міг зрозуміти чому карта, яка нормально працює під Windows, категорично відмовляється працювати під Linux. А причина була в тому, що код карти був 0001:8139, і саме про код виробника 0001, термінал-ядро, яке я записав на дискету, абсолютно нічого не знало.

Отже, як ми можемо обійти цю проблему? Є два варіанти: перший – дочекатися, поки група ентузіастів, яка супроводжує проект Etherboot, внесе коди нашої підробки в свою базу і випустить нову версію продукту, що звичайно буде не дуже швидко.

А, оскільки я не мав ніякого бажання на когось чекати, я скористався другим варіантом, який полягає в тому, щоб власноручно внести коди виробника карти в програму і, перекомпілювавши, її, отримати працездатне термінал-ядро.

Для цього завантажте з сайту http://etherboot.sourcefogre.net пакет etherboot-5.0.7 з емуляторами функцій BootROM для використання їх на Х-терміналах.

Для тих, хто теж має проблеми з розпізнаванням мережевої карти термінал-ядром, подаю приклади патчів для моєї мережевої карти на базі чіпу RealTek 8139:

*** Patch #1 записуємо в файл patch1
=====================================

*** config.c    Thu Jul  4 11:34:16 2002
--- my_config.c Fri Nov  1 11:50:04 2002
*************** static struct pci_id rtl8139_nics[] = {
*** 153,158 ****
--- 153,160 ----
        "Realtek 8129" },
    { PCI_VENDOR_ID_REALTEK,    PCI_DEVICE_ID_REALTEK_8139,
        "Realtek 8139" },
+   { PCI_VENDOR_ID_REALTEK_CLONE,  PCI_DEVICE_ID_REALTEK_8139,
+       "Realtek 8139 clone" },
    { PCI_VENDOR_ID_DLINK,      PCI_DEVICE_ID_DFE530TXP,
                  "DFE530TX+/DFE538TX" },
          { PCI_VENDOR_ID_SMC_1211,       PCI_DEVICE_ID_SMC_1211,

*** Patch #2 записуємо в файл patch2
====================================

*** pci.h   Fri Nov  1 11:51:28 2002
--- my_pci.h    Fri Nov  1 11:51:39 2002
*************** __asm__ __volatile__("pushfl ; popl %0":
*** 101,106 ****
--- 101,107 ----
  #define restore_flags(x) \
  __asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory")

+ #define PCI_VENDOR_ID_REALTEK_CLONE     0x0001
  #define PCI_VENDOR_ID_ADMTEK            0x1317
  #define PCI_DEVICE_ID_ADMTEK_0985       0x0985
  #define PCI_VENDOR_ID_REALTEK           0x10ec

Файли з латками копіюємо в директорію etherboot-5.x.x/src і накладаємо на файли наступними командами:

patch -p0 < patch1
patch -p0 < patch2

Впринципі для створення потрібних змін ви можете замінити стрічки які починаються з символу “+” на параметри Вашої мережевої карти. Тепер, коли ви використали мої патчі або зробили власні зміни, можете скомпілювати термінал-ядро для вашої мережевої карти наступною командою:

./make bin/boot1a.bin bin32/rtl8139.lzdsk

Записуємо на дискету:

dd if=bin32/rtl8139.lzdsk of=/dev/fd0

Звичайно, назва rtl8139, яка використовується в нашому прикладі повинна бути замінена на назву драйвера мережевої карти, для якої ви компілювали термінал-ядро. Щоб це взнати, перегляньте файл etherboot-5.x.x/src/NIC і зверніть увагу на стрічки, в яких міститься family ..... На місці крапок знаходиться назва драйвера, який відповідає за роботу вашої мережевої карти. От цю назву і вказуйте при компілюванні термінал-ядра. А чи підтримується саме ваша мережева карта цим драйвером, ви можете взнати з лінійок, що містяться нижче family ..... і в яких вказано коди виробника і моделі мережевих карт.

Якщо ви зробили все правильно, то термінал-ядро вже знаходиться на вашій дискеті, з якої ви будете в подальшому завантажувати Х-термінал.

Тепер ми переходимо до наступного етапу, а саме до підготовки робочого-ядра для Х-термінала.

Для робочого-ядра Х-терміналу я рекомендую взяти ядро версії 2.4.18, оскільки воно містить непоганий драйвер для мережевих карт на чіпі RealTek, який є основою багатьох дешевих (і не дуже) мережевих карт. Ну, а загальний принцип вибору ядра – це його якомога найбільша сумісність з апаратним забезпеченням Х-термінала.

Процедура компілювання нового робочого-ядра вам повинна бути вже знайомою, тому не буду вдаватися в деталі і скажу лише одне: при його конфігуруванні враховуйте те, що це робоче-ядро буде працювати на Х-терміналі, а не на тому комп’ютері, де ви його компілюєте.

Перед компілюванням ядра завантажте з сайту http://www.instmath.rwth-aachen.de/~heine/nfs-swap/ патч який надає можливість використовувати віртуальну пам’ять через мережу. Після його завантаження накладіть його на робоче-ядро яке ви збираєтеся конфігурувати. Перед компілюванням нового робочого-ядра для Х-терміналу створіть пристій, який буде використовуватися робочим-ядром як коренева файлова система:

mknod /dev/nfsroot c 0 255

Нижче подаю конфігураційний файл для робочого-ядра версії 2.4.18. ви можете взяти його за основу для будь якого іншого Вашого робочого-ядра. Для цього скопіюйте цей текст в файл .config, що розташований в директорії з вихідними кодами робочого-ядра, а далі можете командою make menuconfig підправити деякі параметри робочого-ядра. Тільки не викидайте закоментовані стрічки, бо тоді трохи зміниться конфігурація робочого-ядра.

CONFIG_X86=y
CONFIG_ISA=y
# CONFIG_SBUS is not set
CONFIG_UID16=y
CONFIG_EXPERIMENTAL=y
CONFIG_MODULES=y
# CONFIG_MODVERSIONS is not set
CONFIG_KMOD=y
CONFIG_M586TSC=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_CMPXCHG=y
CONFIG_X86_XADD=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_X86_L1_CACHE_SHIFT=5
CONFIG_X86_USE_STRING_486=y
CONFIG_X86_ALIGNMENT_16=y
CONFIG_X86_TSC=y
CONFIG_X86_PPRO_FENCE=y
CONFIG_NOHIGHMEM=y
CONFIG_MTRR=y
# CONFIG_SMP is not set
CONFIG_NET=y
CONFIG_PCI=y
CONFIG_PCI_GOANY=y
CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_NAMES=y
# CONFIG_HOTPLUG is not set
CONFIG_PCMCIA=y
CONFIG_CARDBUS=y
# CONFIG_HOTPLUG_PCI is not set
CONFIG_SYSVIPC=y
# CONFIG_SYSCTL is not set
CONFIG_KCORE_ELF=y
# CONFIG_KCORE_AOUT is not set
# CONFIG_BINFMT_AOUT is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_PM is not set
CONFIG_PNP=y
CONFIG_ISAPNP=m
CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_PACKET=y
# CONFIG_NETLINK_DEV is not set
CONFIG_UNIX=y
CONFIG_NETSWAP=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
# CONFIG_IDE is not set
# CONFIG_SCSI is not set
CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
CONFIG_NET_ETHERNET=y
CONFIG_NET_PCI=y
# CONFIG_EEPRO100 is not set
CONFIG_8139TOO=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_SERIAL=y
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_BUSMOUSE is not set
# CONFIG_MOUSE is not set
# CONFIG_AGP is not set
# CONFIG_DRM is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_TMPFS is not set
# CONFIG_ISO9660_FS is not set
CONFIG_PROC_FS=y
CONFIG_DEVFS_FS=y
CONFIG_DEVPTS_FS=y
CONFIG_EXT2_FS=y
# CONFIG_PARTITION_ADVANCED is not set
# CONFIG_MSDOS_PARTITION is not set
CONFIG_NFS_FS=y
CONFIG_ROOT_NFS=y
CONFIG_SWAP_VIA_NFS=y
CONFIG_NETSWAP=y
CONFIG_NFSD=y
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_VGA_CONSOLE=y
# CONFIG_SOUND is not set
# CONFIG_USB is not set

Отже, робоче-ядро скомпільоване, і ми переходимо до наступного етапу: підготовки робочого-ядра, щоб завантажити його на Х-термінал через мережу.

Почнемо з того, що створимо директорію, в якій tftp демон буде шукати робоче-ядро для видачі Х-терміналу:

mkdir /tftpboot/lts

Також вам необхідно завантажити пакет mknbi-1.x.tar.gz з сервера http://etherboot.sourceforge.net, а також скомпілювати і встановити цей пакет за допомогою наступних команд:

./configure && ./make && ./make install

Звичайно, ви можете завантажити RPM пакети для всіх вищезгаданих програм, бо, чесно кажучи, я звик все встановлювати з вихідних кодів, але це нашої проблеми зовсім не міняє.

Переходимо в директорію /usr/src/arch/i386/boot і наступною командою створюємо робоче-ядро, яке зможе вантажитися по мережі:

rdev bzImage /dev/nfsroot
mknbi-linux --ip=rom --rootdir=rom bzImage > /tftpboot/lts/linux-2.4.18-ltsp

Далі нам потрібно перейти в директорію, де щойно записано наше робоче-ядро і створити символьне посилання на нього, яке нам буде потрібне в подальшій роботі:

cd /tftpboot/lts
ln -s linux-2.4.18-ltsp vmlinuz.ltsp

От і все. Етап створення нового робочого-ядра для нашого Х-терміналу і його налаштування для завантаження по мережі ми виконали.

Тепер починаємо наш четвертий етап, в якому ми налаштуємо конфігураційні файли DHCP демона. Щоб нам було легше, потрібно з сайту http://www.ltsp.ru завантажити пакет ltsp.ru_core-3.x.x-i386 і встановити його, а потім лише підправити згідно з моїми прикладами, конфігураційні файли, які входять до цього пакету.

Отже, в цьому прикладі використовується DHCP сервер для того, щоб можна було динамічно видавати IP-адреси та параметри мережі нашому Х-терміналу, або будь-якій іншій їх кількості. У своїй роботі я використовую за базову систему RedHat Linux 7.0 і тому нижче подані файли я використав з цього дистрибутива.

  • dhcpcd-1.3.18.pl8-6
  • dhcp-2.0-12
  • portmap-4.0-29
  • tftp-server-0.17-5
  • nfs-utils-0.1.9.1-7

Щоб NFS демон міг працювати на нашому термінальному сервері, в ядро повинна бути включена підтримка клієнтів NFS та можливість його роботи як сервера NFS.

А тепер наведу обіцяні конфігураційні файли разом з директоріями, де вони знаходяться по замовчуванню:

/etc/dhcp.conf
default-lease-time            21600;
max-lease-time                21600;

option subnet-mask            255.255.255.0;
option broadcast-address      192.168.0.255;
option routers                192.168.0.254; 
  # вказується IP-адресу термінального сервера (подивіться, що записано у файлі hosts)
option domain-name-servers    192.168.0.254;
option domain-name            "myhome.net"; 
  # вказуєте назву свого домену, (це може бути будь-яка назва яку собі придумаєте.
  # Але у всіх файлах вона повинна бути одинакова.

option root-path              "192.168.0.254:/opt/ltsp/i386";

shared-network WORKSTATIONS {
  subnet 192.168.0.0 netmask 255.255.255.0 {
  }
}

group {
  use-host-decl-names   on;
  option log-servers    192.168.0.254;

  host xterminal {
    hardware ethernet   00:50:FC:20:D8:99; 
  # ви повинні вказати MAC-адрес Вашої мережевої карти.

    fixed-address       192.168.0.2; 
  # вказуєте IP-адресу яку ви присвоюєте для даної MAC-адреси.

    filename            "/tftpboot/lts/vmlinuz.ltsp";
  }
}

/etc/exports – цей файл потрібний демону NFS, який відповідає за експорт вашої файлової системи на Х-термінал (дуже уважно скопіюйте текст, всі пусті місця це пробіли і ні в якому разі символи табуляції)

/opt/ltsp/i386 192.168.0.0/255.255.255.0(ro,no_root_squash)
/var/opt/ltsp/swapfiles 192.168.0.0/255.255.255.0(rw,no_root_squash)

/etc/hosts – відповідає за перетворення символьних імен в числову IP-адресу.

127.0.0.1 localhost
192.168.0.254 safari safari.myhome.net - це IP-адрес вашого термінального сервера
192.168.0.2 xterminal xterminal.myhome.net

/etc/hosts.allow

bootpd:    0.0.0.0
in.tftpd:  192.168.0.
portmap:   192.168.0.

/etc/xinetd.d/tftp – створіть або відредагуйте цей файл. Він потрібен демону tftp для передачі робочого-ядра на Х-термінал через мережу.

service tftp
{
 disable         = no
 socket_type     = dgram
 wait            = yes
 user            = nobody
 log_on_success += USERID
 log_on_failure += USERID
 server          = /usr/sbin/in.tftpd
 server_args     = /tftpboot
}

Ось приблизно так має виглядати вміст каталога /etc/rc5.d та /etc/rc3.d.

S10network
S20portmap
S25nfslock
S30nfs
S35dhcpd
S40random
S45xinetd
S90xfs

Якщо у виводі команди netstat -a присутні нижченаведені рядки, значить все о’кей, якщо ні — шукайте, який сервер і з якої причини не запускається.

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:sunrpc                *:*                      LISTEN    
udp        0      0 *:xdmcp                 *:*                                 
udp        0      0 *:tftp                  *:*                                 
udp        0      0 *:nfsd                  *:*                                 
udp        0      0 *:sunrpc                *:*                                

А наступною командою можете взнати, чи працюють сервери NFS та RPC:

rpcinfo -p

Вивід цієї команди повинен виглядати приблизно так:

  program vers proto   port
   100000    2   tcp    111  portmapper
   100000    2   udp    111  portmapper
   100024    1   udp   1024  status
   100024    1   tcp   1024  status
   100011    1   udp   1011  rquotad
   100011    2   udp   1011  rquotad
   100005    1   udp   1025  mountd
   100005    1   tcp   1025  mountd
   100005    2   udp   1025  mountd
   100005    2   tcp   1025  mountd
   100003    2   udp   2049  nfs
   100021    1   udp   1027  nlockmgr
   100021    3   udp   1027  nlockmgr

Після всіх перевірок необхідно у файлі /etc/inittab замінити рядок

id:3:initdefault:

на

id:5:initdefault:

Це потрібно зробити для того, щоб ми могли завантажувати програму, яка буде відповідати за авторизацію користувачів Х-терміналу і запуск Х-сервера.

Тепер перевірте файл /etc/X11/xdm/Xaccess, в якому розкоментуйте подану нижче стрічку, яка відповідає за можливість підключення до Х-серверу, що працює на вашому термінальному сервері.

* # any host can get a login window

А от наступну стрічку у файлаі /etc/X11/xdm/Xservers потрібно навпаки закоментувати, бо інакше ви постійно будете завантажуватися в графічне середовище X Window:

# :0 local /usr/X11R6/bin/X

Остання зміна є дуже важливою, оскільки її пропуск зможе порушити завантажуваність вашого термінального сервера, якщо ви звикли працювати в консольному режимі. Якщо ви постійно працюєте в середовищі X Window, тоді цю зміну можете пропустити.

Тепер ви маєте змогу знову перевантажити ваш Х-термінал. Якщо все працює, після розпізнавання термінал-ядром вашої мережевої карти ви зможете побачити наступну інформацію:

Searching for server (DHCP)...
Me: 192.168.0.2, Server: 192.168.0.254, Gateway: 192.168.0.254
Loading 192.168.0.254:/tftpboot/lts/vmlinuz.ltsp

А коли запити опрацьовані, то tftp-сервер передасть на Х-термінал робоче-ядро, яке через лічені секунди видаватиме на екран Х-терміналу знайомі вам інформаційні повідомлення про стан завантажування.

Ну от, основна частина роботи зі створення Х-терміналу зроблена. Залишилася одна, але найважча частина — вибір Х-сервера для вашої відеокарти. Вам потрібно прочитати документацію на Х-сервери, які ідуть у поставці вашого дистрибутиву Linux і визначитися, який з них вам підходить, і саме його записати у директорію /opt/ltsp/i386/usr/X11R6/bin.

Подаю приклад конфігураційного файлу, без якого ваш Х-сервер не зможе запуститися на Х-терміналі. В цьому файлі можете лише поміняти пристрій, який описує вашу мишку, назву вашої відеокарти та монітору.

/opt/ltsp/i386/etc/XF86Config
Section "Files"
  RgbPath   "/usr/X11R6/lib/X11/rgb"
  FontPath  "/usr/X11R6/lib/X11/fonts/misc:unscaled"
  FontPath  "/usr/X11R6/lib/X11/fonts/cyrillic"
  FontPath  "/usr/X11R6/lib/X11/fonts/truetype"
EndSection

Section "Keyboard"
  Protocol    "Standard"
  AutoRepeat  500 5
  LeftAlt     Meta
  RightAlt    Meta
  ScrollLock  Compose
  RightCtl    Control
  XkbDisable  
EndSection

Section "Pointer"
  Device       "/dev/mouse"
  Protocol     "Microsoft"
  ZAxisMapping 4 5
EndSection

Section "Monitor"
  Identifier  "S/M 400b"
  VendorName  "Unknown"
  ModelName   "Unknown"

  HorizSync   30-69
  VertRefresh 50-160

  Modeline "800x600"  40  800  840  968 1056  600  601  605  628 +hsync +vsync
  Modeline "1024x768" 65 1024 1032 1176 1344  768  771  777  806 -hsync -vsync
EndSection

Section "Device"
  Identifier  "Trident 9440"
  VendorName  "Unknown"
  BoardName   "Unknown"
  VideoRam    1024
EndSection

Section "Screen"
 # Зверніть увагу на назву Х-сервера, який буде керувати Вашою відеокартою і
 # вкажіть той, який підтримує саме Вашу відеокарту.
 Driver      "svga"

 Device      "Trident 9440"
 Monitor     "S/M 400b"

 Subsection "Display"
   Depth       8
   Modes       "800x600" "1024x768"
   ViewPort    0 0
   Virtual     1024 768
 EndSubsection
EndSection


/opt/ltsp/i386/etc/lts.conf
[Default]
  SERVER             = 192.168.0.254
  XSERVER            = auto
  USE_XFS            = N
  LOCAL_APPS         = N
  RUNLEVEL           = 5

[xterminal]

XSERVER = XF86_SVGA LOCAL_APPS = N USE_NFS_SWAP = N SWAPFILE_SIZE = 48m RUNLEVEL = 5

Каталоги, котрі подано нижче, та їх вміст можете взяти з термінального сервера і переписати в каталог /opt/ltsp/i386/usr:

/opt/ltsp/i386/usr/X11R6:
drwxr-xr-x    2 root     root         4096 Oct 15 12:06 bin
drwxr-xr-x    4 root     root         4096 Oct 15 12:52 lib
drwxr-xr-x    4 root     root         4096 Oct 15 12:06 man

/opt/ltsp/i386/usr/X11R6/bin:
-rwxr-xr-x    1 2874     2878      3350364 Aug 20  2000 XF86_SVGA

Це файл Х-сервера, який відповідає за роботу дуже багатьох старих відеокарт. Як бачите з прикладу, на моєму Х-терміналі знаходиться старенька відеокарта Trident 9440, яка якраз підтримується цим сервером, але у вашому випадку назва сервера може змінитися.

/opt/ltsp/i386/usr/X11R6/lib:
drwxr-xr-x    5 root     root         4096 Oct 15 13:11 X11

/opt/ltsp/i386/usr/X11R6/lib/X11:
drwxr-xr-x    2 root     root         4096 Oct 10 12:15 app-defaults
drwxr-xr-x    5 root     root         4096 Oct 15 13:04 fonts
-r--r--r--    1 root     root        17371 Aug 13 19:02 rgb.txt
drwxr-xr-x    2 root     root         4096 Aug 13 19:03 xserver

/opt/ltsp/i386/usr/X11R6/lib/X11/app-defaults:
-r--r--r--    1 root     root         4527 Aug 26 15:00 XTerm
-r--r--r--    1 root     root          828 Aug 13 19:02 XTerm-color
-r--r--r--    1 root     root         1035 Sep 13 20:46 XXkb

/opt/ltsp/i386/usr/X11R6/lib/X11/fonts:
drwxr-xr-x    2 root     root         4096 Oct  1 13:41 misc

/opt/ltsp/i386/usr/X11R6/lib/X11/fonts/misc:

(вміст цього каталогу повністю відповідає вмісту термінального сервера)

/opt/ltsp/i386/usr/X11R6/lib/X11/xserver:
-r--r--r--    1 root     root         2925 Aug 13 19:03 SecurityPolicy

/opt/ltsp/i386/usr/X11R6/lib/modules:

(вміст цього каталогу повністю відповідає вмісту термінального сервера)

/opt/ltsp/dev

Повинен містити наступні файли, символьне посилання mouse може посилатися на пристрій psaux, якщо ви користуєтеся PS/2 мишкою. Ці файли можете взяти з відповідної директорії термінального сервера.

crw--w--w-    1 root     root       5,   1 Nov  1 15:52 console
crw-r-----    1 root     kmem       1,   2 Nov  1 16:06 kmem
brw-rw----    1 root     disk       7,   0 Nov  1 16:07 loop0
crw-r-----    1 root     kmem       1,   1 Nov  1 16:06 mem
lrwxrwxrwx    1 root     root            5 Nov  1 16:11 mouse -> ttyS0
crw-rw----    1 root     root      10,   1 Nov  1 15:53 psaux
brw-rw----    1 root     disk       1,   1 Nov  1 15:53 ram1
crw-------    1 root     root       4,   0 Nov  1 16:05 tty0
crw--w----    1 root     tty        4,   1 Nov  1 16:05 tty1
crw-------    1 root     root       4,   2 Nov  1 16:05 tty2
crw-------    1 root     root       4,   3 Nov  1 16:05 tty3
crw-------    1 root     root       4,   4 Nov  1 16:05 tty4
crw-------    1 root     root       4,   5 Nov  1 16:05 tty5
crw-r-----    1 root     uucp       4,  64 Nov  1 15:53 ttyS0
crw-rw----    1 root     uucp       4,  65 Nov  1 15:53 ttyS1

Замініть стрічки в файлі /opt/ltsp/i386/etc/rc.local

/sbin/devfsd /dev

на

# /sbin/devfsd /dev

та

/bin/mount -n /dev/ram1 /tmp

на

/bin/mount -t ext2 /dev/ram1 /tmp

От і все. Після завантаження Х-терміналу ви повинні через 2-3 секунди побачити запрошення на авторизацію з термінального серверу, якщо ви його пройдете, то потрапите у віконний менеджер twm, а далі все, що ви будете виконувати, виконуватиметься на вашому термінальному сервері.

Звичайно ця стаття не може претендувати на дуже детальний посібник із створення Х-терміналів, але я намагався зібрати всю інформацію в тій послідовності, в якій вона буде потрібна під час створення Х-терміналу, а також, звичайно, постарався описати декілька підводних каменів, які не завжди чітко описані у відповідній літературі.