RDP (не)тонкий клиент c Linux на платформе Nvidia ION

в 17:49, , рубрики: opensuse, Песочница, тонкий клиент, метки: ,

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

  • Время (затраты на обслуживание системы)
  • Железо (различные сбои, потеря производительности, устаревание)
  • ПО (лицензионная составляющая, защита от вирусов, централизация управления приложениями)

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

  • достаточно большой набор компонентов для загрузки; не подходит для загрузки по сети
  • достаточно маленький набор компонентов; не рационально устанавливать жесткий диск


В качестве платформы для реализации я выбрал Nvidia ION ввиду:

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

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

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

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

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

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

RDP (не)тонкий клиент c Linux на платформе Nvidia ION

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

RDP (не)тонкий клиент c Linux на платформе Nvidia ION

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

RDP (не)тонкий клиент c Linux на платформе Nvidia ION

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

Software

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

Добавляем следующие компоненты (зависимые пакеты добавятся автоматически):

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

Добавляем из репозитария Nvidia драйвера для видеокарты:

  • x11-video-nvidiaG02
  • nvidia-gfxG02-kmp-default

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

Удаляем:

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

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

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

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

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

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

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

xfreerdp -u domain\user -f server_ip
чтобы у пользователя не было желания начать изучать линукс
(или rdesktop -k en-us -u domain\user -f server_ip)

echo 'ShowTaskBar=0' >> ~/.icewm/preferences
прячем панель задач (более полно тут)

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

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

Scripts

В секции First Boot добавляем пару строчек:

grep -rl 'timeout 10' /boot/grub/ | xargs perl -i -pe "s/timeout 10/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

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

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) и можно ставить.

Автор: po3dno


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js