Терминальный сервер X2Go на Debian 9

Задача: Настроить терминальный сервер 1С.

Что это значит?

Это значит, что пользователи будут работать в 1С не напрямую со своего компа, а подключаться к серверу и запускать терминальный сеанс, в котором и рассматривать желтые окошки.

Зачем?

Достоинства использования терминального сервера:

1) экономия лицензий 1С. Отсюда:

Терминальный сервер допускает установку любого типа лицензий, все лицензии должны быть установлены локально и быть доступны всем пользователям. При этом все лицензии, вне зависимости от вида складываются как однопользовательские и ограничивают общее количество терминальных сеансов (не путать с сеансами приложений 1С).

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

2) все пользователи работают с 1С в одном месте – на сервере. Облегчается поддержка  и администрирование (установка/обновление платформы, например).

Недостатки:

1) глючная работа терминальных серверов (бесплатных, по крайней мере) (см. ошибки в конце статьи). Чтобы добиться желаемой (стабильной) работы терминальных сеансов пользователей нужна могучая борода линуксоида. А из коробки, да еще и бесплатно – совсем разбаловались?

2) небольшая задержка (лагание), связанная с работой по сети.

 
Использовались материалы:
ТЕРМИНАЛЬНЫЕ РЕШЕНИЯ ПОД LINUX (объемная статья от Виталия Поддубного)
Connecting to Linux servers with x2go (полезности о клиенте X2Go 2)
 

Общий план действий

1) имеем серверную железяку Dell и на ней Debian 64-bit (оболочка XFCE)

2) устанавливаем ПО:

  • сервер и клиент 1СPostgreSQL, Apache, HASP и прочая ерунда для 1С
  • пользовательское (все было в коробке): Текстовый редактор LibreOffice, файловый менеджер Thunar и еще что-то по мелочи
  • терминальный сервер X2Go

3) удаляем лишнее: Gimp, Thunderbird

4) настраиваем:

  • проверяем работу SSH
  • отключаем удаленную авторизацию пользователя root
  • проверяем доступность сервера в локальной сети по имени хоста, добавляем запись в hosts
  • настраиваем оболочку XFCE: панель инструментов, доступность кнопок управления питанием сервера, ярлыки и папки на рабочем столе
  • монтируем общие сетевые каталоги
  • настраиваем раскладки клавиатуры
  • настраиваем CUPS, добавляем принтеры и настраиваем их доступность между пользователями

5) добавляем пользователей в систему

Описаны будут лишь некоторые пункты.


Установка X2Go

1 способ (по офф.инструкции): добавление репозитория x2go и установка из него (нужен dirmngr):
# apt-get install dirmngr
# apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E
# nano /etc/apt/sources.list.d/x2go.list
Пишем:
deb http://packages.x2go.org/debian stretch extras main
# apt-get update
Но! Ключ не устанавливается, пишет “В соединении отказано..” и все тут.
 
2 способ: использование ветки sid (это неправильно, но я делал так):
# nano /etc/apt/sources.list
Добавляем:
http://ftp.de.debian.org/debian sid main
Устанавливаем:
# apt-get install x2goserver x2goserver-xsession
И убираем обратно ветку sid из sources.list.
 

Блокировка редактирования XFCE

Запрет редактирования ПАНЕЛИ xfce4. Cначала скопируем текущие настройки:

cp -v /home/<USER>/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/

В unlocked можно вписать имя пользователя, которому нужно снять блокировку:
nano /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
<channel name="xfce4-panel" version="1.0" locked="*" unlocked="local">

Запрет редактирования НАСТРОЕК xfce4:
nano /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
<channel name="xsettings" version="1.0" locked="*" unlocked="local">


Блокировка кнопок выключения

Установим запрет на выключение, перезагрузку системы пользователем (для версии PolicyKit 0.105)
а) правильный вариант (не заработал):
# nano /etc/polkit-1/localauthority/50-local.d/99-disallow-shutdown.pkla
[Disallow shutdown]
Identity=unix-group:users
Action=org.freedesktop.consolekit.system.stop;org.freedesktop.consolekit.system.restart
ResultAny=no
ResultInactive=auth_admin
ResultActive=no

б) неправильный (но заработал), т.к. при переустановке пакета настройки перезапишутся

# nano /usr/share/polkit-1/actions/org.freedesktop.login1.policy

В каждом action, где есть power-off, reboot, suspend, hibernate:
<allow_any>no</allow_any>
<allow_inactive>no</allow_inactive>
<allow_active>auth_admin</allow_active>


Автомонтирование сетевых папок

Автомонтирование чего-либо настраивается в /etc/fstab.

# nano /etc/fstab

Добавить:

<//ip_путь> <лок_путь> cifs auto,user,rw,credentials=<пароли> 0 0

, где:

<//ip_путь> – сетевой путь к общедоступному каталогу, например //192.168.0.10/SharedFolder

<лок_путь> – путь к каталогу, куда будет примонтирована шара, например /mnt/SharedFolder

<пароли> – файл, где будет храниться логин и пароль от учетной записи, от имени которой будет предоставляться доступ к сетевой папке всем пользователям. Можно вписать логин/пароль и в явном виде (вместо credentials), но лучше так.

Создадим файл для credentials:
# nano /etc/shared_pass
Пишем:
username=USER
password=PASS
Назначим чтение и запись только пользователю root:
# chmod 600 /etc/shared_pass
 
Для использования протокола cifs нужно установить пакет cifs-utils:
# apt-get install cifs-utils

Также, можно узнать нужные параметры автомонтирования, если осуществить монтирование с помощью mount и заглянуть в /etc/mtab.


Раскладка клавиатуры

Добавим русскую и английскую раскладку, модель клавиатуры 105-клавишная (еще делают 102).

Уберем галку “Запоминать состояние клавиши Num Lock”.

Возможные проблемы и решения с клавиатурой описаны ниже.

 


Создание пользователей

Когда оболочка XFCE настроена как надо, скопируем ее параметры в профиль skel, чтобы эти настройки устанавливались по-умолчанию для новых пользователей:

# cd /home/USER
# cp -r -f -b .config/ /etc/skel
# cp -r -f -b .1C/ /etc/skel
# cp -r -f -b Рабочий\ стол/ /etc/skel

, где USER – пользователь, чьи настройки будем копировать

Что должно скопироваться:

.config – настройки оболочки xfce4
.config/autostart/ – программы в автозагрузке
.config/xfce4/xfconf/xfce-perchannel-xml:
    xfce4-panel.xml – панель
    xfwm4.xml: workspace_count – количество рабочих мест=1
    xfce4-keyboard-shortcuts.xml – горячие клавиши
.config/xfce4/panel/launcher-8/********.desktop – пользовательский скрипт в панели
.1C – список баз
Рабочий стол – ярлыки, папки
 
Для создания пользователей можно использовать команду adduser, а для массового создания – команду newusers. Но при использовании newusers не копируются настройки из skel. Можно использовать комбинацию этих команд, как в скрипте:
 
#!/bin/bash
scriptPath=${0%/*}
#scriptPath=$(dirname $0)
source "$scriptPath/info/user_arrays"
source "$scriptPath/utils.sh"
defUsers=( ${ALL[@]} )
# достаем имя пользователя из параметра (если задано), иначе из массива ALL файла user_arrays
if [ -z $1 ]
then
    users=( ${defUsers[@]} )
else
    adduser $1
    exit 0
fi
# создаем учетки (-у) с помощью adduser, чтобы скопировались настройки из skel
for user in ${users[@]}
do
    log "=    adduser $user"
    adduser $user --disabled-password --gecos $user
done
# устанавливаем ФИО и пароли, которые лежат в файле users_list
log "=    start newusers"
newusers /usr/local/bin/info/users_list
Список пользователей в массиве defUsers и файле users_list должны совпадать, иначе будет бардачок.
 
Формат записей файла users_list:
pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
, где:
pw_name – имя учетки
pw_passwd – пароль
pw_uid – id юзера, создастся автоматически, если оставить пустым
pw_gid – id первичной группы, создастся автоматически, если оставить пустым
pw_gecos – поле копируется в поле GECOS записи пользователя
pw_dir – определение домашнего каталога пользователя. Если это поле указывает на несуществующий каталог, то указанный каталог создаётся, его владельцем назначается создаваемый или обновляемый пользователь и его первичная группа. Если изменяется домашний каталог существующего пользователя, то команда newusers не перемещает или копирует содержимое старого каталога в новое место. Это нужно выполнить вручную.
pw_shell – пользовательская оболочка.
Пример:
user:pass:::Тестовый юзер:/home/user:/bin/bash
 

Настройка списка баз 1С

Чтобы массово установить список баз 1С, можно воспользоваться простым скриптом:
#!/bin/bash
scriptPath=${0%/*}
source "$scriptPath/user_arrays"
source "$scriptPath/utils.sh"
 
for user in ${MAN[@]}
do
    log $user
    cp -f /usr/local/bin/info/man_bases.v8i /home/$user/.1C/1cestart/ibases.v8i
    chown $user:$user /home/$user/.1C/1cestart/ibases.v8i
done
 
Файл user_arrays – имена учеток пользователей, разбитые по отделам:
ADM=(
    dir
)
BUH=(
    buh1
    buh2
)
MAN=(
    man1
    man2
)
ALL=( ${ADM[@]} ${BUH[@]} ${MAN[@]} )
 
Файл utils.sh – служебные функции:
#!/bin/bash
log() {
   message="$(date +""%y.%m.%d\ %T"") $@"
   echo $message
}
 
Можно выставить какому отделу какой список баз устанавливать. В данном случае отделу MAN установится список man_bases.v8i.
 

Установка принтеров

1) установка CUPS
# apt install cups

2) Заходим в админку (http://localhost:631/admin), добавляем принтеры и настраиваем к ним доступ, составляя список разрешенных пользователей:

Принтеры -> <printer_name> -> Set allowed users -> Allow/Prevent (или “вручную” в /etc/cups/printers.conf)

Также нужно убрать галку “Разрешить совместный доступ к этому принтеру”, иначе права доступа будут до фени.

3) Настройка доступа к серверу CUPS по сети (думаю, не желательно):
# nano /etc/cups/cupsd.conf
Listen <ip_addr>:631 # сет.интерфейс
<Location />
Order allow,deny
Allow from <ip_addr>
AuthType Basic
Require valid-user
Satisfy any
</Location>
# +в остальных подпапках Location тоже

4) установить у каждого пользователя принтер по-умолчанию. Как это сделать через конфиги не разбирался, делал с помощью GUI, заодно учетки проверил.

 

Проблемы и решения X2Go

При запуске терминального сеанса с помощью X2Go были определенные проблемы, например:

  • отсутствие русской раскладки клавиатуры (не переключается раскладка)
  • не работают цифры в NUM-блоке клавиатуры
  • нижняя панель инструментов не отображается (не помещается в окно)
  • проблема с иероглифами при копировании кириллицы в буфер обмена (с сервера на хост)
  • проблема с копированием текста в буфер обмена (с сервера на локальный хост)

Проблемы с раскладкой клавиатуры и потерей панели инструментов решились запуском скрипта при старте сессии:

1) пишем скрипт

# nano /usr/local/bin/init_session.sh

Добавляем:
#!/bin/sh
xrandr -s 800x600
setxkbmap -layout "us,ru" -model "pc105" -option "grp:alt_shift_toggle,grp_led:scroll"
/opt/1C/v8.3/i386/1cestart

, где:

  • xrandr – устанавливает разрешение, соответственно меняется размер окна сеанса, и панель инструментов магически появляется
  • setxkbmap – устанавливает раскладки, модель и параметры клавиатуры
  • 1cestart – запуск клиента 1С (чтобы пользователи не забывали, зачем зашли)

Добавляем право на запуск скрипта:

# chmod +x /usr/local/bin/init_session.sh

2) создаем запись в автозапуске, которая будет выполнять скрипт (или в XFCE можно зайсти в Настройки > Сеансы и запуск > Автозапуск приложений):

# nano /home/debian/.config/autostart/init_session.desktop

Добавляем:
[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=init_session.sh
Comment=
Exec=/usr/local/bin/init_session.sh
OnlyShowIn=XFCE;
StartupNotify=false
Terminal=false
Hidden=false

Проблема с копированием кириллицы решилась использованием более старой версии Windows-клиента 4.0.3.2.

Проблема с цифрами в NUM-блоке клавиатуры решилась добавлением кнопки в панель инструментов для запуска скрипта с командами:
 
setxkbmap -layout "us,ru" -model "pc105" -option "grp:alt_shift_toggle,grp_led::scroll"
numlockx on
 
Т.е. если не работают цифры, жмякай по кнопке и все будет хорошо (идею взял отсюда, самому ничего в голову больше не пришло).

Еще на unixforum.org советуют такой код для решения проблем с раскладками клавиатуры и NUM-кнопками (добавить в автозагрузку), сам не пробовал:

#!/bin/bash
setxkbmap -rules xorg -model pc105 -layout "ru(winkeys),us" -option 'grp:alt_shift_toggle,grp_led:scroll'
xmodmap -e "keycode 91 = KP_Delete KP_Decimal KP_Delete KP_Decimal"

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

Управление сеансами X2Go

Получить список сеансов:
 # x2golistsessions_root – 1 способ. Каждая запись состоит из следующих полей:
01: <agent_pid>
02: <session_id>
03: <port>
04: <host>
05: <state>
06: <init_time>
07: <session_cookie>
08: <client_ip>
09: <gr_port>
10: <snd_port>
11: <last_time>
12: <user>
13: <age_in_secs>
14: <sshfs_port>
15: <tekictrl_port> (if Telekinesis is available/enabled)
15: <tekidata_port> (if Telekinesis is available/enabled)
 
 # ps aux | grep x2goruncommand – 2 способ
 
 # x2goterminate-session <session-id> – завершить сеанс по id

 


Возможные проблемы X2Go и из решения

Проблема: При попытке запуска сеанса в клиенте ошибка: “Your home directory path contains non ASCII-characters”
ИЛИ “xsession: warning: unable to write to /tmp”
Решение: На разделе, где лежит /home, нет места
 
Проблема: если сначала выбрали Полноэкранный режим, то потом другие режимы будут отображаться без рамки и кнопок
Решение: Перезапуск сеанса
 
Проблема: Слишком маленькое разрешение (мелкий шрифт), после того, как баловался с параметров DPI
Решение: Перезапуск сеанса
 
Проблема: При запуске сеанса: Ошибка Connection failed
“Failed to start X2Go Agent session with ID <user>-52-.._dp32. X2G0 Agent terminated unexpectedly. Aborting session startup.”
Рещение: Сессия оборвалась, завершить ее принудительно на сервере и создавать новую..
 
Проблема: При запуске сеанса: Ошибка 52
“The connection with the remote server was shut down.
Please check the state of your network connection.”
Решение: Сессия оборвалась, нужно создавать новую..
 
Проблема: При запуске сеанса ошибка:
“Failed to restore all the required visuals.
Can’t resume the NX session on this display.”
Решение: Завершить сессию принудительно на сервере и создавать новую..
 

Сравнение клиентов X2Go и XRDP

XRDP (0.9.1):
+ под windows стандартный клиент
– работает довольно медленно
– проблема с переключением раскладки клавиатуры при переподключении без завершения сеанса (решена отчасти)
 
X2GO (4.1.0.0):
+ работает быстрее
– проблема с исчезновением русской раскладки (решена установкой параметров клавиатуры при старте сессии; позже перестала проявляться)
– проблема с NUM-цифрами, не работают (позже перестала проявляться)
– проблема с копированием киррилицы с сервера на клиент (решена установкой более ранней версии клиента 4.0.3.2)
– проблема с исчезновением панели задач (решена принудительной установкой разрешения при старте сессии)
– проблема с буфером обмена при вставке текста с клиента и ЗАМЕНЕ имеющегося (если был выделен) (решена отчасти)

2 thoughts on “Терминальный сервер X2Go на Debian 9

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

Ваш адрес email не будет опубликован.