Содержание

Ключевые слова: Х-терминал, linux, LTSP, Linux Terminal Server Project, терминальный linux-сервер, бездисковая станция, ПК без жесткого диска, использование старых компьютеров, diskless workstation, thin client, asplinux, использование Linux в офисе, X-terminal

Локальный запуск приложений (продолжение)

Когда настройка сервера NIS успешно закончена, можно непосредственно приступать к запуску локальных приложений на терминале. Но перед этим, необходимо установить все их компоненты в дерево каталогов /opt/ltsp/i386/. На официальном сайте проекта LTSP (http://www.ltsp.org) можно найти специально собранный пакет с браузером Netscape Navigator (ltsp_local_netscape-3.0.0-0.i386.rpm) для локального запуска.

Если вам нужно запустить локально совсем другую программу, необходимо скопировать принадлежащие ей файлы в директорию /opt/ltsp/i386. Кроме этого, вашей программе могут потребоваться дополнительные разделяемые библиотеки, поэтому необходимо найти и также скопировать их в этот каталог. Понять вышесказанное лучше на конкретном примере. Предположим, что нам захотелось локально запустить медиа-плеер xmms. Перед определением файлов, из которых состоит программный продукт, важно помнить, что они должны быть скомпилированы для архитектуры Х-терминала. Например, если на сервере установлен пакет с архитектурой i686, то он не сможет запуститься на Х-терминалах собранных на базе Intel Pentium и Intel 486. Поэтому целесообразно запускать локально, только пакеты для архитектуры i386.

Вернемся к xmms. Для того, чтобы узнать, какие файлы входят в его состав, выполним команду с такими параметрами (вывод приведен с сокращениями):

$ rpm -q --filesbypkg xmms
xmms                      /usr/bin/wmxmms
xmms                      /usr/bin/xmms
xmms                      /usr/lib/libxmms.so.1
xmms                      /usr/lib/libxmms.so.1.2.1
xmms                      /usr/lib/xmms
xmms                      /usr/lib/xmms/Effect
xmms                      /usr/lib/xmms/Effect/libecho.so
xmms                      /usr/lib/xmms/Effect/libstereo.so
xmms                      /usr/lib/xmms/Effect/libvoice.so
xmms                      /usr/lib/xmms/General
xmms                      /usr/lib/xmms/General/libir.so
xmms                      /usr/lib/xmms/General/libjoy.so
xmms                      /usr/lib/xmms/General/libsong_change.so
xmms                      /usr/lib/xmms/Input
xmms                      /usr/lib/xmms/Input/libcdaudio.so
xmms                      /usr/lib/xmms/Input/libidcin.so
xmms                      /usr/lib/xmms/Input/libmikmod.so
xmms                      /usr/lib/xmms/Input/libmpg123.so
xmms                      /usr/lib/xmms/Input/libtonegen.so
xmms                      /usr/lib/xmms/Input/libvorbis.so
xmms                      /usr/lib/xmms/Input/libwav.so
xmms                      /usr/lib/xmms/Output
xmms                      /usr/lib/xmms/Output/libOSS.so
xmms                      /usr/lib/xmms/Output/libartsout.a
xmms                      /usr/lib/xmms/Output/libartsout.so
xmms                      /usr/lib/xmms/Output/libartsout.so.0
xmms                      /usr/lib/xmms/Output/libartsout.so.0.0.0
xmms                      /usr/lib/xmms/Output/libdisk_writer.so
xmms                      /usr/lib/xmms/Output/libesdout.so
xmms                      /usr/lib/xmms/Visualization
xmms                      /usr/lib/xmms/Visualization/libbscope.so
xmms                      /usr/lib/xmms/Visualization/libogl_spectrum.so
xmms                      /usr/lib/xmms/Visualization/libsanalyzer.so
xmms                      /usr/share/applications/redhat-audio-player.desktop
xmms                      /usr/share/doc/xmms-1.2.7
xmms                      /usr/share/doc/xmms-1.2.7/AUTHORS
xmms                      /usr/share/doc/xmms-1.2.7/COPYING
xmms                      /usr/share/doc/xmms-1.2.7/ChangeLog
xmms                      /usr/share/doc/xmms-1.2.7/FAQ
xmms                      /usr/share/doc/xmms-1.2.7/INSTALL
xmms                      /usr/share/doc/xmms-1.2.7/NEWS
xmms                      /usr/share/doc/xmms-1.2.7/README
xmms                      /usr/share/doc/xmms-1.2.7/README.ESD
xmms                      /usr/share/doc/xmms-1.2.7/TODO
xmms                      /usr/share/locale/af/LC_MESSAGES/xmms.mo
...
xmms                      /usr/share/locale/wa/LC_MESSAGES/xmms.mo
xmms                      /usr/share/locale/zh_CN.GB2312/LC_MESSAGES/xmms.mo
xmms                      /usr/share/locale/zh_TW/LC_MESSAGES/xmms.mo
xmms                      /usr/share/man/man1/wmxmms.1.gz
xmms                      /usr/share/man/man1/xmms.1.gz
xmms                      /usr/share/pixmaps/mini/xmms_mini.xpm
xmms                      /usr/share/pixmaps/xmms.xpm
xmms                      /usr/share/pixmaps/xmms_logo.xpm
xmms                      /usr/share/xmms
xmms                      /usr/share/xmms/wmxmms.xpm

Если рассмотреть этот список повнимательней, то можно заметить, что скопировать нужно только файлы:

/usr/bin/wmxmms
/usr/bin/xmms
/usr/lib/libxmms.so.1
/usr/lib/libxmms.so.1.2.1
/usr/share/pixmaps/mini/xmms_mini.xpm
/usr/share/pixmaps/xmms.xpm
/usr/share/xmms/wmxmms.xpm

А также каталог /usr/lib/xmms. Не следует забывать и про файл локализации данного медиа-проигрывателя. Лично для себя я скопировал файл /usr/share/locale/uk/LC_MESSAGES/xmms.mo.

Теперь настала очередь определить, какими разделяемыми библиотеками пользуется xmms. В этом деле нам поможет такая команда:

$ ldd /usr/bin/xmms
        libdl.so.2 => /lib/libdl.so.2 (0x40027000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x4002b000)
        libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x40039000)
        libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x40043000)
        libxmms.so.1 => /usr/lib/libxmms.so.1 (0x4005a000)
        libgtk-1.2.so.0 => /usr/lib/libgtk-1.2.so.0 (0x40067000)
        libgdk-1.2.so.0 => /usr/lib/libgdk-1.2.so.0 (0x401af000)
        libgmodule-1.2.so.0 => /usr/lib/libgmodule-1.2.so.0 (0x401e7000)
        libgthread-1.2.so.0 => /usr/lib/libgthread-1.2.so.0 (0x401ea000)
        libglib-1.2.so.0 => /usr/lib/libglib-1.2.so.0 (0x401ee000)
        libXi.so.6 => /usr/X11R6/lib/libXi.so.6 (0x40213000)
        libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x4021b000)
        libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40229000)
        libm.so.6 => /lib/tls/libm.so.6 (0x40308000)
        libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Как видно из ответа команды ldd, необходимо проверить дополнительно наличие 15 файлов (файл libxmms.so.1 был нами уже успешно скопирован).

После копирования всех необходимых файлов для локального запуска, на последней стадии подготовки нужно создать специальный сценарий запуска локального приложения. Необходимость в написании такого сценария вызвана тем, что пользователь Х-терминала работает в среде сервера, который ничего не знает о локальной среде Х-терминала. Поэтому, в сценарии для удаленного запуска используется команда rsh. Например, для локального запуска xmms необходимо написать сценарий следующего содержания:

HOST=`echo $DISPLAY | awk -F: '{ print $1 }'`
rsh ${HOST} /usr/bin/xmms -display ${DISPLAY}

В первой строке сценария запуска локального приложения мы получаем адрес Х-терминала, в во второй строке используем команду rsh для непосредственно удаленного запуска.

Некоторые программы требуют перед запуском установки определенных значений переменных окружения. Например, для локального запуска браузера Netscape Navigator применяется такой сценарий:

HOST=`echo $DISPLAY | awk -F: '{ print $1 }'`
rsh ${HOST} MOZILLA_HOME=/usr/local/netscape \
       /usr/local/netscape/netscape -display ${DISPLAY}

Конечно, для того, чтобы воспользоваться командой rsh, необходимо установить на сервере содержащий ее пакет. Сделать это можно при помощи такой команды:

# rpm -ihv /mnt/cdrom/ASPLinux/RPMS/rsh-0.17-14.i386.rpm
Preparing...                ########################################### [100%]
   1:rsh                    ########################################### [100%]

Вообще, локальный запуск приложений – это довольно интересная возможность более полно использовать ресурсы Х-терминалов. Но пользователей также следует предостеречь от чрезмерного увлечения такими приложениями. Причин этому довольно много. Во-первых, у Х-терминала довольно слабый контроль над операционной системой, которая на нем запущена. Все команды выполняются в среде сервера, а следовательно, если с выполнением локального приложения будет что-то не так, то пользователь вряд ли сможет хоть чем-то помочь. Во-вторых, не все программы удастся запустить локально, а некоторые потребуют от вас выполнить слишком много дополнительных настроек. В-третьих, при построении локальной сети Х-терминалов, рационально исходить из предположения, что их аппаратные ресурсы ограничены, а следовательно далеко не все их них подходят для запуска локальных приложений. В-четвертых, при использовании локального запуска приложений на ограниченном числе Х-терминалов, мы тем самым теряем их универсальность, то есть в сети появляются терминалы с поддержкой локальных приложений и без, что автоматически делает их неодинаковыми для пользователей. И наконец, пятой причиной, осторожного отношения к Х-терминалам следует назвать сложность настройки этого сервиса и его потенциальные проблемы с безопасностью (команда rsh всегда грешила брешами в системе безопасности операционной системы Linux).

Не случайно описание метода запуска локальных приложений было приведено в самом конце этой книги. Лично я посоветовал бы пользователям Х-терминальной среды оставить эти эксперименты на потом. Сначала настроить систему Х-терминалов в обычном режиме, а после, когда все будет работать исправно, попробовать локальный запуск приложений. Как знать, может к тому времени надобность в нем сама отпадет.

А в реальной жизни этим кто-нибудь пользуется?

Авторское право © Сеник Николай, 2004-2006