Тонкие клиенты

Создание тонкого клиента для работы с терминальным сервером windows (RDP) на дистрибутиве ALT Linux

1. Берем любой легковесный дистрибутив АЛЬта, можно simple, можно серверный, устанавливаем, настраиваем сеть, настраиваем apt, обновляемся до бранча, я на данный момент использую p5, ставим xorg, если еще не стоит.

2. ставим следующие пакеты:

# apt-get install agetty rdesktop SysVinit-usermode

# apt-get install dialog (наверняка уже стоит, но мало ли)

3. Пишем маленькую программку на Си, компилим, обозвав ее autol

int main() {
  execlp( "login", "login", "-f", "terminal", 0);
}

Бинарик для пользователя terminal прилагаю сейчас. Копируем его в /usr/bin

само собой делаем исполняемым.

4. правим /etc/inittab

грузимся в init 3 по умолчанию

id:3:initdefault:

и для первой консоли пишем

1:2345:respawn:/sbin/agetty -n -l /usr/bin/autol 38400 tty1

5. Создаем пользователя

# useradd terminal
# passwd какой-то пароль

Вот. теперь пользователь terminal будет автоматически логиниться в систему на 3-м уровне.

6. в .bash_profile пользователя добавляем строки

export DISPLAY=:0
./terminal
exit

т.е. установить переменную DISPLAY, запустить скрипт terminal и после завершения скрипта выйти (но он опять зайдет т.к. настроен автологин ;-))

И так сам скрипт terminal

#!/bin/sh
addr=`cat ts.addr`
user=`cat ts.user`
echo "Connect to '$addr' ..."
#/usr/bin/X &
#sleep 2 #эта задержка нужна на некоторых видео драйверах, возможно будет работать #и без паузы.
#/usr/bin/rdesktop -f -z -E -u $user $addr
#killall X
#sleep 2

/usr/bin/xinit /usr/bin/xfreerdp -f -u $user $addr #теперь я делаю так

clear
DIALOG=${DIALOG=dialog}
tempfile=`mktemp 2>/dev/null` || tempfile=/tmp/test$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --clear --title "TERMINAL CLIENT" \
--menu "" 10 40 2 \
"Connect to Terminal Server" "" \
"PowerOff" "" 2> $tempfile
retval=$?
choice=`cat $tempfile`
case $retval in
0)
if [ "$choice" == "Connect to Terminal Server" ];then
{
exit;
}
fi
if [ "$choice" == "PowerOff" ];then
{
/usr/bin/poweroff
}
fi
if [ "$choice" == "SetUp" ];then
{
$DIALOG --title "SetUp Terminal Server" --clear \
--inputbox "Input Terminal Server Address" 8 51 2> ts.addr
$DIALOG --title "SetUp Username" --clear \
--inputbox "Input default user name" 8 51 2> ts.user
}
fi
;;
1)
echo "Отказ от ввода."
exit;
;;
255)
echo "Нажата клавиша ESC."
exit;
;;
esac

в домашнюю папку пользователя следует положить еще два файла, один это ts.addr где прописывается адрес терминального сервера, другой ts.user, где прописывается имя пользователя, которое будет использовано при входе в сервер терминалов.

После загрузки осуществляется попытка подключиться к серверу, после отключения от него или при неудачной попытке откроется меню с двумя пунктами, 1-й это подключиться к серверу, 2-й выключить компьютер.

Для красоты стоит настроить bootsplash с логотипом своей компании, это описано тут: bootsplash

Загрузка по сети пока не рассматривается.

Устраняем проблемы с некоторыми клавишами в rdesktop

Правим /usr/share/rdesktop/keymaps/en-us

include common
map 0x409
asciicircum 0x07 shift
apostrophe 0x28
grave 0x29
asciitilde 0x29 shift
bar 0x2b shift
less 0x33 shift
greater 0x34 shift

Добавления от 14.03.2011

1. rdesktop уже устарел, поэтому лучше использовать xfreerdp, в нем нет проблем с кодировками с залипанием клавиши alt и проблем с 2008-м сервером.

2. Запуск в скрипте лучше переделать через xinit, так отрабатывает быстрее

В общем скрипт изменен.