NoMachine — бесплатная программа для удаленного доступа к рабочему столу. Работает под Windows, Linux, macOS, Raspberry Pi, Android, iOS. Поддерживает: звук с сервера на клиента, микрофон с клиента на сервер, передачу файлов, USB устройства и даже принтеры. Давайте настраивать!
Программа NoMachine
Программа NoMachine состоит из двух компонентов: клиента и сервера. На удаленной машине (т.е. на компьютере, рабочий стол которого мы хотим получить на локальной машине) мы будем использовать сервер NoMachine. На локальной машине (т.е. на компьютере, на котором мы хотим получить рабочий стол удаленной машины), мы будем использовать клиент NoMachine.
Сервер NoMachine на удаленной машине (Debian)
Чтобы скачать NoMachine, переходим по ссылке: https://downloads.nomachine.com.
У меня удаленная машина под Debian — выбираю тип диструбутива DEB и скачиваю.

Устанавливаем:
dpkg -i nomachine_*.deb

После установки NoMachine начинает работать как сервер nxserver и слушать порт 4000.
Проверяем статус сервера nxserver:
systemctl status nxserver
Проверяем прослушиваемые порты:
netstat -nltp
Чтобы проверить статус сервера в GUI, кликаем мышью по иконке NoMachine (!M) в системном трее и выбираем Show server status.


Сервер установили, сервер работает.
Настройка сервера
Отключим гостевой доступ, включенный по умолчанию. Для этого переходим на вкладку Security. Снимаем «галочку» с пункта «Allow guest desktop sharing access on this server«. Возвращаемся на вкладку Status и перезагружаем сервер с помощью кнопки Restart the server.
Аутентификация пользователя по ключу
Аутентификация пользователя по логину/паролю не является безопасной. Безопасной альтернативой является аутентификация пользователя по ключу. Вместо запроса пароля пользователя, аутентификация основывается на паре ключей, созданной в формате OpenSSH и состоящей из публичного ключа, установленного на сервере, и приватного ключа, находящегося у пользователя.
Генерация пары ключей
Генерируем пару ключей:
ssh-keygen -t rsa -b 4096
Придумываем имя для ключей. Я придумала имя user-openssh. И у меня в текущей директории сгенерировался приватный ключ user-openssh и публичный ключ user-openssh.pub.

Приватный ключ передаем пользователю, а публичный ключ разместим в нужном месте на сервере.
Размещение публичного ключа на сервере
Создаем директорию $HOME/.nx/config, если она не существует:
mkdir $HOME/.nx/config
Создаем файл $HOME/.nx/config/authorized.crt и устанавливаем необходимые разрешения на доступ к нему:
touch $HOME/.nx/config/authorized.crt
chmod 0600 $HOME/.nx/config/authorized.crt
Добавляем публичный ключ user-openssh.pub в файл $HOME/.nx/config/authorized.crt:
cat user-openssh.pub >> ~/.nx/config/authorized.crt
Включение аутентификации по ключу на сервере
Добавляем в конфигурационный файл /usr/NX/etc/server.cfg строку:
AcceptedAuthenticationMethods NX-private-key
Перезагружаем сервер NoMachine:
/etc/NX/nxserver --restart
Проброс портов
Поскольку моя удаленная машина стоит за роутером, то я пробрасываю порт 4000 (TCP и UDP) наружу:

Клиент NoMachine на локальной машине (Windows)
У меня локальная машина под Windows. На том же сайте NoMachine https://downloads.nomachine.com выбираю дистрибутив для Windows, скачиваю и устанавливаю:

Запускаем программу NoMachine — это клиент. А программа NoMachine Service — это сервер, он нам не нужен.
Нажимаем кнопку Добивить, чтобы создать подключение к удаленной машине. В поле Хост вводим IP адрес удаленной машины. Порт — 4000, Протокол — NX.
У меня удаленная машина за роутером, поэтому в поле Хост я указываю IP адрес роутера.

Переходим на вкладку Настройка, выбираем «Используйте аутентификацию на основе ключей по ключу, который вы предоставляете» и нажимаем кнопку Изменить.

Выбираем приватный ключ. У меня это user-openssh. Нажимаем стрелку <, чтобы вернуться на вкладку Настройка, и нажимаем кнопку Добавить.
Подключение к удаленной машине создано, нажимаем кнопку Подключить.
Вводим имя пользователя и вводим парольную фразу (passphrase) в поле Индификационная фраза. Если парольная фраза при создании пары ключей не была задана, то поле Индификационная фраза не будет отображено. И нажимаем кнопку OK.

Все! Должен отобразиться удаленный рабочий стол.
Проверка звука
На удаленной машине открываем конфигурационный файл /usr/NX/etc/node.cfg и проверяем, что следующие параметры не закомментированы (т.е. нет символа # перед параметром) и выставлены в нужные значения:
AudioInterface pulseaudio
EnableAudio 1
Если вносите правки в конфигурационный файл /usr/NX/etc/node.cfg, то необходимо перезагрузить nxserver:
/etc/NX/nxserver --restart
На локальной машине запускаем клиент NoMachine, устанавливаем соединение с удаленной машиной, нажимаем комбинацию клавиш Ctrl+Alt+0 и проверем, что передача звука с сервера на клиент включена (нет «красного крестика»):

На удаленной машине запускаем команду на проигрывание звукового файла:
paplay /usr/share/sounds/alsa/Side_Left.wav
Звук должен быть слышен в динамиках локальной машины.
Проверка микрофона
Чтобы включить передачу микрофона с клиента на сервер, нажимаем комбинацию клавиш Ctrl+Alt+0, кликаем по Вход микрофона и нажимаем Включить микрофон.

Возвращаемся на рабочий стол удаленной машины, нажимая на стрелку <.
Кликнув в системном трее на микрофон, выбираем микрофон Remapped nx_voice_out.

Кликнув на Audio mixer, в открывшемся окне, в разделе Recording выбираем Monitor of NoMachine Output.

Запускаем запись 5-ти секунд звука на удаленной машине:
arecord -f cd -d 5 test.wav
В эти 5 секунд говорим что-нибудь в микрофон локальной машины.
Прослушаем получившуюся запись:
paplay test.wav
Должны услышать, что сказали в микрофон.
Вывод
Мне для работы был нужен не просто удаленный рабочий стол, а со звуком. Т.е. локальные динамики должны проигрывать звуки удаленной машины, а звук с локального микрофона должен передаваться на удаленную машину. Удаленный рабочий стол по протоколу VNC не подошел, пришлось бы отдельно прикручивать звук. А в NoMachine звук работает «из коробки».
Все вопросы, пожалуйста, пишите в комментариях под статьей.
Комментарии