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

Ubuntu + XRDP + x11RDP терминальный сервер, с поддержкой звука, для серфинга в интернете — пошаговое руководство

Время на прочтение 10 мин
Количество просмотров 124K
Всего голосов 28: ↑28 и ↓0 +28
Комментарии 43

Комментарии 43

для тру неплохо было бы в самом начале сказать, что это вообще, как примерно работает и какие задачи решает.
Спасибо за замечание добавил в начало статьи.
Я бы переформулировал в нечто вроде «Удобный для Windows-клиента способ подключения к Linux-based серверу терминалов».
Но и заголовок покороче и пожелтее (alizar-style: "Ученный изнасиловал журналиста! Простой доступ Windows-клиентов к серверу терминалов Ubuntu". «Пошаговое руководство» — рулит.
Ну и «почему так, а не иначе»:
* для связки Linux-Linux в ЛВС таки проще голый X11/Xorg (но именно и что Linux-Linux и ЛВС, т.к. оверхед там — мама не горюй)
* Связка Windows > Linux:
** Xorg — жуткий геморрой (со стороны Windows)
** VNC — как уже человек сказал — жуткий расход RAM, даже когда никто не работает
** NX — открытый вариант безнадежно устарел, но вполне работоспособно пока (хотя это жуткие костыли)
** X2Go — на базе NX, надо будет потыкать палочкой
** XRDP — тоже костыли, но наиболее удобно для клиента Windows

И да — у меня пока-что на Fedora 25 не завелось. Пакеты из официальных репо, матерится на нечто вроде «у нас в консоли #12 уже крутится какой-то xserver — местов нет».
Надо бы еще развернуть run level (5?), открытие портов, настройки X11/Xorg, трафик и нагрузку на CPU/RAM.
Короче — «Show must go on» (tm)
Прошу прощения, поставил вам минус, хотел плюс, ох уж этот мобильный хабр…
upd: Компенсировал в карму:)
А как у xRDP с производительностью в 4К? Есть шанс использовать повседневно?
Не тестил в 4К максимум работали на fullHD.
В теории все зависит от мощности самого сервера на котором развернут терминал, от количества одновременно подключившихся и от ширины канала связи пользователь сервер. Но, как правило, это решение только для 2D серфинга. Причем для нормальной скорости в большинстве случаев приходится зажимать битность цвета на 15-16bit не выше.
Как раз на днях искал варианты исполнения для задачи: Пользователю на сервере выдать 2 монитора с 4К с для нормальной работы с видео.
Кроме VDI сценариев с NVidia GRID вообще то и не видно альтернатив. Но тут узал что новый RDS в Win2016 умеет работать с NVidia GRID и раздавать мощности видеоадаптера по сессиям на RDS сервере. На следующей недели буду бестить оба сценария, но крайне интересно что покажет из себя новый RDS on WinSrv 2016.
Напишите здесь кратенько о результатах, если не затруднит.

Spice имеет отличную скорость работы, поддерживает несколько мониторов и умеет подстраивать разрешение на лету, а так же умеет пробрасывать usb-устройства.
Недавно в Linux Kernel 4.10 реализовали виртуализацию GPU для KVM, правда я ее еще пока что не пробовал, так что насколько она производительная сказать не могу.

Если уже попробовали — отпишите плз результаты тут. И, кстати, есть какой-то мануал по настройке spice-сервера на обычной машине (не на виртуалке) как rdp-сервера с поддержкой нескольких подключений одновременно?

Круто! Спасибо огромное! Как раз на днях хотел заняться подобным, а тут такой материал. Докладываю — из-под одной Xen виртуалки на ubuntu 16.04 в другую на win10 все пашет. И звук и видео. github-овские пакеты сразу запахали. FullHD на youtube проигрывается без лагов.
Нагрузки много, но у меня ни одной видеокарты в виртуалку не проброшено.


tzps, у меня монитор 2560*1080, не 4К конечно, но все-таки. Правда надо учитывать что у меня одна машина и между виртуалками файлы перегоняются по сети со скоростью 140-150 мбайт/сек

У нас именно небольшое предприятие. И все вроде хорошо, но один вопрос, возможно тупой: у главбуха куча клиентов типа Сбербанк, Россельхозбанк и еще что-то. Как организовать работу этих клиентов? Все лезут в сеть по разному, кто-то vpn поднимает, кто-то просто через https.
Отвечу за человека — никак. Windows only. Особенно Сбер с их странным ключиком — этот даже не на каждой Windows работает нормально.
По настройке под linux надо смотреть предметно конечно. Если запустить под linux не получится то отдельно сделать 1 терминальный сеанс под windows. И никто же не мешает в терминальном сеансе для главбуха повесить все варианты клиентов. И она при подключении к терминалу может с ними нормально работать не ставя под угрозу сетку. В случае падения сеанса он восстанавливается из чистого бэкапа за 1 мин. Другое дело если кодировщики зашифруют весь её локальный комп. Вместе с .DOC файлами и отчетными базами за последний квартал. Тут идея в том чтобы вынести «за скобки» локальной сети всё ПО которое, для работы, должно иметь доступ к интернету а остальное оставить внутри.

Хотелось бы сравнения с x2go, который уже есть в репозитории, и ставится/запускается всякого труда. Разве что клиент под винду у него свой, а не mstsc.

В моём случае одним из основных условий заказчика было использование на клиентских станциях только штатно установленного ПО без дополнительных вмешательств. Поэтому x2go не рассматривался изначально. Опять же плюсом RDP, если наплевать на безопасность, является возможность подключения к серверу из любого места (дома, интернет кафе, отеля на отдыхе, от друзей) винда она есть везде да и через linux проблем нет — штатный клиент. А таскать с собой флешку с установщиком доп клиента, да и мало где, на стороне, разрешат её поставить. Представьте ночной звонок от того же бухгалтера которая что то забыла сделать на работе и ей, максимально срочно, необходимо реализовать доступ с ноутбука её знакомого (который вы и в глаза то не видели что там установлено) к терминал сеансу в конторе. И надо по телефону объяснить куда и что надо нажать.
Если использовать что то типа х2go, шифрование канала и те пе. то мне тогда проще прокинуть реверсивный ssh туннель + freerdp внутри сети. Та же передача VNC/RDP трафика внутри ssh туннеля. Когда я пробовал x2go мне не понравилась скорость и качество отрисовки картинки по сравнению с RDP сеансом. Но это было достаточно давно возможно в новых версиях что то изменилось.
А таскать с собой флешку с установщиком доп клиента

Зачем таскать с собой флешку? — клиент всегда можно скачать на официальном сайте или прислать по почте вместе с инструкцией.


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

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


Когда я пробовал x2go мне не понравилась скорость и качество отрисовки картинки по сравнению с RDP сеансом

Это высказывание немного странное. Так как насколько я понимаю x2go заметно быстрее vnc и xrdp как раз за счет того что x2go — это протокол семантический и по своей структуре он больше похож на нативный rdp на windows.
В отличии от vnc или того же xrdp, который просто проксирует рабочий стол, здесь в определенный момент времени передаются только определенные объекты, а не вся картинка целиком. Плюс ко всему здесь имеется куча дополниительных фишек, недоступных в вышеупомянутых протоколах.
Так что думаю, что вы все же недооценили x2go и напрасно обошли его стороной.


В моём случае одним из основных условий заказчика было использование на клиентских станциях только штатно установленного ПО без дополнительных вмешательств

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


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

А здесь нет. Не надо плевать на безопасность :)
Конкретно для таких случаев я бы предложил вам попробовать Guacamole — он поможет вам организовать доступ к тому же rdp или vnc прямо из браузера, который можно защитить HTTPS и впредь спать спокойно ;)

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

Жаль тольке, что x2go так и не смогли до сих пор подружить с kde5 и свнжим гномом, пришлось нго заменить обратно на rdp :(

Автору — респектище!
Крайний раз, когда я пробовал xrdp — это была стройная система костылей и подпорок насчет RDP <> VNC <> X11.
Сейчас, судя по всему, путь спрямили до RDP <> X11.
Note: автору — x11 != xorg; но это так, копирайтные заморочки :-)

Для любителей/профессионалов RH-based (например — Fedora 25):
sudo dnf install xrdp # автоматом ставится xorgxrdp
sudo chkconfig xrdp on # да, я ретроград
sudo service xrdp start

В результате можно коннектиться из любой венды по RDP.
Причем там на выбор сеанс Xorg (получаем чистый экран небесно-голубого цвета) или Xvnc (получаем нечто вроде «Хьюстон, у нас проблемы»)
Такая схема жутко жрёт оперативку. Объединение страниц памяти конечно помогает, но слабо.
Windows based терминальный сервер справляется с подобной ситуацией в разы проворнее.
Изящного решения я, увы, не нашёл :(
Там потому что VNC, которое забивает сеансы на всех юзеров сразу (независимо от пользуются они этой сессией или нет).
Windows-based — таки проворнее (там же родное), но а) стоит денег и б) небезопасно (здесь автор на 146% прав).
Изящное решение Linux-Linux — X11/Xorg. Но это именно и только в ЛВС (потому что жрет уже трафик, а не оперативу).
Изящного решения Win-client <> Lin-server — таки да, таки нет. Костыли типа NX/X11-win-client/VNC — глючные и/или ресурсоемкие.
Xrdp тоже, в принципе, костыль — но хотя бы удобен для клиента.
Ну у меня без VNC — x11rdp вроде как и его sesman, да и не важно, сессии всегда открты как в виндах, так и в линухе, но виндам хватает 32 гиг на 16 пользователй, а линухи пухнут и крашатся с нехваткой памяти.
По поводу не безопасно — только из-за этого и перешли.
Коллега — или мы с Вами в разных вселенных — или я не знаю…
Линух. Не может. Крашиться.
Это технически невозможно.
Note: нет, ну технически возможно, конечно… Если винт посыпался — тут без вариантов.

А уж 32 гига на 16 юзеров под вендами… Закройте им pornolab, штоле.
Ну может не так выразился, при попытке запустить очередное приложение происходит затуп на приличное время (до нескольких минут) и это может кончится либо открытием приложения, либо сообщением, что недостаточно свободной памяти. При этом у пользователей открыты FF с парой вкладок и OpenOffice Calc. И это ещё нет «нагрузки».
А вот под вендами как раз всё всегда летало и львиная доля памяти простаивала свободной. При всё тех же задачах и даже более, на этом же железе.

Да сейчас и без всяких порнхабов браузеры с парой вкладок обычных сайтов, обвешанных жаваскриптами, уже с удовольствием гига два оперативы сжирают. Из-за этого перешли в фирме с тонких клиентов на толстые, чтобы если юзер наоткрывал табов — лагало только у него, а не у всех ;)

> а линухи пухнут и крашатся с нехваткой памяти
Вы не любите кошек? Вы не умеете их готовить (tm).
то то и оно, что непомерный жор необъясним. Просто такое ощущение, что каждый пользователь тупо запускает свой Linux, что не так конечно, но жёр памяти именно такой.
Здравствуйте!
Автор спасибо за статью, мне как новичку появился интерес повторить все это :)

Вопрос, в случае если пользователь вышел в инет через терминал и далее скачал файл с инета, то передача этого файла к себе на комп будет простым copy/paste?
И сохранятся ли ссылки или пароли при каждом повторном входе?

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

Я проинстуктировал бухов, всё объяснил. И он работает под терминалом, и ему приходит грозное письмо от налоговой инспекции, описание которого есть в шапке статьи.

Умный, но задёрганный бух сохраняет это письмо к себе на комп… и пытается прочитать.
Вот поэтому и отключаются все возможности передачи файлов. Что то надо — выполняй в терминале. Читай в терминале, редактируй в терминале, отвечай на письма там же. Если что то очень надо скачать на свой комп — попроси администратора.
На самом деле пользователи очень быстро привыкают и неудобств не возникает.
Еще раз на пальцах. Я на аутсортинге, обслуживаю несколько компаний. И как я, физически, смогу бегать к каждой из них, для того, чтобы сохранить нужный файл? А файлы нужны, это непрерывный рабочий процесс компании.
Т.е. я должен быть жёстко привязан к стулу, и каждый раз реагировать на каждое письмо в обслуживаемой организации, к которой пришло письмо с вложенным файлом? А файлы в письмах идут десятками в день…

И бухам еще клиенты разные нужны, например извращеный сбер.
Это я всё к тому, что только сёрфинг в Интернете не нужен никому. От слова совсем. Сегодня идёт обмен данными. Интернет сегодня — это повседневный рабочий инструмент. И сводить работу с глобальной сетью, только к сёрфингу — бессмысленно.
Давайте рассмотрим случаи когда файл полученный через интернет любым способом обязательно должен быть перемещен на внутренний компьютер пользователя.
Если это документ что мешает его прочесть внутри терминала. Какой смысл скачивать его на локальную станцию? Распечатать на подпись — печатаем из терминала. Отсканировать с сетевого сканера и отправить обратно = терминал. Передать на рассмотрение директору = из своего сеанса в терминал сеанс директора.
Локальная сеть не затронута никак. Вариант скопировать текст письма к себе = клипборд из терминал сеанса к себе локально в редактор и те пе.
Если это установочный файл то тогда не пользовательское это дело обновлять драйвера и устанавливать… декс браузеры и vk плагины иначе в сети анархия начнется.
Опишите тогда вариант при котором, в срочном порядке, интернет файл должен быть именно перемещен на локальную станцию без возможности решения задачи в терминал сессии. Буду думать.
Очень зависит от специфики вашей организации.
К примеру, у вас есть контрагенты, с которыми нужно обмениваться счетами/документами.

Исходящее направление:
1. Бухгалтер формирует счёт в 1C, отправляет его клиенту по почте.
2. Бухгалтер формирует акт выполненных работ в 1C, отправляет клиенту по почте, печатает, подписывает, сканирует, отправляет клиенту скан подписанного акта, кладёт этот скан в папочку «исходящие документы клиента XXX» и отправляет бумажную версию акта клиенту

Входящее направление:
3. Клиент прислал счёт/акт/что-либо ещё, этот документ нужно занести во внутреннюю систему документооборота. В крайнем случае — положить в папочку «входящие документы клиента XXX»
4. Клиент прислал заполненный заказ в XLS (на основе отправленному ему ранее шаблона), заказ нужно скормить 1C'ке, которая из документа сделает счёт.
5. Клиент прислал файл, который под OpenOffice'ом открыть никак не получится. И, к примеру, сказать клиенту «переделай всё под меня» не получится (начиная от всяких тендеров, где именно ваша организация заинтересована в получении заказа и это ваша проблема, что у сотни других всё открылось, а у вас — нет, заканчивая всякими налоговыми, которым глубоко наплевать на ваши проблемы, они просто выпишут штраф и не будут голову морочить).

Т.е. основная проблема — всегда найдутся документы, которые должны пересекать периметр туда-обратно.
В любом случае, ваше решение существенно лучше, чем ничего,… но, возможно, есть смысл пойти чуть по другому пути:
1. Заблокировать обмен любыми данными между компьютерами сети (вынести каждый порт в отдельный VLAN, политику доступов настроить на маршрутизаторе)
2. Настроить постоянный бекап общего хранилища (и разграничить права доступа — бухи могут смотреть только в свои папки, продавцы — только в свои)
3. Настроить постоянный бекап локальных компьютеров
4. Настроить антивирусную защиту (вдруг поможет?)

Или пойти чуть дальше (но тут ещё вопрос — а готовы ли платить за лицензии?):
1. У всех пользователей diskless терминалы
2. Работа в терминальных сессиях (или в VDI)
3. Антивирусы + бекапы

Т.е. идти по пути максимального уменьшения «цены ошибки» с минимальным усложнением жизни пользователей, а не по пути максимального уменьшения риска заражения, но ценой очень больших сложностей для пользователей и нарушения бизнес-процессов (которые, вообще-то, компании денег приносят).
Можно потыкать палочкой еще в xpra.
Хотелось бы подобную статью, но с пробросом USB-принтеров вместо звука. Пару лет назад пытался пробросить Canon.ы — неудачно. Kyocera 2035 вообще запустить не смог под никсами (да, рукожоп, только учусь)
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории