LinuxВысокая

Как исправить ошибку VNC Connection Refused в Linux: полное руководство

Статья описывает причины ошибки 'Connection refused' в VNC на Linux и предоставляет практические способы её устранения, от проверки статуса сервера до настройки firewall.

Обновлено 8 апреля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04/22.04Debian 11/12CentOS 7/8Fedora 35+

Что означает ошибка "Connection refused" в VNC

Ошибка "Connection refused" (Отказ в соединении) при подключении к VNC-серверу в Linux означает, что клиент не смог установить TCP-соединение с сервером, потому что сервер активно отклонил запрос. Это происходит, когда сервер не прослушивает указанный порт (по умолчанию 5900 + номер дисплея, например, 5901 для :1), или когда промежуточное устройство (например, firewall) блокирует соединение. В отличие от таймаута, "Connection refused" — это немедленный ответ от целевого хоста, указывающий на отсутствие сервиса на порту.

Причины возникновения

Ошибка "Connection refused" обычно вызвана одной из следующих причин:

  1. VNC-сервер не запущен — серверное приложение (например, Xvnc, TigerVNC) не активно, поэтому порт закрыт.
  2. Сервер привязан только к localhost (127.0.0.1) — по умолчанию многие VNC-серверы слушают только локальные интерфейсы для безопасности, запрещая удалённые подключения.
  3. Firewall блокирует порт VNC — правила firewall (ufw, firewalld, iptables) не разрешают входящие соединения на порт VNC.
  4. Неправильный порт или IP-адрес в клиенте — клиент подключается к неверному адресу или порту (например, использует 5900 вместо 5901 для дисплея :1).
  5. Конфликт портов — другой процесс уже занимает порт, который пытается использовать VNC-сервер, поэтому он не может запуститься.
  6. Ошибки в конфигурации VNC — в файлах конфигурации (например, ~/.vnc/config) указаны неверные параметры, ограничивающие подключения.
  7. Недостаточно прав у пользователя — VNC-сервер требует определённых прав (например, root) для привязки к порту, и при запуске от обычного пользователя может отказать.

Способы решения

Способ 1: Проверка и запуск VNC-сервера

Первым делом убедитесь, что VNC-сервер запущен. Для систем, использующих systemd (Ubuntu, Debian, CentOS, Fedora):

sudo systemctl status vncserver@:1

Если служба неактивна (не показана как "active (running)"), запустите её:

sudo systemctl start vncserver@:1
sudo systemctl enable vncserver@:1  # для автозапуска при загрузке

Для систем без systemd или при ручном запуске проверьте процессы:

ps aux | grep Xvnc

Если процесс не найден, запустите сервер вручную (от имени пользователя, который будет использовать VNC):

vncserver :1

После запуска перейдите к следующему шагу.

Способ 2: Проверка настроек прослушивания

Убедитесь, что VNC-сервер слушает на всех сетевых интерфейсах (0.0.0.0 для IPv4, :: для IPv6), а не только на localhost.

Проверьте, на каком адресе и порту работает сервер:

sudo ss -tulpn | grep :5901  # для дисплея :1 (порт 5901)

Пример корректного вывода:

tcp   LISTEN  0  128  0.0.0.0:5901  0.0.0.0:*  users:(("Xvnc",pid=1234,fd=3))

Если видите 127.0.0.1:5901 или ::1:5901, сервер привязан только к loopback-интерфейсу.

Чтобы разрешить внешние подключения, запустите VNC-сервер с параметром -localhost no:

vncserver :1 -localhost no

Или измените конфигурационный файл (например, ~/.vnc/config), добавив строку:

localhost=no

После изменений перезапустите сервер (sudo systemctl restart vncserver@:1 или остановите и запустите заново).

Способ 3: Настройка firewall

Если на системе активен firewall, он может блокировать входящие соединения на порт VNC. Откройте порт, соответствующий номеру дисплея (для :1 — 5901).

Для ufw (Ubuntu/Debian):

sudo ufw allow 5901/tcp
sudo ufw reload

Для firewalld (CentOS/Fedora):

sudo firewall-cmd --permanent --add-port=5901/tcp
sudo firewall-cmd --reload

Для iptables (старые системы):

sudo iptables -A INPUT -p tcp --dport 5901 -j ACCEPT
sudo service iptables save  # или sudo iptables-save > /etc/iptables/rules.v4

Убедитесь, что правило применяется только к доверенным IP-адресам, если безопасность критична. Проверьте статус firewall:

sudo ufw status  # для ufw
sudo firewall-cmd --list-all  # для firewalld

Способ 4: Проверка конфигурации VNC

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

  • Пользовательская конфигурация: ~/.vnc/config
  • Системная конфигурация: /etc/vnc.conf или /etc/tigervnc/vncserver-config-defaults (для TigerVNC)

Откройте соответствующий файл и проверьте параметры:

  • localhost=no — должно быть установлено для удалённых подключений.
  • SecurityTypes=None — отключение аутентификации не рекомендуется, но может мешать подключению, если клиент ожидает пароль.
  • rfbport — убедитесь, что порт соответствует номеру дисплея (5900 + N).

Если вы вносите изменения, перезапустите VNC-сервер.

Способ 5: Проверка на конфликты портов

Если порт VNC уже занят другим процессом, сервер не сможет его использовать, что приведёт к отказу в соединении.

Узнайте, какой порт использует VNC-сервер (если он запущен):

sudo ss -tulpn | grep Xvnc

Если порт не отображается, возможно, сервер не запустился из-за конфликта. Найдите процесс, занимающий порт 5901:

sudo lsof -i :5901

Завершите конфликтующий процесс (если он не нужен):

sudo kill <PID>

Или запустите VNC-сервер на другом дисплее, например:

vncserver :2  # использует порт 5902

Обновите клиент для подключения к новому порту.

Профилактика

Чтобы избежать повторения ошибки "Connection refused":

  • Явно настройте VNC-сервер на прослушивание внешних интерфейсов — используйте -localhost no или localhost=no в конфигурации.
  • Настройте firewall точечно — открывайте порт VNC только для необходимых IP-адресов или подсетей, а не для всех (0.0.0.0/0).
  • Регулярно обновляйте VNC-сервер — устанавливайте обновления безопасности для предотвращения уязвимостей.
  • Используйте SSH-туннелирование — для защиты трафика VNC, настройте туннель через SSH вместо прямого открытия порта.
  • Мониторьте логи VNC — проверяйте файлы логов в ~/.vnc/*.log при проблемах с запуском или подключением.
  • Проверяйте автозапуск — убедитесь, что служба VNC включена в автозагрузку (sudo systemctl enable vncserver@:1), особенно после перезагрузок.

Часто задаваемые вопросы

Почему возникает ошибка 'Connection refused' при подключении к VNC?
Как проверить, запущен ли VNC-сервер?
Может ли firewall блокировать VNC-подключение?
Что делать, если VNC-сервер слушает только на localhost?

Полезное

Проверьте статус VNC-сервера
Убедитесь, что порт VNC открыт и слушает
Настройте firewall для разрешения порта
Проверьте конфигурацию VNC
Перезапустите VNC-сервер

Эта статья помогла вам решить проблему?