[ALTSP] Интеграция NX в ALTSP

Mike Grozak mike at tversu.ru
Thu Jan 29 11:12:40 MSK 2009


По договорённости с г-ном Михаилом Шигориным взялся оформить 
документацию по данному процессу. Думаю, никто не будет против, если мы 
это обсудим сначала здесь, а потом выложим в вики результат?

Весь процесс состоит из 5 частей.

0. Установка open-source NX-компонент.
# apt-get install nx

1. Установка сервера freenx - за это отвечает пакет freenx-server версии 
0.7.4 в репозитариях веток 4.0, 4.1 и сизифа.
# apt-get install freenx-server

Далее требуется настроить сам nxserver, для этого запустите команду:

# nxsetup --install --setup-nomachine-key


При этом будет установлен ключ "по умолчанию", который очень давно 
используется в продуктах компании NoMachine, что само по себе является 
небезопасным. Так что рекомендуется генерировать свой ключ (при 
установке без опции --setup-nomachine-key у вас спросят, генерировать 
или нет) и скармливать его клиентам.

Нужно проверить, запущен ли сервер, и если нет - запустить

# nxserver --status
# nxserver --start

2. Все настроки nxserver хранятся в /etc/nxserver/node.conf. Файл 
снабжён богатыми комментариями, и понять его, на мой взгляд, не составит 
труда. Настройки "по умолчанию" достаточно работоспособны.

3. Установка nxclient в чрут.
а) Либо при сборке клиенсткого чрута указываем этот пакет в 
EARLY_PACKAGES - nxclient.
б) Либо в чруте аптом или руками ставим его.

# chroot $ltsp_chroot
# apt-get install nxclient
или
# rpm -i nxclient-<...>.rpm

Пакет от NoMachine требует либ libcups, libaudiofile, libtiff, libjpeg и 
libpng, насколько я помню.

4. Установка скриптов nx сессий
Мною предполагается, что при старте иксов на тонком клиенте ему будет 
выдаваться окно NX-клиента с запросом имени пользователя и пароля, и 
больше ничего. При завершении сессии клиенту снова выдаётся окно NX-клиента.
Скрипты запуска сессии хранятся в 
/var/lib/ltsp/i586/usr/share/ltsp/screen.d. Если вы пропишите 
SCREEN_07=nx, то запустится скрипт 
/var/lib/ltsp/i586/usr/share/ltsp/screen.d/nx.

Соответственно, кидаем в эту директорию следующие скрипты:
а) nx - не самый лучший скрипт, был содран с rdp, как не сложно 
догадаться - приветствуются модификации и улучшения:
---------------------------------------------------------------------------------------------------------------------
#!/bin/sh

. /usr/share/ltsp/ltsp_config

tty=$(tty)
case "$tty" in
         /dev/tty*) # with udev (2.6 kernel)
         ttynum=${tty#/dev/tty}
         ;;
     /dev/vc/*) # with devfs (2.4 kernel)
         ttynum=${tty#/dev/vc/}
         ;;
esac

displaynum=$(($ttynum - 1))

MAX_TIMEOUT=30
MAX_COUNT=5
COUNTER=0
FLAG=1

ARGS=""

if [ -n "${X_CONF}" ]; then
     ARGS="${ARGS} -config ${X_CONF}"
fi

while [ $FLAG -ne 0 ]; do
     START_TIME=$(date +%s)
     NX_OUTPUT=`xinit /usr/share/ltsp/screen.d/start_nx -- :$displaynum 
vt${ttynum} ${ARGS} 2>&1 | grep '^ERROR:'`
     FINISH_TIME=$(date +%s)
     TIMEOUT=$((FINISH_TIME-START_TIME))

     if [ $TIMEOUT -le $MAX_TIMEOUT ]; then
         if [ $COUNTER -ge $MAX_COUNT ]; then
             COUNTER=0
             Message nxclient "$NX_OUTPUT" || FLAG=0
         else
             COUNTER=$((COUNTER+1))
         fi
     else
         COUNTER=0
     fi
done
---------------------------------------------------------------------------------------------------------------------

б) start_nx:
---------------------------------------------------------------------------------------------------------------------
#!/bin/sh
# set the background
/usr/bin/xsetroot -solid black

# set some variables
export NXDIR=/usr/NX
export HOME=/tmp

# start the window manager
openbox &

# start nxclient
while true; do
     # start nx client with predefined session
     $NXDIR/bin/nxclient --session "/etc/X11/terminal.nxs"
     # sleep until nxclient(nxssh) is running
     while (ps -C nxssh > /dev/null); do
         sleep 1
     done
done
---------------------------------------------------------------------------------------------------------------------

где terminal.nxs - конфиг для сессии по вкусу. Именно в нём, кстати, 
можно указать сгенерённый ключ. Думаю, добавлю обработку переменной - 
NXCONF, что бы можно было назначать разным терминалам разные сессии.

Собственно говоря, вся дока. Прошу критиковать и корректировать.

---
WBR, Mike Grozak, TvSU IC Dep


More information about the Ltsp-server mailing list