1c + Терминальный сервер на Linux

Материал из support.qbpro.ru

Исходные данные Имеем установленную операционную систему Linux Debian Squeeze с компонентами "Стандартная система" и "Окружение рабочего стола". Системный пользователь, созданный на этапе установки операционной системы - mario. Задача - настроить терминальный сервер для работы с программой "1С: Предприятие". Зачем же нам еще нужен терминальный сервер!

Подготовка системы Установим необходимое программное обеспечение:

#apt-get install expect chkconfig binutils cifs-utils ssh

Для того, чтобы пользователи могли подключаться к терминальному серверу, в ssh-сервере должна быть включена опция авторизации по ключу (PubkeyAuthentication yes), проверим это:
#cat /etc/ssh/sshd_config
# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys

Установка терминального сервера freenx

Скачаем необходимые пакеты (в зависимости от версии операционной системы, выбираем соответсвующий каталог) и установим их:
#dpkg -i rx-etersoft*.deb nx*.deb

Произведем первоначальные настройки и создадим окружение системного пользователя nx:

#rxsetup

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

#/etc/init.d/freenx restart

Установим максимальное время жизни для простаивающей сессии два часа. Для этого отредактируем файл /etc/nxserver/node.conf.d/07-misc.conf:

SESSION_TTL=7200

Терминальный сервер установлен. Для этого качаем клиент под вашу операционную систему (на etersoft.ru клиент тщательно обработанный напильником и готов для работы с русскоязычными программами). В настройках подключения указываем ip-адрес сервера (порт 22), графическую среду GNOME, пользователь - mario, все остальное по-умолчанию. Сохраняем, запускаем, проверяем. Если все чисто, сухо и комфортно, идем дальше. Если нет - читаем логи.

Администрирование сервера freenx Список текущих подключений:

# nxserver --list

Завершение всех подключенных сессий:

# nxserver --cleanup

Установка Wine Стандартный wine для наших целей не подойдет - с ним будет работать все, кроме 1С ))) А вот адаптированный wine от компания Etersoft - как раз то что надо (пакеты нужно устанавливать строго в той последовательности, которая указана в статье):

#mkdir eterwine
#dpkg -i libwine*.deb
#dpkg -i wine*.deb
#dpkg -i fonts*.deb
 

Добавляем пользователя mario в группу wineadmin:

#gpasswd -a mario wineadmin

После этого перезагружаем сеанс пользователя mario. Подготавливаем общий каталог (progs) для установки в него программ (делаем это под пользователем mario):

#wine --admin /var/lib/wine/progs 

При этом все необходимые для совместной работы пользователей права будут установлены автоматически (rw-rw-r--).Далее добавляем всех необходимых для работы с терминальным сервером пользователей (под root-ом):

#useradd -s /bin/bash -m user2
#passwd user2

После чего добавляем их в группу wineadmin.

#gpasswd -a mario wineadmin


Логинимся под новыми пользователями и в терминале выполняем следующее:

#wine --attach /var/lib/wine/progs

Переходим к установке и настройке 1С.

Установка 1С на терминальный сервер Linux

В примере будем устанавливать 1C: Предприятие 7.7, сетевая версия. Установка 8-ой версии 1С выполняется аналогичным образом (кроме sql-версии).

Итак заходим в систему под пользователем mario, копируем в его домашнюю папку дистрибутив 1С и выполняем в терминале следующую команду (Устанавливаем программу в папку Program files):

#wine setup.exe

Создаем папку для базы:

#mkdir /var/lib/wine/progs/Program\ Files/bases

Устанавливаем требуемую конфигурацию 1С в созданную папку. Дабы не учить вашего бухгалтера премудростям работы с операционной системой Linux, создаем скрипт, который позволит нам запускать 1С в режиме единственного приложения и решит вопрос с переключением раскладок клавиатуры (выполняем под пользователем root):

#vim /bin/run1c.sh
#!/bin/bash
/bin/bash << EOF
#Задаем модель клавиатуры, ее раскладки и последовательность их смены
/usr/bin/setxkbmap -model pc105 -layout us,ua,ru
/usr/bin/setxkbmap -model pc105 –variant
#Переключение раскладок ctrl+shift
/usr/bin/setxkbmap -model pc105 -option -option grp:ctrl_shift_toggle
# Запуск 1с
wine /var/lib/wine/progs/Program\ Files/1Cv77.ADM/BIN/1cv7.exe
EOF

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

#chmod 777 /bin/run1c.sh

Осталось настроить nx-клиент. В конфигурации, в закладке General рабочего стола ищем контейнер Desktop и среду GNOME меняем на Custom. Щелкаем по кнопке Settings и выбираем Run the following command. В текстовом поле прописываем run1c.sh. В случае создания индивидуального скрипта для пользователя - прописываем полный путь к скрипту (/home/user2/run1c.sh). Сохраняем, проверяем. Если вы все сделали верно должно появиться окно запуска 1С:Предприятия. Далее добавляем новую базу, прописываем к ней путь, создаем 1С пользователей в конфигураторе и начинаем работать, вот и все. Проблема, связанная с использованием трех языковых раскладок. При использовании двух раскладок клавиатуры скрипт run1c.sh работает нормально. При использовании четырех раскладок, языки переключается но не в той последовательности, но с тремя раскладками языки не переключаются совсем. Вот решение этой проблемы:

#vim /usr/share/X11/xkb/symbols/group

в нем находим секцию:

xkb_symbols "ctrl_shift_toggle" {
 key  {
 type="PC_BREAK",
 symbols[Group1]= [ Shift_L, ISO_Prev_Group ]
 };
 key  {
 type="PC_BREAK",
 symbols[Group1]= [ Shift_R, ISO_Next_Group ]
 };
 key  { [ Control_L, ISO_Prev_Group ] };
 key  { [ Control_R, ISO_Next_Group ] };
 };

изменяем ISO_Prev_Group на ISO_Next_Group и получаем:

xkb_symbols "ctrl_shift_toggle" {
 key  {
 type="PC_BREAK",
 symbols[Group1]= [ Shift_L, ISO_Next_Group ]
 };
 key  {
 type="PC_BREAK",
 symbols[Group1]= [ Shift_R, ISO_Next_Group ]
 };
 key  { [ Control_L, ISO_Next_Group ] };
 key  { [ Control_R, ISO_Next_Group ] };
 };

Сохраняем и перезапускаем иксы.