У цій статті я постараюся розказати вам про те, як ви можете зі старих і вже по суті нікому непотрібних комп’ютерів створити додаткові робочі місця.
Подаю характеристики комп’ютерів, з якими я проводив експерименти:
Термінальний сервер:
Celeron Tualatin 1100МГц, RAM 256МБ, HDD 40GB, розділ під віртуальну пам’ять 500MB, мережева карта D-Link 583TX на базі чіпа RealTek 8139. Ключову роль тут відіграє об’єм оперативної пам’яті, тому якщо ви плануєте декілька терміналів з офісними пакетами, то поставте побільше пам’яті.
Термінал клієнта:
Pentium 120МГц, RAM 24МБ, мережева карта (клон RealTek 8139), дисковод.
Коли ви вирішили поекспериментувати з термінальними рішеннями вдома, і будете використовувати лише два комп’ютери, то мережа може складатися з перехресного кабеля. Ну а якщо терміналів має бути більше, то це повинна бути повноцінна мережа з концентратором або комутатором. Принцип вибору мережі полягає на принципі: чим швидше, тим краще. Тому беремо за основу мережу з швидкодією 100Мбіт.
Етапи створення Х-термінала:
- Створення дискети з термінал-ядром для завантаження Х-термінала.
- Створення робочого-ядра для роботи на Х-терміналі.
- Підготовка робочого-ядра для його завантаження на Х-термінал через мережу.
- Налаштування роботи DHCP демона для видачі робочого-ядра Х-терміналу
- Налаштування конфігураційних файлів Х-термінала та термінального сервера
На першому етапі є два варіанти:
- Ви маєте суперову мережеву карточку з BootROM і ця карточка прекрасно розпізнається ядром лінукса. Цей варіант буде дуже подібним до другого варіанта за винятком того, що термінал-ядро завантажується не на дискету, а в BootROM мережевої карти. Тому вам потрібно буде мати програму, яка зможе записати термінал-ядро у вашу мережеву карту, після чого ви можете переходити до другого етапу настройки Х-терміналу.
- ви маєте стандартну мережеву карточку за 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, а далі все, що ви будете виконувати, виконуватиметься на вашому термінальному сервері.
Звичайно ця стаття не може претендувати на дуже детальний посібник із створення Х-терміналів, але я намагався зібрати всю інформацію в тій послідовності, в якій вона буде потрібна під час створення Х-терміналу, а також, звичайно, постарався описати декілька підводних каменів, які не завжди чітко описані у відповідній літературі.