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

