Привет, Хабр! Меня зовут Холодаев Алексей, я младший системный администратор в Cloud4Y. Сегодня хочу поделиться способом подключения стандартного RDP-клиента Windows к MacOS. Если интересно, ныряйте под кат.

Вы наверняка знаете, что в MacOS есть встроенный VNC сервер, к которому можно подключаться через VNC клиента. Однажды я задумался: а почему бы не использовать стандартный RDP client Windows для подключения к яблочной операционной системе? Немного погуглив, я обнаружил, что существует бесплатный RDP сервер на MacOS — xRDP. Данный сервер легко устанавливается на ОС Linux/Unix. Об установке и настройке этого сервера расскажу далее.

Установку я производил на свой макбук с MacOS Big Sur.

Для начала необходимо установить инструменты командной строки Xcode. Для этого выполняем команду в ПО терминала.

xcode-select --install

Далее установим менеджер сторонних пакетов Homebrew командой

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Установим библиотеку OpenSSL командой

brew install openssl

После установки OpenSSL присвоим переменной CPPFLAGS путь к библиотеке, чтобы компилятор смог данную библиотеку найти. Выполним команду

export CPPFLAGS="-I/usr/local/opt/openssl/include"
Установим необходимые пакеты командами
brew install automake
brew install libtool
brew install pkgconfig
brew install nasm

Установим XQuartz – программное средство системы X Window System. Скачать программу можно с официального сайта. После установки необходимо перезайти в систему.

Для удобства работы создадим отдельную папку: mkdir /Users/admin/Documents/xrdp/

Теперь включим встроенный VNC сервер. Для этого перейдём в «Системные настройки»

Далее выбираем общий доступ:

Включаем функцию «Общий экран» и переходим в настройки компьютера

Включаем опцию “любой пользователь может запросить разрешение управлять экраном” и задаём пароль в пункте “Пользователи VNC могут получить управление экраном по паролю

Теперь загрузим необходимые пакеты.

Нам требуются xRDP и xOrgRDP в формате исходного кода.

Загрузить их можно отсюда  (tar.gz архивы). После загрузки переместим данные архивы в папку, которую мы ранее создали, и извлечём их.

cp /Users/admin/Downloads/xrdp-0.9.11.tar /Users/admin/Documents/xrdp/
tar -xvf xrdp-0.9.11.tar
rm xrdp-0.9.11.tar

cp /Users/admin/Downloads/xorgxrdp-0.2.11.tar /Users/admin/Documents/xrdp/
tar -xvf xorgxrdp-0.2.11.tar
rm xorgxrdp-0.2.11.tar

Сборка xRDP

Запустим Bootstrapper и сконфигурируем сборку с помощью OpenSSL. Затем запустим make установщик.

Если вы получаете ошибку на этом шаге, то скорей всего это связано с неправильным экспортом OpenSSL CPPFLAGS.

Сборка xOrgRDP

Запустим Bootstrapper и сконфигурируем сборку так, чтоб она происходила при помощи OpenSSL. Затем запустим make установщик.

cd ../xorgxrdp-0.2.11/
./bootstrap
./configure PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig
make
sudo make install

Если вы столкнулись с ошибкой, убедитесь, что вы перезапустили сессию после установки сервера xQuartz X11. Если вы получаете ошибку /opt/X11/include/xorg/dixfontstr.h:30:10:fatal error ‘X11/fonts/libxfont2.h’ file not found, необходимо поправить файл dixfontstr.h, прописав #include “/opt/X11/fonts/libxfont2.h” вместо #include “/X11/fonts/libxfont2.h”.

xRDP сервер почти готов. Теперь необходимо настроить его. Давайте откроем файл xrdp.ini.

sudo vi /etc/xrdp/xrdp.ini

Найдём секцию в файле со всеми типами сессий.

[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20

[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
#xserverbpp=24
#delay_ms=2000

[vnc-any]
name=vnc-any
lib=libvnc.so
ip=ask
port=ask5900
username=na
password=ask
#pamusername=asksame
#pampassword=asksame
#pamsessionmng=127.0.0.1
#delay_ms=2000

[neutrinordp-any]
name=neutrinordp-any
lib=libxrdpneutrinordp.so
ip=ask
port=ask3389
username=ask
password=ask

Я буду подключаться через модуль Xvnc. Используем библиотеку libvnc.dylib вместо libvnc.so. Я закомментирую все модули, которые не буду использовать. Вот так будет выглядеть изменённая секция с типами сессий в файле xrdp.ini.

#[Xorg]
#name=Xorg
#lib=libxup.so
#username=ask
#password=ask
#ip=127.0.0.1
#port=-1
#code=20

[Xvnc]
name=Xvnc
lib=libvnc.dylib
username=ask
password=ask
ip=127.0.0.1
port=5900
xserverbpp=24
#delay_ms=2000

#[vnc-any]
#name=RDP to VNC Connector
#lib=libvnc.so
#ip=127.0.0.1
#port=5900
#username=ask
#password=ask
#xserverbpp=24
#pamusername=asksame
#pampassword=asksame
#pamsessionmng=127.0.0.1
#delay_ms=2000

#[neutrinordp-any]
#name=neutrinordp-any
#lib=libxrdpneutrinordp.so
#ip=ask
#port=ask3389
#username=ask
#password=ask

Примечание: В редакторе vi нажмите клавишу «i», чтобы войти в режим редактирования. Чтобы сохранить и выйти, нажмите «ESC» и введите :wq!

Теперь запустим демоны xRDP и xRDP-sesman. Они находятся по пути /usr/local/sbin/.

Выполним следующие команды:

sudo /usr/local/sbin/xrdp
sudo /usr/local/sbin/xrdp-sesman

Пробуем подключиться по RDP. Вводим логин и пароль, нажимаем ENTER.

Если у вас появилось окно авторизации MacOS, значит, всё работает правильно.

Если у вас возникают какие-либо ошибки, смотрите логи. Они находятся по пути:

/var/logs/xrdp.log

/var/logs/xrdp-sesman.log

Вот таким способом можно предоставить доступ на MAC OS по протоколу RDP. Спасибо за внимание!


Что ещё интересного есть в блоге Cloud4Y

→ История Game Genie — чит-устройства, которое всколыхнуло мир

→ Как я случайно заблокировал 10 000 телефонов в Южной Америке

→ Странные продукты Apple

→ WD-40: средство, которое может почти всё

→ Как ИИ учится рисовать аниме

Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью. Пишем не чаще двух раз в неделю и только по делу.

Комментарии (7)


  1. Earthsea
    25.01.2022 14:35
    +3

    Немного погуглив, я обнаружил, что существует бесплатный RDP сервер на MacOS — xRDP

    Он и на Linux есть, можно сразу садиться писать еще одну статью.


    1. drWhy
      25.01.2022 15:39
      +1

      А Linux есть на Windows. Круг замкнулся.


      1. Earthsea
        26.01.2022 11:34
        +1

        Круг замкнулся.

        Ну это уже целый цикл статей получается.


  1. Saymon
    25.01.2022 18:46
    +7


  1. savostin
    25.01.2022 18:50
    +6

    А главное - ЗАЧЕМ? Если все равно через VNC идет...


  1. youROCK
    25.01.2022 23:03

    Как производительность? Потому что у macOS есть какое-то особое расширение VNC-протокола, которое динамически подбирает качество JPEG, или что-то такое, и в итоге даже когда выполняются полноэкранные анимации или меняется большое количество всего на экране одновременно, производительность почти не падает, но, конечно, за счёт более низкого качества картинки, пока идет перерисовка.

    Интересно, как с этим дела обстоят у xRDP. По моему опыту ничего подобного там нет, к сожалению.


  1. AlexGluck
    26.01.2022 00:52
    +1

    Можно добавить настройку и при прохождении авторизации в xrdp не надо будет вторую авторизацию проводить в макос.

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

    Лет 10 назад делал руководство: https://forum.ubuntu.ru/index.php?topic=208235.0