Pull to refresh

RDP (не)тонкий клиент c Linux на базе Неттопов (Nvidia ION, Intel Atom)

Reading time 3 min
Views 17K
В сегодняшний век повсеместной виртуализации возникает необходимость экономить на всем. Наиболее значимые для любого системного администратора сущности, это:
  • Время (затраты на обслуживание системы)
  • Железо (различные сбои, потеря производительности, устаревание)
  • ПО (лицензионная составляющая, защита от вирусов, централизация управления приложениями)

В своей статье я рассматриваю реализацию (не)тонкого клиента на базе ОС Linux, как прослойке между аппаратной составляющей и привычным интерфейсом ОС Windows.
(Не)тонкий клиент, в моем понимании, это дистрибутив ОС Linux обладающий следующими свойствами:
  • достаточно большой набор компонентов для загрузки; не подходит для загрузки по сети
  • достаточно маленький набор компонентов; не рационально устанавливать жесткий диск


В качестве платформы для реализации я выбрал Nvidia ION ввиду:
  • Производительный процессор
  • Производительная графика (в рамках неттопов)
  • Малошумный (есть варианты с активным и пассивным охлаждением)
  • Занимает мало места (есть возможность крепления на монитор)
  • Достаточно надежный (ломаться особо нечему)

Также мне понадобится один USB-flash накопитель на 4Гб, который как раз и будет заменой жесткого диска.

Дистрибутив Linux для установки был выбран OpenSUSE. На текущий момент это версия 12.2

Ну, приступим…

Про замечательный проект Suse Studio писали много. С помощью него мы будем создавать конечное решение терминального (не)тонкого клиента:

Создаем новое решение:



Как видно, выбор богатый:



Нам нужно самое легкое решение, поэтому используем шаблон: «минимальная графическая система с оболочкой IceWM».



Теперь можно обустраивать наш дистрибутив!

Software

Данное решение «из коробки» уже содержит необходимые компоненты для запуска графической системы и «легкого» оконного менеджера.
Если все оставить по умолчанию, то может потребоваться достаточно много усилий, чтобы настроить эту систему (видео драйвер, сетевые настройки и т.д.). Мне же нужно решение: поставил, адрес вбил и забыл.

Добавляем следующие компоненты (зависимые пакеты добавятся автоматически):
  • freerdp (для любителей rdesktop, можно установить его)
  • acpi, acpid (для корректной работы кнопки питания)
  • mc (по желанию)

Добавляем из репозитария Nvidia драйвера для видеокарт Nvidia ION:
  • x11-video-nvidiaG02
  • nvidia-gfxG02-kmp-default


Добавляем из репозитария драйвера для видеокарт Intel:
  • xorg-x11-driver-video-intel-legacy


(Отличная статья какой видео драйвер Nvidia выбрать)

Удаляем:
  • nouveau (драйвер для графических карт Nvidia с открытым исходным кодом)


Configuration

General: Обязательно меняем пароль root и указываем нашего дефалтного пользователя.

Startup: Графический вход

Desktop: с автоматических входом нашего пользователя

Здесь можно задать параметры при загрузке, что мы и сделаем:

В свете версии 12.2 устарело:

setkxbmap -model pc104 -layout us,ru -variant,
наша клавиатура имеет 104 кнопки с 2-мя раскладками

setkxbmap -option grp:alt_shift_toggle
и переключаться она будет по alt+shift


(sleep 3; xfreerdp -u domain\\user -f server_ip &)

чтобы у пользователя не было желания начать изучать линукс
задержка необходима в случае получения ip-адреса по DHCP, icewm иногда быстрее прогружается.
(или rdesktop -k en-us -u domain\\user -f server_ip)

echo 'ShowTaskBar=0' >> ~/.icewm/preferences

прячем панель задач (более полно тут)

Для особых позльзовательских настроек, можно прописать дополнительные команды в любом кол-ве.

Для настроек первого запуска, идем в следующую секцию:

Scripts

В секции First Boot добавляем пару строчек:
OpenSuse 12.1
grep -rl 'timeout 10' /boot/grub/ | xargs perl -i -pe "s/timeout 10/timeout 0/g;"

OpenSuse 12.2 (Grub2)
grep -rl 'GRUB_TIMEOUT=10' /etc/default/grub | xargs perl -i -pe "s/GRUB_TIMEOUT=10/GRUB_TIMEOUT=0/g;"

ставим таймаут выбора вариантов загрузки ОС 0 секунд

echo '* * * * * if ! ps -U tux | grep xfreerdp && ps -U tux | grep icewm; then perl /home/rdp_conn_cnt;  fi' >> /var/spool/cron/tabs/tux

Добавляем нашему пользователю (который случайно может завершить сессию RDP, автостарт клиента RDP). По желанию можно сделать более маленький промежуток времени.

chmod u+s /sbin/shutdown

Пользоваляем нашему пользователю выключать компьютер

chmod u+s /sbin/ipconfig

и смотреть ip

Files

Собственно сюда я загрузил свой простенький скрипт, который считает кол-во попыток запуска RDP, когда пользователь ничего не ввел. По истечении кол-ва попыток происходит shutdown системы.
#!/usr/bin/perl
$counter = 0;
if (-e "/tmp/rdp_cnt.tmp"){
  open (FN, "/tmp/rdp_cnt.tmp") or die "$_";
  $cnttext=<FN>;
  close FN;
  $counter = $1 if ($cnttext =~ /(\d+)/);
}
if ($counter++ < 10){
  system("export DISPLAY=:0 && xfreerdp -u domain\\\\user -f server_ip");
  open (FN, ">/tmp/rdp_cnt.tmp") or die "$_";
  print FN $counter."\n";
  close FN;
}
else {
  unlink("/tmp/rdp_cnt.tmp") if (-e "/tmp/rdp_cnt.tmp");
  system ("systemctl poweroff");
}


Build

К построению образа готовы!
Делаем Preload ISO (.iso) и можно ставить.
Tags:
Hubs:
+3
Comments 12
Comments Comments 12

Articles