Remmina - графический интерфейс с адресной книгой для протоколов удалённого доступа. Каждый поддерживаемый протокол модуль.
Модуль VNC Remmina - один из модулей, отвечает за поддержку VNC. Его техническое название: remmina-plugin-vnc.

Мне не удалось найти в Интернете документацию по настройкам этого модуля, предложенным в графическом интерфейсе Remmina. Я разбирался как устроен VNC, читал обсуждения на GitLab, в которых пользователи просили разработчиков Remmina добавить функции или решить проблемы, собирал информацию по разным уголкам Интернета и проверял путём экспериментов. Я запишу сюда в удобном формате то что узнал, на случай если кто-то тоже будет это искать.

Условности
Я использую Remmina и модуль версии 1.4.29 с русской локализацией и буду называть элементы интерфейса так, как они называются у меня. Я буду прикладывать скриншоты, на которых видны эти названия, чтобы по их расположению Вы могли понять, о чём я, даже если используете другую версию и локализацию.

Настройка кодирования

В интерфейсе это называется "Отмена предустановленных кодировок VNC".
Самое интересное и непонятное. Ради этого я и затеил всё это изучение и написание этой статьи. VNC захватывает экран на сервере и транслирует изображение на клиент. В этом параметре можно указать, как именно стоит обработать изображение перед отправкой. Это сильнее всего влияет на скорость удалённого управления и нагрузку на сеть и процессор.

Скрытый текст

Стоит знать перед началом

  • Изображение обрабатывается алгоритмами последовательно, порядок их перечисления имеет значение.

  • Некоторые алгоритмы нельзя применить если ранее применён не совместимый алгоритм. Они игнорируются.

  • В Remmina алгоритмы перечислены в порядке относительно клиента. Сервер будет применять их в обратном порядке - от последнего к первому.

  • VNC передаёт скриншоты. Это не стриминг подобный тому что используется в видеозвонках, трансляциях на мультимедиа площадках, в онлайн-телевидении.

  • Нет настройки "Частота кадров". Как только очередной кадр полностью передан, тут же захватывается и начинает передаваться следующий.

  • Нет жёсткого стандарта, отвечающего за протокол VNC. Я использую x11vnc версии 0.9.16-9 как VNC-сервер. В моей реальности VNC работает именно так. Другие VNC-серверы могут работать иначе и иметь другой набор функций.

Если строка пустая, используется одна из 4-х предустановленных последовательностей, в зависимости от параметра "Качество" на вкладке "Основные". Их можно посмотреть в подсказке при наведении курсора на строку. Та подсказка так же является полным списком возможных алгоритмов. Ниже я постарался по простому описать каждый алгоритм. Алгоритм RAW обязательный и он всегда последний в строке. Если не указать его, он подставится автоматически. Если указать его не последним, всё что после него игнорируется. Не забываем, что если он последний в строке, значит сервер применит его к изображению первым

RAW
Самый простой алгоритм. Он проверяет каждый пиксель по очереди. Если пиксель изменился относительно предыдущей проверки - отправляет его новое состояние, если не изменился - пропускает.
Низкая нагрузка на процессор, но предполагает отправку очень большого объёма трафика по сети.

RRE
Ищет идущие подряд одинаковые пиксели и превращает их в последовательности.
Превращает вот такое: "B G G G R G R R R R R R R G B B B B" в такое: "B 3G R G 6R G 4B".
Это немного экономит сетевой трафик.

HEXTILE
Делит весь экран на квадраты 16x16 пикселей, для каждого квадрата индивидуально выбирает RAW или RRE. В рамках одного кадра квадраты передаются не по порядку, выбирается оптимальная последовательность их передачи.
Повышает скорость, экономит сетевой трафик, на доли секунды будут заметны артефакты при перемещении окон, анимациях интерфеса и видео.
Например такие:

Скрытый текст

CORRE
Обнаруживает прямоугольники, содержащие только пиксели одного цвета и передаёт цвет только один раз для всего прямоугольника.
Экономит сетевой трафик, немного повышает скорость и нагрузку на процессор.

COPYRECT
Сообщает о прямоугольниках которые нужно скопировать на клиенте а не передавать. Если на экране есть одинаковые области (например несколько идеально одинаковых окон, обои в режиме "Замостить"), или если относительно предыдущего кадра какая-то область переместилась в другое место, но сама по себе не изменилась (например перетащили окно, продвинулась строка прогресса).
Экономит сетевой трафик, но добавляет нагрузки на процессор.

ZLIB
Сжатие без потери качества. Это можно сравнить с 7-Zip и WinRAR. В некоторых его реализациях пользователю дают возможность настроить силу сжатия, но в Remmina это зашито в код.
Сильно экономит сетевой трафик, но так же сильно повышает нагрузку на процессор и немного снижает скорость.
Так же пропадёт вертикальная синхронизация.
На доли секунды можно увидеть такое:

Скрытый текст

ZRLE
Тоже сжатие без потери качества. По сравнению с ZLIB ещё сильнее экономит сетевой трафик, немного быстрее, ещё выше нагрузка на процессор.

TIGHT
Тоже сжатие, но с потерей качества. Он комбинирует в себе описанный выше алгоритм ZLIB, и алгоритм JPEG - удаление некоторых не обязательных данных, ценой пиксилизации и небольших цветовых артефактов в тех областях изображения, где они меньше всего заметны.
В некоторых его реализациях пользователю дают возможность отдельно настроить силу сжатия ZLIB и JPEG. В Remmina есть 4 градации сжатия JPEG в параметре "Качество". Сила сжатия ZLIB зашита в код.
По сравнению с ZLIB сильнее экономит сетевой трафик, быстрее, меньше нагрузки на процессор, но он снижает качество изображения.

ULTRA
Применяет алгоритм сжатия LZO, предназначенный для сжатия и распаковки в реальном времени.
Экономит сетевой трафик, почти не влияет на скорость, повышает нагрузку на процессор.

Мои шаблоны

Так же приведу несколько последовательностей, которые я протестировал, отладил, и использую в своей жизни.

tight zlib copyrect hextile corre rre raw

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

tight zrlib zrle ultra copyrect hextile corre rre raw

Так я делаю в местах с медленным интернетом, лимитных подключениях вроде мобильного Интернета, и общественных WI-FI, чтобы ни кому не мешать своим трафиком. Но стоит учесть что на слабых клиенте и сервере 4 алгоритма сжатия дают ощутимую нагрузку на процессор.

tight copyrect hextile corre rre raw

Иногда нужна скорость и за неё придётся заплатить сетевым трафиком. За то нагрузки на процессор будет меньше. В общественных сетях это будет не очень вежливо.

raw

Да, так тоже можно и это работает очень быстро. Но только на localhost, где задержка близка к нулю, а пропускная способность - к бесконечности. Например для управления консолью виртуальных машин QEMU. Я использую это когда играю в игры на виртуальных машинах. В физических сетях, даже через гигабитное соединение точка-точка, патчкордом длинной в 1 метр не получится передать даже 30 кадров в секунду при мониторе 1280x720.

Скрытый текст
copyrect hextile corre rre raw

Это всё так же быстро как предыдущее, но с такой последовательностью того же гигабитного прямого соединения, на пределе возможностей, хватит на почти стабильные 60 кадров в секунду при мониторе 1920x1080. Но лишь пока соединение прямое. Даже мощный промышленный коммутатор на пути будет помехой, не говоря уже о домашних. Так можно играть в игры и смотреть видео на дополнительном ПК, стоящим рядом с основным. Но действительно ли нужно использовать VNC в такой ситуации...

Вкладка "Основные"

Ну и рассмотрим остальные настройки VNC, доступные в графическом интерфейсе Remmina.

Скрытый текст

Сервер
Если нужно подключиться к VNC-серверу напрямую, здесь указывается IP или имя с портом, если через VNC-повторитель - то ID сервера.

Повторитель
Заполняется только если требуется использовать VNC-повторитель, указывается IP или имя повторителя с портом.
В такой конфигурации VNC-серверу не обязательно иметь выделенный IP, но VNC-повторителю обязательно. Сервер обращается к повторителю и поддерживает это соединение даже когда нет VNC-клиентов. VNC-клиенты обращаются к повторителю по его выделенному IP, а он в свою очередь ретранслирует трафик на VNC-сервер через то соединение, которое VNC-сервер сам инициирует и поддерживает.
Это может быть полезно когда есть несколько перемещающихся VNC-серверов: например корпоративные ноутбуки, которые сотрудники носят с собой, подключают к Интернету дома, в кафе, в дороге, раздавая с телефона. И системному администратору нужно обслуживать эти ноутбуки. Или когда есть множество VNC-серверов и всего один выделенный IP и порт: например офис со стационарными ПК и пользователями, которые иногда работают удалённо, и по какой-то причине невозможно использовать VPN для удалённого доступа.
Подробнее про повторители можно прочитать здесь: [UltraVNC как замена TeamViewer]

Имя пользователя
Некоторые VNC-серверы могут использовать учётные записи вместо привычного VNC-пароля. У x11vnc такой функции нет, он игнорирует этот параметр. Некоторые VNC-серверы могут считать это ошибкой.

Пароль пользователя
Это просто VNC-пароль привычный нам. Не зависит от "Имя пользователя", может быть пустым, если VNC-сервер не защищён паролем. Если пароль всё же нужен, он будет запрошен при подключении.
Стоит учесть что если указать пароль здесь и сохранить параметры, пароль сохранится в открытом виде, и его получиться посмотреть любым текстовым редактором.
Существуют модули, которые перенаправляют эти пароли в бумажник (Walet), где они хранятся в зашифрованном виде. Чтобы их достать, понадобится пароль от бумажника.
remmina-plugin-secret для бумажника GNOME Keyring
remmina-plugin-kwallet для бумажника KWalet

Глубина цвета
Сообщает VNC-серверу что нужно отправлять изображение с такой глубиной цвета. Чем меньше - тем меньше трафика нужно передавать по сети. Но стоит учесть что если выбрано меньше чем 32, VNC-серверу придётся конвертировать изображение, это снижает скорость и добавляет нагрузки. Можно выбрать 32, 16, или 8. Я не нашёл способа выбрать другое значение. Это делается перед применением алгоритмов кодирования, описанных выше, ни как не влияет на них.

Качество
Если строка "Отмена предустановленных кодировок VNC", упомянутая выше, пустая, параметр "Качество" определяет чем будет заполнена эта строка. Если она заполнена и используется алгоритм TIGHT, влияет на силу сжатия JPEG. В остальных случая не влияет ни на что.

Раскладка клавиатуры
Если здесь пусто, нажатые на клавиши отправляются VNC-серверу без изменений. Это отлично работает когда на VNC-клиенте используется раскладка классическая 105 клавиш Английская (США), а на VNC-сервере такая же или классическая 105 клавиш Русская (Россия). Стоит учесть что VNC-клиент получает буквы а не клавиши и на него влияет раскладка на компьютере, где запущен VNC-клиент.
Если используются необычные раскладки клавиатуры, могут возникнуть проблемы. Чтобы решить их, можно добавить профиль с правилами, согласно которым нажатые на клавиатуре клавиши будут конвертироваться перед отправкой на VNC-сервер.
Это делается в файле ~/.config/remmina/remmina.keymap
Если файл пуст, в списке будут профили по умолчанию. Если заполнить файл, они пропадут, будут только Ваши профили. Изменения вступят в силу после перезапуска Remmina.

Скрытый текст

Вкладка "Дополнительно"

Скрытый текст

Принудительное жёсткое кодирование
Настаивать на использовании алгоритма TIGHT, даже если он не перечислен в строке "Отмена предустановленных кодировок VNC", даже если VNC-сервер считает что его не стоит использовать. Это может помочь решить проблемы с некоторыми VNC-серверами (например VirtualBox, ради которого эту настройку и добавили), но некоторые VNC-серверы могут разорвать соединение или вовсе закрыться с ошибкой.

Отключить плавную прокрутку
Когда разрешение экрана VNC-сервера больше чем у VNC-клиента, можно использовать прокрутку или масштабирование (при открытом подключении кнопки инструментов с краю окна). Этот параметр убирает с окна Remmina опцию плавной прокрутки, то есть "GDK_SMOOTH_SCROLL_MASK". Это может быть полезно в очень старых или особенных графических окружениях. Я таких ни разу не встречал.

Забыть пароль после использования
Отключит возможность поставить галочку "Запомнить пароль" в окне запроса VNC-пароля, которое появляется при подключении.

Скрытый текст

Игнорировать сообщения удалённого звонка
В GNU Linux есть функция воспроизведения сигнала на beeper (его так же называют "пищалка BIOS"). Если эта функция вызывается на VNC-сервере, то по умолчанию на VNC-клиенте она так же будет вызываться. Разумеется если на обоих узлах соблюдены все условия для её работы. Эта галочка отключает описанное выше.

Запретить локальное взаимодействие на сервере
VNC-клиент сообщит VNC-серверу что нужно блокировать физические устройства ввода. Но не у всех VNC-серверов есть такая функция. У x11vnc такой нет.

Показывать удалённый курсор
В X11 по умолчанию захват экрана даёт изображение без курсора. На окне VNC-клиента будет виден только локальный курсор, удалённый хоть и не отображается, но следует за ним. Этот параметр сообщает что VNC-сервер должен дорисовывать курсор на изображение. В VNC-клиенте будет видно 2 курсора, удалённый всегда будет немного отставать от локального. Как правило это только мешает.
И по неизвестной мне причине в x11vnc это сильно снижает скорость.

Отключить синхронизацию буфера обмена
Теоретически буфер обмена VNC-клиента и VNC-сервера должны постоянно синхронизироваться, этот параметр это отключает. Я не видел ни одной реализации VNC в которой это работало правильно. Теряются некоторые символы, синхронизация часто сама по себе отключается или начинает работать только в одну сторону. Я всегда включаю этот параметр и передаю текст другим способом.

Использовать шифрование TLS
Сообщить VNC-серверу что VNC-клиент может использовать шифрование соединения TLS. Но если на сервере не включено или не поддерживается шифрование - будет установлено соединение без шифрования. Да, VNC чаще всего работает вовсе без шифрования. Можно сниффить трафик и смотреть прямую трансляцию. И VNC-пароль так же можно перехватить.

Только просмотр
Не обращать внимания на ввод с клавиатуры и мыши в окно VNC-клиента. VNC-сервер не узнает об этом параметре.

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


  1. chernish2
    08.06.2025 19:36

    За Remmina сразу плюс! Добавил в закладки