Замена cервера терминалов Windows на Linux XRDP

сервер терминалов на Linux XRDP

Мысль о замене сервера терминалов с Windows на Linux пришла мне после расчета стоимости легального владения Windows Terminal обеспечивающим роль терминал сервера. Для реализации поставленной задачи – замены сервера терминалов на Linux, нужно было решить  более суровую задачу – запуск и работу приложения написанного для работы в среде MS Access. Начитавшись отзывов в сети о возможности запуска MS Access в среде Linux, желание запустить в  Linux - Access увеличилось, так как многие утверждали, что работа Access в Linux не возможна, в виду не стабильной работы продукта. Другие мастера без проблем запускали Access под Linux и, судя по всему у них это работало.

В моем случае на сервере терминалов под линукс  должны были заработать следующие продукты:
MSAccess - приложение разработанное для нашей компании
ТрансМенеджер – есть такой софт, для работы с автоперевозками
MSOffice – Word и Excel, основной упор делался на Excel
1C Предприятие – конфигурации - 1СУправляющий, Предприятие и ЗУП
Принтер – печать
Что из этого получилось и почему в конечном итоге от решения я отказался, а настроенный сервер заморозил:
MSAccess очень долго добивался от него работоспособного состояния, в конечном итоге запустил в прослойке wine Access заработал. При работе проявлялись зависания и беспричинный низкий отклик приложения.
ТрансМенеджер эта программу целиком протестировать не успел, но при запуске и работе показывала очень не плохие результаты, думаю, если редактором кода пользоваться только из Windows получилось бы достойная рабочая среда
MSOffice – тут все завелось и работает с «полпинка», горя досталось когда файлы Exсel и Word отказывались после сохранения удалять свои временные файлы начинающиеся с ~ с общего диска примонтированного   smb. Обход проблемы оказался простой нужно было добавить общий диск в список безопасных в настройках безопасности Excel.
1C Предприятие  -  так я после gnome перешел на xlde, при запуске 1С под xlde долго не мог найти окно авторизации, оказалось оно было просто перекрыто первым запускаемым окном 1С. При предоставлении работы с 1С в файловом режиме, другим клиентам на этом же сервере на файлы баз нужно выставить нужные биты прав доступа. Полностью решение протестировать не удалось, но в целом вполне работоспособно, по чувственному опыту работает хуже, чем в MS Windows.
Принтера  - так как у меня все принтера hp, проблем с установкой и печатью не возникло, Cups очень понравился, работать даже приятнее чем из под windows.

Почему я отказался от решения - сервера терминалов на Linux?

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

Ниже описаны шаги-заметки, которые я выполнял при выполнении работы по настройке сервера терминалов под Linux

Сервер терминалов под Linux

1.      Устанавливаем debian 7 без Xorg (иксов), позже с debian ушел на Ubuntu так как поддержка дистрибутива LTS 5 лет
Размечаем диск вручную, максимальный размер отдаем под раздел home – где будут храниться папки и файлы программ для запуска пользователями используя wine
В пункте выбора компонентов для установки выбираем, стандартные утилиты, CUPS, SSH

2.      По умолчанию в xenserver установка проходит с английским языком, то есть русские локали не устанавливаются
После загрузки устанавливаем XenServer tools
mount /dev/xvdd /mnt
cd /mnt/Linux/
./install.sh
reboot
Добавляем русскую локаль UTF8
dpkg-reconfigure locales
logout

Для Ubuntu
В /var/lib/locales/supported.d создать файлы ru, en и local
В файл local
ru_RU.UTF-8 UTF-8
en_US.UTF-8 UTF-8
ru_RU.CP1251 CP1251
en_US.CP1251 CP1251
В файл ru
ru_RU.UTF-8 UTF-8
ru_RU.CP1251 CP1251
В файл en
en_US.UTF-8 UTF-8
en_US.CP1251 CP1251
и выполняем команду
locale-gen
В файле /etc/default/locale (если его нет - создаем)
добавляем строку, в которой указываем кодировку по умолчанию (в данном случае - UTF8):
LANG="ru_RU.UTF-8"
reboot
Настраиваем репозитарии
nano /apt/source.list
я добавил к тому что было строку
deb mirror.yandex.ru/debian wheezy main contrib non-free
Обновляем
apt-get update
apt-get upgrade
Устанавливаем mc, bootlogd, chkconfig, vsftpd
Настраиваем, отключаем ipv6
Запрещаем доступ по ssh root
nano /etc/ssh/sshd_config
Добавляем, исправляем
AddressFamily inet
PermitRootLogin no

меняем 0 на 1 в файле /proc/sys/net/ipv6/conf/all/disable_ipv6
отключаем поддержку ipv6 в sysctl
/etc/sysctl.d/
Для Ubuntu
# IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.all.disable_ipv6=1
Блокируем загрузку модуля ядра
/etc/modprobe.d/blacklist.conf
blacklist /ipv6
/etc/modprobe.d/aliases.conf
alias net-pf-10 ipv6 off
net-pf-10 off
ipv6 off
Запрет привязывать ipv6 адрес к сокету
/etc/sysctl.d/bindv6only.conf
Net.ipv6.bindv6only=0
/proc/sys/net/ipv6/bindv6only
0
Закомментируем все записи относящиеся к ipv6 в файле
/etc/hosts
Отключаем в /etc/netconfig программу rpcbind поддержку  ipv6
Отключаем ipv6 в avahi-daemon use-ipv6=no
chkconfig exim4 off
netstat -tunlp

3.      Устанавливаем и настраиваем ntpd
apt-get install ntp
apt-get install ntpdate
dpkg-reconfigure tzdata

interface ignore ipv6
# Local clock (this is not the localhost address!)
server 127.127.1.0
fudge  127.127.1.0 stratum 10
# The source, where we are receiving the time from
server 192.168.21.5     iburst prefer
driftfile       /var/lib/ntp/ntp.drift
logfile         /var/log/ntp
# ntpsigndsocket  /var/lib/samba/ntp_signd/
# Access control
# Default restriction: Only allow querying time (incl. ms-sntp) from this machine
restrict default kod nomodify notrap nopeer mssntp
# Allow everything from localhost
restrict 127.0.0.1
# Allow that our time source can only provide time and do nothing else
restrict 192.168.21.5   mask 255.255.255.255    nomodify notrap nopeer noquery
# Allow lan mashines to me terminalmst
restrict 192.168.0.0   mask 255.255.0.0    nomodify notrap nopeer
Выполняем
ntpq –p

4.      Настраиваем vsftpd
anonymous_enable=NO
local_enable=YES
write_enable=YES
#dirmessage_enable=YES

5.      Устанавливаем графическйи сервер Иксы
aptitude install x-window-system

6.      Устанавливаем и настраиваем сервер VNC, позже необходимость в этих шагах отпала в связи с работой xrdp, перехода на xlde
С целью проверки работоспособности иксов, так как реально дисплея в системе не существует, а xenserver его не эмулирует
apt-get install vnc4server
Запускаем сервер и задаем пароль для доступа по vnc
vncserver -geometry 1024x768 -depth 24
программа создаст необходимые файлы в домашней папке пользователя от имени которого будет запускаться vncserver
Создаст виртуальное устройство консоль :1
Убиваем процесс сервера
vncserver -kill :1
Правим файл xstartup в домашней папке пользователя
#!/bin/sh
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
#xsetroot -solid grey
#vncconfig -iconic &
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
x-window-manager &
Запускаем сервер
vncserver -geometry 1024x768 -depth 24
подключаемся TightVNC Viewer порт по умолчанию 5901
В итоге получаем серый экран и черный крестик, это говорит о том, что графический сервер работает
vncserver -kill :1

7.      Устанавливаем графическую оболочку, будем использовать gnome-core. Действия можно пропустить, на рабочем сервере использовал xlde.
apt-get install gnome-core
Для Ubuntu gnome-session-fallback или gnome-panel
делаем скрипт xinitrc исполняемым
chmod 755 /etc/X11/xinit/xinitrc
запускаем vnc
vncserver -geometry 1024x768 -depth 24
и попадаем в Gnome

8.      Удаляем из gnome пакеты программ использую аплет установка и удаление программ
Рабочая среда Gnome
CD/DVD burning application for GNOME (brasero)
Общие файлы для Brasero, приложения и библиотеки записи CD (brasero-common)
Configuration on screen keyboard with scanning mode (caribou)
Configuration on screen keyboard with scanning mode (caribou-antler)
vino
Gnome multi-protocol chat and call client (empathy)
Gnome multi-protocol chat and call client (empathy-common)
# Сервер базы данных evolution (evolution-data-server)
# Независимые от архитектуры файлы сервера данных Evolution
Gnome disk usage analyzer
Дисплейный менеджер нового поколения (gdm3)
# Gnome Panel applet for libgnomekdb (gkbd-capplet)
# поддержка Bluetooth в Gnome (gnome-bluetooth)
Contacts manager for Gnome (gnome-contacts)
Gnome media utilities (gnome-media)
Gnome Online Accounts (gnome-online-accounts)
Хранитель и блокировщик экрана для Gnome (gnome-screensaver)
Получение снимков экрана в среде Gnome (gnome-screenshot)
Встраивание поддержки Evolution и Pidgin в файловый менеджер Nautilus (nautilus-sendto)
Управление сетевыми подключениями интерфейс Gnome (network-manager-gnome)
Средства администрирования
База данных провайдеров мобильной связи (mobile-broadband-provider-info)
Мультимедиа
Звуковой сервер PulseAudio (pulseaudio)
PulseAudio backend for libcanberra (libcanberra-pulse)
X11 module for PulseAudio sound server (pulseaudio-module)
Наука
Калькулятор Gnome (gcalctool)
Русский iceweasel
apt-get install iceweasel-l10n-ru
Устанавливаем gnome-tweak-tool
apt-get install python-software-properties
apt-get install software-properties-common
add-apt-repository ppa:shimmerproject/ppa
apt-get update
add-apt-repositoryremove ppa:shimmerproject/ppa
apt-get install gdebi
apt-get install gtk-theme-config
apt-get install gconf-editor
apt-get install software-center
Удаляем через Synaptic Gnome - gnome power manager
apt-get remove software-center
apt-get autoremove

Dconf-editor меняем org-gnome-desktop-session gnome на gnome-fallback
Удаляем пакет для индексирования поиска
apt-get remove tracker-extract
Отключаем параметры индексирования (системные – параметры – поиск и индексирование)
Отключаем службы
Настройка запуска приложений
Notification Daemon
PulseAudio
Менеджер Bluetooth
Оповещение об обновлениях
Помощник монтирования
Сеть
Управление громкостью
Хранилище Tracker
После чего система будет кушать всего 134 Мб памяти
Отключаем автозагрузку демона Bluetooth
chkconfig  bluetooth off
Меняем цвета панелей для этого
Создаем папку home/USER/.config/gtk-3.0
в ней файл settings.ini
содержимое файла:
[Settings]
gtk-icon-sizes = panel-menu=16,16:gtk-large-toolbar=16,16
создаем второй файл gtk.css
содержимое

PanelWidget,
PanelApplet,
PanelToplevel {
    background-color: rgba(90,90,90,1);
    background-image: none;
}
.gnome-panel-menu-bar,
PanelApplet > GtkMenuBar.menubar,
PanelApplet > GtkMenuBar.menubar.menuitem,
PanelMenuBar.menubar,
PanelMenuBar.menubar.menuitem {
    background-color: rgba(90,90,90,1);
    background-image: none;
}
PanelAppletFrame {
    background-color: rgba(90,90,90,1);
    background-image: none;
}

Понятно, что можно было руками поставить «легкий gnome»
Не актуально, так как рабочий вариант на xlde

9.      Далее используя статью «forum.ubuntu.ru/index.php?topic=208235.0»
Создаем файл скрипт логон, в него можно будет заносить команды которые нужно выполнять при входе в систему
touch /etc/logon
chmod +x /etc/logon
добавляем в файл nano /etc/pam.d/common-session
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
session optional pam_exec.so /etc/logon
session optional pam_mount.so
Создаем папку mkdir /net

10.  Установка Wine
В debian 7 он исключительно 32 битный, кроме того версии 1.4. При этом стабильная версия на сайте wine 1.6. Есть только два пути использовать версию 1.4 i386 или компилировать 1.6
Конфигурируем на работу wine 32 бита
WINEARCH=win32 winecfg
dpkg --add-architecture i386
apt-get update
Проверяем
aptitude search ^wine
Установка apt-get install wine:i386
Получем версию wine 1.4.1 2012 год
Проверяем что нет сломанных зависимостей
apt-get install –f
apt-get autoremove
apt-get check

11.  Заходим под пользователем в debian(Ubuntu) и настраиваем wine
WINEARCH=win32 winecfg
wget winetricks.org/winetricks
chmod +x winetricks
Копируем папки с дистрибутивами на сервер по ftp, Access Runtime, Транс-Менеджер
создаем папку mkdir distr
выставляем права chmod 777 distr
Копируем в нее дистрибутивы программ
cd /distr/ARK
устанавливаем Access
wine start  ACCESSRT.MSI
таким же образом устанавливаем sp3 к нему
Устанавливаем библиотеки
./winetricks wsh56 (тут я получил что не установлен cabextract)
apt-get install cabextract
и повторяем
./winetricks wsh56
./winetricks jet40 (здесь я получил не удалось получить файловый дескриптор, указывающий на консоль) и просьбу установить mdac27
./winetricks mdac28 (ставится перед jet40)
./winetricks  msxml3 (здесь я получил не удалось получить файловый дескриптор, указывающий на консоль, просьбой скачать пакет с Microsoft)
xmlsdk.msi (установился)
Скачиваем jet40
./winetricks riched20
./
winetricks vb5run
./winetricks vb6run (здесь скрипт закончился неудачей, библиотеки не были скопированы в system32)
./winetricks vcrun2005
./
vinetricks vcrun2008
./
winetricks native_oleaut32
Запускаем конфигуратор – winecfg
добавляем riched32 порядок загрузки драйвера меняем на сторонняя
riched20 порядок загрузки драйвера меняем на сторонняя
Запускаем wine regedit и импортируем файлы из папки distr ARK DataSource, ODBCINST, ACCESS (папка ACRT_2003, взял из Windows XP)
Заменяем библиотеки в
system32 на взятые из windows xp находятся в папке odbc (profile не надо)
Из той же папки копируем файл MSCOMCTL.OCX в папку System32
регистрируем элемент  MSCOMCTL.OCX
wine cmd
cd /windows/system32
regsvr32.exe MSCOMCTL.OSX
Копируем дистрибутив ARK в Program Files
Настраиваем файл app.ini в папке ARK
TYPEA=2
USER=sa
Настраиваем odbc при необходимости, по факту не нужно, готовые записи из реестра XP в Wine уже предоставят необходимые настройки
wine odbcad32.exe
Устанавливаем шрифты
apt-get install ttf-mscorefonts-installer
Устанавливаем winbind
apt-get install winbind
Чтобы не получить ошибку с отсутствием /usr/lib/i386-linux-gnu/pkcs11.so
dpkg --add-architecture i386
apt-get download gnome-keyring:i386
dpkg -x gnome-keyring_3.4.1-5_i386.deb gnome-keyring
cp -r gnome-keyring/usr/lib/i386-linux-gnu/pkcs11/ /usr/lib/i386-linux-gnu/
Добавляем в /etc/hosts
192.168.0.11 SQL
192.168.0.11 sql.local.ru
Копируем шрифты из папки MSFonts в /usrshare/wine/fonts

12.  Устанавливаем XRDP
apt-get install git
git clone github.com/scarygliders/X11RDP-o-Matic.git
cd X11RDP-o-Matic/
./X11rdp-o-matic.sh –justdoit
/etc/init.d/xrdp restart
netstat -lntp |grep 3389
update-rc.d xrdp defaults
update-rc.d xrdp enable
./RDPsesconfig.sh
Добавляем раскладку клавиатуры
в файл Xsession (etc/X11)
после set –e в самом начале прописываем
setxkbmap -layout "us,ru(winkeys)" -model "pc105" -option "grp:alt_shift_toggle,grp_led:scroll"
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
setxkbmap -layout "us,ru(winkeys)" -model "pc105" -option "grp:ctrl_shift_toggle,grp_led:scroll"
Меняем параметры /etc/xrdp
xrdp.ini
fork=no
/var/log/xrdp.log
blue=3a6ea5
ls_top_window_bg_color=3a6ea5
секции 3,4,5,6,7 закомментируем
nano sesman.ini
AllowRootLogin=0
X11DisplayOffset=10
MaxSessions=100
KillDisconnected=1 (время убить сессии time 60 сек)
LogFile=/var/log/xrdp-sesman.log
EnableSyslog=0
Для решения проблем с раскладкой при отключении от сессии
Создаем файл ruskey в /home/ubuntuhome/
setxkbmap -layout "ru(winkeys),us" -model "pc105" -option "grp:alt_shift_toggle"
делаем его исполняемым
chmod +x ruskey
cd .config/lxsession/LXDE
Добавляем в autostart
@/home/ubuntuadmin/ruskey (где @ будут выполнять команду при крахе)

13.  Вводим в домен Samba4
aptitude install krb5-user
aptitude install samba
aptitude install winbind
aptitude install libpam-krb5 libpam-winbind libnss-winbind

krb5.conf
[libdefaults]
default_realm = LOCAL.RU
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {                        
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
LOCAL.RU = {
kdc = pdc
kdc = bdc
admin_server = pdc
default_domain = LOCAL.RU
}
[domain_realm]
.biznes.gr = LOCAL.RU
biznes.gr = LOCAL.RU
[login]
krb4_convert = true
krb4_get_tickets = false

smb.conf
[global]workgroup = LOCALrealm = LOCAL.RU
server string = %h server (Samba, Ubuntu)
interfaces = 127.0.0.1, 192.168.1.7
bind interfaces only = Yes
server role = standalone server
security = ADS
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
dns proxy = No
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
winbind nss info = rfc2307
idmap config BIZNES:range = 500-40000
idmap config BIZNES:schema_mode = rfc2307
idmap config BIZNES:backend = ad
idmap config *:range = 70001-80000
idmap config * : backend = tdb
[printers]
comment = All Printers
path = /var/spool/samba
create mask = 0700
printable = Yes
print ok = Yes
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers

14.  Для запуска lxde в /etc/skel должен быть файл *.xsession с параметром startxlde
Сброс сессии
cat /var/log/xrdp-sesman.log | grep username
cat /var/log/xrdp-sesman.log | grep xpid=2808
++ terminated session:  username username, display :10.0, session_pid 2428, ip 192.168.0.10:4706 - socket: 8
Ps ax | grep 2808
kill -9 2808

15.  Файл autostart
@xscreensaver -no-splash
@lxpanel --profile LXDE
@pcmanfm --desktop --profile LXDE
@/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1
@/home/ubuntuadmin/ruskey
@/usr/bin/wine start /d /home/LOCAL /username/.wine/drive_c/TM912/ transman.exe

16.Установка настройка FreeNX
sudo add-apt-repository ppa:freenx-team/trusty
sudo apt-get update
sudo apt-get install freenx-server

после генерируем ключ и импортируем его с сревера на клиент

17.Установка и настройка 1с 8.2 в Linux. 1С 8.2 работает в wine. Было нужно для работы 1С Управляющий
Устанавливаем
winetricks ie8 gdiplus
переходим на вкладку "библиотеки"
и проверяем список установленых библиотек
*comctl32 (сторонняя, встроенная)
*gdiplus (сторонняя)
*iexlorer.exe (сторонняя, встроенная)
*itircl (сторонняя, встроенная)
*itss (сторонняя, встроенная)
*jscript (сторонняя, встроенная)
*msctf (сторонняя, встроенная)
*mshtml (сторонняя, встроенная)
*shdoclc (сторонняя, встроенная)
*shdocvw (сторонняя, встроенная)
*shlwapi (сторонняя, встроенная)
*updspapi (встроенная)
*urlmon (сторонняя, встроенная)
*xmllite (сторонняя, встроенная)
Если база 1С на сервере терминалов, то для того чтобы был доступ к файлам блокировок у всех пользователей файлы под пользователем должны создавать с правами группы rw
chmod 2770 /1CUpr
chown root:”domain users” /1CUpr
меняем umask в /home/.profile на 0002

18.  Решение проблемы с numlockx в Linux
apt-get install numlockx
/etc/lightdm/lightdm.conf, секция [SeatDefault], код greeter-setup-script=/usr/bin/numlockx on
/etc/xdg/lxsession/LXDE/autostart, код /usr/bin/numlockx on

Поделиться:

Добавить комментарий

2 + = 9
Решите простой математический пример. Например для "два плюс четыре =?" введите "6".