среда, 12 апреля 2017 г.

Терминальный сервер XRDP на Ubuntu 12.04.5

$ sudo -i
# apt-get update
# apt-get upgrade
# apt-get install ssh samba mc
# apt-get install git
# git clone https://github.com/metalefty/X11RDP-o-Matic.git
# cd X11RDP-o-Matic
# ./X11rdp-o-matic.sh –justdoit
проверка
# /etc/init.d/xrdp restart
# netstat -lntp |grep 3389
---------------------------------------------------------------------------------------------------------
Терминальный сервер XRDP на Ubuntu 12.04.5

!!! sudo apt-get update
!!! sudo apt-get install mc openssh-server chkconfig subversion libtool automake automake1.7 automake1.9 git libssl-dev libpam0g-dev libx11-dev libxfixes-dev xxkb libpam-mount clamtk smbfs python-software-properties pulseaudio-esound-compat paprefs -y
 
$ sudo su
# apt-get update
# apt-get upgrade

Донастраиваем Xsession.
Добавляем в /etc/X11/Xsession после set -e:
## Для корретного определения локали
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
## Для корретной работы переключения раскладок клавиатуры по alt + shift может понадобиться эта строка. Если испытываете трудности раскомментируйте её удлив символ #
#setxkbmap -layout "us,ru(winkeys)" -model "pc105" -option "grp:alt_shift_toggle"
## автоматической создание симлинков на сетевые ресурсы при каждом входе
ln -f -s /net/$USER/public  /home/$USER/Сетевые\ ресурсы

Cобираем x11rdp.
sudo apt-get build-dep xserver-xorg-core
cd ~
wget http://server1.xrdp.org/xrdp/x11rdp_xorg71.tar.gz # Исходники могут переехать по другому адресу, если что гугл поможет
tar -xvf x11rdp_xorg71.tar.gz
sudo mkdir /opt/X11rdp # важно: /opt/X11rdp владелец должен быть root!
cd x11rdp_xorg71
time sudo sh buildx.sh /opt/X11rdp

Проверяем установленые библиотеки:
cd /opt/X11rdp/bin
ls -lh
ln -s /opt/X11rdp/bin/X11rdp /usr/bin/X11rdp # делаем симлинк в /usr/bin

Cобираем свежую сборку xrdp.
Мы будем использовать 
свежую сборку xrdp. Что бы создать скрипты для запуска и установить 
зависимые пакеты ставим и удаляем xrdp из репозитария Ubuntu:
 
sudo apt-get install xrdp -y ; apt-get remove xrdp -y

Клонируем под нормальным пользователем текущую версию xrdp:
cd ~
git clone https://github.com/FreeRDP/xrdp.git xrdp.git

Собираем из исходников xrdp. Обратите внимание на checkout, это необходимо для корректной работы xrdp:
cd xrdp.git
git checkout 4cd0c118c273730043cc77b749537dedc7051571
./bootstrap
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make

Устанавливаем с правами root:
sudo make install
 
Копируем и изменяем RSA ключи, это необходимо для RDP сессий:
sudo su -
mkdir /usr/share/doc/xrdp
mv /etc/xrdp/rsakeys.ini /usr/share/doc/xrdp/
chmod 600 /usr/share/doc/xrdp/rsakeys.ini
chown xrdp:xrdp /usr/share/doc/xrdp/rsakeys.ini
 
Настройка xrdp.
Делаем резервную копию и создаем симлинк на Xsession:
 
cd /etc/xrdp
mv startwm.sh startwm.sh.BACKUP
ln -s /etc/X11/Xsession /etc/xrdp/startwm.sh
 
Приводим настройки /etc/xrdp/xrdp.ini к такому в виду:
 
[globals]
bitmap_cache=yes
bitmap_compression=yes
port=3389
crypt_level=low
channel_code=1
max_bpp=16
#black=000000
grey=d6d3ce
#dark_grey=808080
#blue=08246b
#dark_blue=08246b
#white=ffffff
#red=ff0000
#green=00ff00
#background=626c72
 
[xrdp1]
name=RDP
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
xserverbpp=16
 
[xrdp2]
name=VNC
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
 
 
Исходный выглядит так:
 
[globals]
bitmap_cache=yes
bitmap_compression=yes
port=3389
crypt_level=low
channel_code=1
max_bpp=24
#black=000000
#grey=d6d3ce
#dark_grey=808080
#blue=08246b
#dark_blue=08246b
#white=ffffff
#red=ff0000
#green=00ff00
#background=626c72

[xrdp1]
name=sesman-X11vnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1

[xrdp2]
name=console
lib=libvnc.so
ip=127.0.0.1
port=5900
username=na
password=ask

[xrdp3]
name=vnc-any
lib=libvnc.so
ip=ask
port=ask5900
username=na
password=ask

[xrdp4]
name=sesman-any
lib=libvnc.so
ip=ask
port=-1
username=ask
password=ask

[xrdp5]
name=rdp-any
lib=librdp.so
ip=ask
port=ask3389

[xrdp6]
name=freerdp-any
lib=libxrdpfreerdp.so
ip=ask
port=ask3389

[xrdp7]
name=sesman-X11rdp
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
xserverbpp=24

Количество разрешённых подключений можно установить в 
/etc/xrdp/sesman.ini. По умолчанию разрешено 10 пользователей, за это 
отвечает опция MaxSessions в секции Sessions. В этом же файле 
рекомендуется не изменять значения KillDisconnected (По умолчанию 
KillDisconnected=0),IdleTimeLimit, DisconnectedTimeLimit. Я изменил 
опцию KillDisconnected и у меня юзеры смогли коннектится в ту же сессию,
 но за правильность суждений не ручаюсь. 
 
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=1
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh

[Security]
AllowRootLogin=0   # Разрешать входить руту по умолчанию стоит 1, то есть разрешать. Я изменил на 0 ради безопасности.
MaxLoginRetry=4    # Максимальное количество попыток входа
TerminalServerUsers=tsusers   # Как я понял группа пользователей терминального сервера
TerminalServerAdmins=tsadmins   # Группа администраторов терминального сервера. Если вы не входите в эту группу то 
# выключение питания или перезагрузка сервера из терминального подключения не доступна.

[Sessions]
X11DisplayOffset=10   # Порядковый номер дисплея, который проверяется сначала на свободность, а после на нём запускается X сервер.
# Если на сервере больше 10 физически подключенных дисплеев или локальных сессий то значение лучше увеличить. Если меньше оставьте 
# значение по умолчанию, чтобы не натыкаться на локально подключеные сессии. 
# C каждым новым терминальным подключением это значение увеличивается на 1 единицу. После отключения сессии дисплей на который она
# подключалась освобождается и следующая терминальная сессия открывается на освобожденном дисплее.
MaxSessions=10   # Максимальное количество терминальных сессий.
KillDisconnected=1   # В теории по мануалам это остановка сессий которые отключились. На моей практике получилось, 
# что я смог подключаться в отключенную сессию. Если оставить 0 по умолчанию, у меня сессии не терминировались, а висели в процессах
# как у всех кто писал мануалы по xrdp.
 
IdleTimeLimit=0
DisconnectedTimeLimit=0

[Logging]
LogFile=/var/log/xrdp-sesman.log
LogLevel=DEBUG
EnableSyslog=0
SyslogLevel=DEBUG

[X11rdp]
param1=-bs
param2=-ac
param3=-nolisten
param4=tcp

[Xvnc]
param1=-bs
param2=-ac
param3=-nolisten
param4=tcp
param5=-localhost
param6=-dpi
param7=96 
 
Немного изменяем скрипт управления /etc/init.d/xrdp, добавляем параметры:
PIDDIR=/var/run
SESMAN_START=yes
 
Настраиваем авторизацию xrdp, приводим файл /etc/pam.d/xrdp-sesman к виду:
 
#%PAM-1.0
@include sesman
 
Запускаем xrdp сервер и проверяем:
 
service xrdp start
 
* Starting Remote Desktop Protocol server                                                                                                                  ok
process 3147 started
starting sesman...
sesman config:
        ListenAddress:            127.0.0.1
        ListenPort:               3350
        EnableUserWindowManager:  1
        UserWindowManager:        startwm.sh
        DefaultWindowManager:     startwm.sh
        AuthFilePath:             disabled
Xvnc parameters:
        Parameter 00                   -bs
        Parameter 01                   -ac
        Parameter 02                   -nolisten
        Parameter 03                   tcp
        Parameter 04                   -localhost
        Parameter 05                   -dpi
        Parameter 06                   96
X11rdp parameters:
        Parameter 00                   -bs
        Parameter 01                   -ac
        Parameter 02                   -nolisten
        Parameter 03                   tcp
logging configuration:
        LogFile:       /var/log/xrdp-sesman.log
        LogLevel:      4
        EnableSyslog:  0
        SyslogLevel:   4
security configuration:
        AllowRootLogin:       0
        MaxLoginRetry:        4
        No TSUsersGroup defined
        No TSAdminsGroup defined
session configuration:
        MaxSessions:                 10
        X11DisplayOffset:            10
        KillDisconnected:            1
        IdleTimeLimit:               0
        DisconnectedTimeLimit:       0
[20121201-21:09:12] [WARN ] [init:45] libscp initialized
 
Если отобразились настройки xrdp-sesman, значит все встало как надо. В 
версии из репозитария настройки не отображаются. Теперь можно проверить 
подключение к серверу по RDP протоколу любым доступным клиентом.
 
Альтернативное решение проблемы с переключением раскладки:
 
На одном форуме есть рекомендация указать в файле 
~/x11rdp_xorg71/buildx.sh параметр  “--with-fontdir=” после  
“./configure” команды перекомпиляции (строка 815). В системе шрифты 
лежат тут “/usr/share/fonts” , если у вас не так измените путь:
 
# xorg-server
if ! test -f $PCFILEDIR/xorg-server.pc
then
  cd xorg-server-X11R7.1-1.1.0
  ./configure --prefix=$PREFIXDIR [color=green]--with-fontdir=/usr/share/fonts[/color] --enable-xglx
--with-mesa-source=$SRCDIR/Mesa-6.5 --disable-dmx
  if ! test $? -eq 0
  then
 
Если испытываете проблемы c графической оболочкой Gnome или Unity попробуйте выполнить:
 
echo "gnome-session --session=ubuntu-2d" > ~/.xsession
Это по умолчанию для вашего пользователя будет запускать упрощённую сессию юнити 2D.

Или установите gnome session fallback.
 
sudo apt-get install gnome-session-fallback
 
        
    

Комментариев нет:

Отправить комментарий