Привет, Хабр! Меня зовут Холодаев Алексей, я младший системный администратор в 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 телефонов в Южной Америке
→ WD-40: средство, которое может почти всё
→ Как ИИ учится рисовать аниме
Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью. Пишем не чаще двух раз в неделю и только по делу.