Pull to refresh

Сервер терминалов для 1С по протоколу RDP на linux: рекомендации по настройке с учетом опыта реальной эксплуатации

Reading time 8 min
Views 67K
В статье рассматриваются нюансы установки и настройки терминального сервера по протоколу RDP для работы с базами 1с на платформе 8.3 на базе дистрибутива Xubuntu 14.04 с учетом возможностей последней версии сервера xrdp и опыта реальной эксплуатации.

Не так давно (в конце декабре 2016 года) вышел в свет очередной релиз сервера xrdp версии 0.9.1. Одновременно с этим была выпущена стабильная версия одного из «бекендов» xrdp — xorgxrdp v 0.2.0. Эти версии мы и будем использовать далее при установке.

Небольшое, но важное отступление


В составе дистрибутивов linux в-основном содержится устаревшая версия сервера xrdp версии 0.6.x, в которой имеются баги, которые мешают нормально работать с 1с (например, не работает нормально буфер обмена с русскими символами).

В основном, когда рассматривается установка терминального сервера на базе протокола rdp на linux, рассматриваются варианты установки сервера xrdp со сборкой X11Rdp бекенда с помощью специальных скриптов, например, X11RDP-o-Matic (для ubuntu) — статья на хабре, статья на infostart.

Использование бекэнда X11Rdp несет в себе несколько минусов:

  • Достаточно долгое время сборки
  • Сложно решить проблему с переключением языков. После переподключения к сеансу переключение языков может перестать работать. Автор регестрировал проблему на сайте разработчиков — гарантированное решение было найдено автором только для бекенда xorgxrdp правкой исходно кода (далее этот метод используется в статье)
  • Скорость отрисовки может оказаться недостаточно быстрой для комфортной работы пользователей

Использование бекэнда xorgxrdp позволяет указанных проблем избежать.

В статье рассматривается установка на Xubuntu версии 14.04 LTS, а не более свежей версии 16.04 LTS, по причине падения производительности при прорисовке удаленного экрана. Есть зарегистрированная проблема по данной ситуации. Кому-то помогало отключение compositor в настройках, но автору статьи не удалось добиться такой же скорости прорисовки, как на версии Xubuntu 14.04.

Рекомендации по установке операционной системы


Для установки используем 32-битную версию ОС Xubuntu 14.04. Ссылка на образ.

Система может быть установлена как на хост, на и в виртуальную среду. Я обычно предпочитаю виртуализацию KVM, рабочие сервера ставились на ней.

При разбивке дисков использовалась классическая схема (не LVM), файловая система ext4. В виртуальную машину подключено 3 диска фиксированного размера:

  • 22 Гбайта: 18 Гигабайт точка монтирования /, остальное под swap
  • 5 Гбайт: точка монтирования /var
  • 5 Гбайт: точка монтирования /tmp

Данное разбиение — это предпочтение автора с учетом удобства эксплуатации. В любом случае, при планировании дискового пространства необходимо учитывать возможную нагрузку на файловую систему. При использовании файловых баз данных желательно использовать SSD диск(и).

Для сервера необходимо установить статический IP-адрес.

Для удобства ввода команд для последующей установки необходимо установить OpenSSH-сервер:

sudo apt-get install openssh-server
sudo restart ssh

При активированном firewall открываем порт 22:

firewall-cmd --add-port 22/tcp --permanent
firewall-cmd --reload

Установка и настройка сервера xrdp with xorgxrdp backend


На сайте разработчиков есть инструкция для установки на debian 8, используем ее за основу.

Устанавливаем необходимые зависимости:

sudo apt-get install git autoconf libtool pkg-config gcc g++ make libssl-dev libpam0g-dev libjpeg-dev libx11-dev libxfixes-dev libxrandr-dev flex bison libxml2-dev intltool xsltproc xutils-dev python-libxml2 g++ xutils libfuse-dev libmp3lame-dev nasm libpixman-1-dev xserver-xorg-dev git

Создаем каталог для загрузки дистрибутивов:

mkdir -p ~/xrdp-xorg
cd ~/xrdp-xorg
BD=`pwd`
cd "${BD}"

Клонируем из репозитория текущую последнюю сборку xrdp и собираем с кодеком rfxcodec:

git clone git://github.com/neutrinolabs/xrdp
cd xrdp
git submodule init
git submodule update
cd librfxcodec
./bootstrap
./configure
make
cd ..
./bootstrap
./configure --enable-fuse --enable-rfxcodec --disable-ipv6
make

Устанавливаем xrdp в систему:

sudo make install
sudo ln -s /usr/local/sbin/xrdp{,-sesman} /usr/sbin
sudo update-rc.d xrdp defaults

Скачиваем дистрибутив xorg-xrdp бекенда:

// Build and install xorgxrdp
wget https://github.com/neutrinolabs/xorgxrdp/releases/download/v0.2.0/xorgxrdp-0.2.0.tar.gz
cd "${BD}"
tar xvfz xorgxrdp-0.2.0.tar.gz
cd "${BD}"/xorgxrdp-0.2.0

Устанавливаем жесткое правило переключения раскладки с русского на английский язык сочетанием клавиш Ctrl+Shift для решения проблемы переключения раскладок. Корректность проверяется созданием сессии — 1-я проверка, отключаемся, подключаемся еще раз в ту же сессию — заново еще раз проверяем.

В терминале присваиваем значения временных переменных:

kb_model="pc105"
kb_layout="us,ru"
kb_options="grp:ctrl_shift_toggle"

Делаем замену кода в исходном файле:

sed -ri.bak "s/(set.model)[^;]+/\1 = \"$kb_model\"/;s/(set.layout)[^;]+/\1 = \"$kb_layout\"/;s/(set.options)[^;]+/\1 = \"$kb_options\"/" xrdpkeyb/rdpKeyboard.c

Компилируем и устанавливаем в систему xorg-xrdp бекэнд:

./bootstrap
./configure
make
sudo make install

Желательно в файле /etc/xrdp/xrdp.ini поменять местами блоки [X11rdp] и [Xorg], чтобы у пользователя по умолчанию был правильный бэкэнд. При подключении к серверу нужно выбирать Xorg в списке сессий.

При необходимости изменения порта по умолчанию с 3389 на другой, редактируем файл /etc/xrdp/xrdp.ini: в разделе [Globals] меняем значение переменной port=3389 на требуемый.

При активированном firewall открываем порт 3389(либо тот, на который стандартный был изменен):

firewall-cmd --add-port 3389/tcp --permanent
firewall-cmd --reload

После настроек перезапускаем службу

service xrdp restart

Теперь можете подключиться к серверу через стандартного клиента с windows либо с linux любым клиентом, который поддерживает протокол rdp.

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

После установки желательно проверить, что нормально работает буфер обмена с кириллическими символами в обе стороны. Также можно убедиться, что работает копирование файлов через буфер обмена с русскими символами (это одни из основных проблем, которые были устранены в последних сборках сервера xrdp и которые раньше мешали нормально использовать в рабочей среде сервер терминалов на базе xrdp).

Установка клиента 1С: Предприятие версии 8.3.9


В связи с тем, что в последних версиях платформы компания 1с довела нативного клиента для ОС на базе linux до состояния, с которым можно более менее комфортно работать, будем использовать именно его, а не пытаться установить wine, а поверх клиента для ОС Windows.

Устанавливаем дополнительные компоненты, необходимые для корректной работы:

sudo apt-get install libgsf-1-114
sudo apt-get install ttf-mscorefonts-installer
sudo apt-get install imagemagick

Скачиваем в папку с сайта 1с дистрибутив клиента и сервера:

sudo dpkg -i *.deb
sudo apt-get -f install

Так как компонеты сервера 1с нужны были только для удовлетворения зависимостей, отключаем службу:

sudo update-rc.d srv1cv83 disable

Если используется сетевой hasp-ключ, то пропишем параметры поиска:

sudo mkdir /opt/1C/v8.3/i386/conf
sudo su
echo [NH_COMMON] >/opt/1C/v8.3/i386/conf/nethasp.ini
echo  NH_TCPIP = Enabled>>/opt/1C/v8.3/i386/conf/nethasp.ini
echo [NH_TCPIP]>>/opt/1C/v8.3/i386/conf/nethasp.ini
echo  NH_SERVER_ADDR = 192.168.0.100>>/opt/1C/v8.3/i386/conf/nethasp.ini
echo  NH_TCPIP_METHOD = UDP>>/opt/1C/v8.3/i386/conf/nethasp.ini

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

Корректная настройка с временными файлами, создаваемыми платформой 1С


В процессе работы столкнулись с проблемой, когда у одного пользователя внешняя обработка заполнения табличной части работает, а у другого нет — выдается сообщение о нарушении прав доступ. Проблема заключается в том, что платформа 1С создает временные файл /tmp/PrnForm.tmp, т.е. путь до файла одинаковый у разных пользователей. Соответственно, первый пользователь, который воспользовался обработкой, неявно создал во временной папке файл, на который есть доступ на изменение только у него. Другой пользователь уже не может переписать файл.

Решение заключается в правильной настройке общесистемной umask, отнесение пользователей к одинаковой группе, а также правильной настройкой прав на временную папку /tmp.

Редактируем общесистемную маску. Правим файл:

/etc/login.defs 

в нем меняем значение на:

umask 002

Всех терминальных пользоватлей относим в группу Users (если не были отнесены ранее, можно и в другую группу).

Меняем права на папку tmp

chown -R root:Users /tmp
chmod g+s /tmp

Если используется обмен с сайтом Битрикс, то аналогичные настройки нужно сделать для папки /var/log/bitrix.

Вариант решения подобной проблемы применительно 1С описан в статье.

Решение проблемы с невозможностью выгрузки деклараций из баз ЗУП 2.5 и Бух 2.0


Есть одна неприятная особенность, которая может помешать бухгалтерам на клиенте 1C для linux выгружать декларации из зарплатной базы и бухгалтерии — после выбора файла и попытке выгрузить будет выдаваться сообщение вида «Нет доступа к каталогу [НазваниеКаталога]. Проверьте корректность имени каталога выгрузки!

Решение найдено и заключается в необходимости замены кода „Кат = Новый Файл(ПутьДляВыгрузки + “NUL»);" на «Кат = Новый Файл(ПутьДляВыгрузки);» в «Обработка.ОбщиеОбъектыРегламентированнойОтчетности.Форма.НастройкаПараметровСохраненияРегламентированногоОтчета.Форма.Модуль». К сожалению, для таких изменений придется конфигурацию снимать с поддержки.

Рекомендации по организации обмена файлами и печати с удаленных офисов


В случае, если с сервером работа ведется только в рамках локальной сети, проблем никаких нет — samba работает хорошо.

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

Для обмена файлами удобно использовать выделенный аккаунт dropbox — выделенная папка на сервере синхронизируется с облаком, а на клиентах либо через предоставление общего доступа к папке dropbox либо с тем же самым аккаунтом настраивается клиент.

Для печати на удаленные принтеры удобно использовать схему построения виртуальной частной сети, в этом случае решается проблема даже с теми удаленными точками, на которых нет фиксированного IP-адреса. Доступ к принтеру будет доступен по IP-адресу внутри VPN-сети. Как вариант, предлагаю использовать NeoRouter Free. Настройка данного продукта выходит за рамки данной статьи.

Возможные альтернативы


К сожалению, стабильно работающих бесплатных альтернатив на текущий момент я не вижу. Был достаточно успешный опыт использования связки OpenSuse 11.2+FreeNX (от etersoft) + WineEtersoft (купленный) для работы с конфигурациями на базе платформ 8.1, но на текущий момент такая связка для новых установок потеряла актуальность — не все пакеты можно найти для установки, на более свежих версиях ОС Linux и конфигурациях 1С скорость отрисовки ужасная.

Было достаточно много времени потрачено на тестирование других продуктов типа x2Go, но там также есть много НО: при подключении со свежих версий ОС типа Windows 8, Windows 10 есть артефакты при отрисовке изображения и т.п. В общем, если для административных функций альтернативные решения еще как-то подходят, то для реальной работы с решениями фирмы 1С не очень.

Заключение


При рассмотрении возможности перехода не рассмотренное решение нужно учесть такой фактор, как наличие торгового оборудования. Не все торговое оборудование поддерживается в linux, а тем более мало, что можно запустить через RDP.

В целом же при желании сэкономить на лицензиях Windows можно обойтись и решениями на базе LINUX, тем более в последнее время разработка XRDP идет ударными темпами. В марте этого года планируется выпуск версии 0.9.2 — это следует из опубликованных Release notes.

Дополнение 31.03.2017


Коллеги, обращаю внимание, что вчера разработчики xrdp выпустили новую версию xrdp 0.9.2 и xordxrdp 0.2.1.
Исходя из Release notes теперь RemoteFX кодек теперь поддерживается по-умолчанию, поэтому по идее теперь не нужно его собирать отдельно, как я указывал в статье. Также по-умолчанию теперь используется бекенд xorgxrdp. Чуть позже проверю, как теперь происходит установка и сделаю правки в статью.
Tags:
Hubs:
+15
Comments 72
Comments Comments 72

Articles