Как стать автором
Обновить

Учим xrdp подключаться к прошлым сессиям

Время на прочтение3 мин
Количество просмотров29K
XRDP хорошая штука, но есть один недостаток — если ты уже открыл к сессию, а потом разъединился (без выхода из сессии), то впоследствии не факт, что ты к ней сможешь соединиться. Маялся с этим приличное время пока неудобство достигло критической точки и я решил таки взяться и глянуть в исходники, чтобы выяснить как же это поправить.

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

Ну что ж, начнем. Суть способа заключается в комментировании в файле sessman/session.c пяти следующих строк:
    if (g_strncmp(name, tmp->item->name, 255) == 0 
        //&&
        //tmp->item->width == width &&
        //tmp->item->height == height &&
        //tmp->item->bpp == bpp &&
        //tmp->item->type == type
            )

Поясню. Здесь сканируются существующие сеансы и делается проверка, от какого пользователя и какого разрешения, цветовой глубины, типа (VNC, XRDP) планируется открыть сессию. Если находится сеанс с такими же параметрами, то подключаемся к той же сессии. Если нет, открываем новую. Условия: разрешение, глубина цвета, тип сеанса, я решил отключить.


Теперь опишу как я это реализую на примере скажем Scientific Linux дистрибутива (так же подойдет под Fedora, Red Hat, CentOS). Так же учитываем, что xrdp нет в стандартных репозиториях Scientific Linux, придется подключать дополнительные (об этом я не буду здесь писать, тема гуглится на раз).
Устанавливаем нужные инструменты:
# yum groupinstall "Development tools"
# yum install yum-utils rpmdevtools tar

Скачиваем сырцы проекта, и устанавливаем их в рабочую директорию сборщика rpm:
$ yumdownloader --source xrdp
$ rpm -ivh xrdp-0.5.0-0.13.el6.src.rpm

Имя файла будет не обязательно xrdp-0.5.0-0.13.el6.src.rpm, зависит от того, что у вас скачалось первой коммандой. Здесь файл скачанный для Scientific Linux.

В рабочей папке сборщика rpm появятся файлы, в т.ч. ~/rpmbuild/SOURCES/xrdp-HEAD-*.tar.gz. Этот файл на нужно будет распаковать, т.е.:
$ cd ~/rpmbuild/SOURCES
$ tar -xzf xrdp-HEAD-a9cfc23.tar.gz


Установим все необходимое для сборки:
# yum-builddep ~/rpmbuild/SPECS/xrdp.spec


Теперь ищем указанный нами вначале файл и открываем его каким нибудь текстовым редактором, например nano:
$ nano ~/rpmbuild/SOURCES/xrdp-HEAD-a9cfc23/sesman/session.c

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

Запаковываем это дело обратно:
$ cd ~/rpmbuild/SOURCES
$ tar -czf xrdp-HEAD-a9cfc23.tar.gz xrdp-HEAD-a9cfc23


Осталось дело за малым — собрать модифицированный rpm:
$ rpmbuild -ba ~/rpmbuild/SPECS/xrdp.spec

Если все прошло нормально, то в ~/rpmbuild/RPMS/x86_64/ получаем два файлика rpm:
$ ls -l
итого 664
-rw-rw-r--. 1 rafaelrs rafaelrs 243152 Авг  5 07:41 xrdp-0.5.0-0.13.el6.x86_64.rpm
-rw-rw-r--. 1 rafaelrs rafaelrs 430620 Авг  5 07:41 xrdp-debuginfo-0.5.0-0.13.el6.x86_64.rpm

Устанавливаем первый пакет, запускаем сервис и радуемся жизни :)
yum install ~/rpmbuild/RPMS/x86_64/xrdp-0.5.0-0.13.el6.x86_64.rpm
service xrdp start


Кстати да, не забываем, что если вдруг пакет обновится, то изменения, внесенные нами, пропадут. Можно повторить операцию, можно включить xrdp в список исключений, можно вообще переименовать приложение. Тут дело вкуса, я остановился на первом, благо xrdp не так уж и часто обновляется.
Теги:
Хабы:
Всего голосов 14: ↑12 и ↓2+10
Комментарии4

Публикации

Истории

Работа

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань