Linux

X11 Forwarding не работает: пошаговая настройка в Linux

Эта статья объясняет, почему X11 Forwarding может не работать в Linux, и предоставляет пошаговые решения для настройки SSH, xauth и совместимости с Wayland. Вы сможете запускать графические приложения на удалённом сервере и видеть их интерфейс локально.

Обновлено 14 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04+Debian 11+CentOS 8+/RHEL 8+OpenSSH 7.6+

Почему X11 Forwarding не работает?

X11 Forwarding — это механизм SSH, который позволяет запускать графические приложения на удалённом Linux-сервере, отображая их окна на вашем локальном компьютере. Проблемы с его работой возникают обычно из-за:

  • Отключённой опции в конфигурации SSH-демона (sshd_config).
  • Отсутствия пакета xauth на сервере, который управляет X-авторизацией.
  • Конфликта с современной системой отображения Wayland на клиенте (особенно в Ubuntu 22.04+ и Fedora).
  • Неправильного использования флагов -X (недоверенный) и -Y (доверенный) при подключении.
  • Проблем с сетевым доступом или переменной окружения DISPLAY.

Эта инструкция поможет последовательно диагностировать и исправить проблему на стороне как сервера, так и клиента.

Шаг 1: Проверка локального SSH-клиента

Прежде чем менять настройки сервера, убедитесь, что ваш локальный SSH-клиент разрешает X11 Forwarding.

  1. Откройте терминал на вашем компьютере (Linux/macOS) или PowerShell/WSL на Windows.
  2. Проверьте основной конфиг клиента:
    grep -i forwardx11 /etc/ssh/ssh_config
    
    Должна быть строка ForwardX11 yes или ForwardX11Trusted yes. Если строка отсутствует или стоит no, добавьте её в конец файла (требуются права sudo) или создайте/дополните личный конфиг ~/.ssh/config:
    Host *
        ForwardX11 yes
        ForwardX11Trusted yes
    

    💡 Совет: Использование ForwardX11Trusted yes (соответствует флагу ssh -Y) решает большинство проблем с правами доступа к X-серверу, но имеет меньшую изоляцию безопасности. Для доверенных внутренних сетей это допустимо.

Шаг 2: Настройка SSH-демона на сервере (sshd_config)

На удалённом сервере нужно убедиться, что демон sshd настроен на приём X11-запросов.

  1. Подключитесь к серверу обычным способом (без -X):
    ssh user@ваш_сервер
    
  2. Отредактируйте конфигурационный файл sshd_config (обычно /etc/ssh/sshd_config):
    sudo nano /etc/ssh/sshd_config
    
  3. Найдите и раскомментируйте (удалите #) или добавьте следующие строки:
    X11Forwarding yes
    X11DisplayOffset 10
    X11UseLocalhost yes
    
    • X11Forwarding yes — включает механизм.
    • X11DisplayOffset 10 — стандартный сдвиг для номеров дисплеев.
    • X11UseLocalhost yes — привязывает форвардинг к localhost (безопаснее).
  4. Важно: Убедитесь, что в этом же файле нет строки X11Forwarding no или она не переопределяет нашу.
  5. Сохраните файл и перезапустите службу SSH:
    # Для systemd (большинство современных дистрибутивов)
    sudo systemctl restart sshd
    
    # Или для старых систем (SysVinit)
    sudo service ssh restart
    

Шаг 3: Установка и проверка пакета xauth

Пакет xauth критически важен. Он хранит и управляет "cookies" (токенами) для аутентификации X-клиентов.

  1. Проверьте, установлен ли он:
    which xauth
    
    Если команда ничего не вывела или xauth not found, устанавливайте:
    # Для Debian/Ubuntu
    sudo apt update && sudo apt install xauth
    
    # Для RHEL/CentOS 8+ / Rocky / AlmaLinux
    sudo dnf install xauth
    
    # Для CentOS 7 / RHEL 7
    sudo yum install xauth
    
  2. После установки переподключитесь к серверу с флагом -Y (доверенный форвардинг):
    ssh -Y user@ваш_сервер
    

Шаг 4: Диагностика после подключения

После подключения с флагом -Y выполните на сервере несколько команд для проверки состояния.

  1. Проверка переменной DISPLAY:
    echo $DISPLAY
    
    Ожидаемый результат: localhost:10.0 (или localhost:11.0 и т.д.). Если вывод пустой или содержит :0 — форвардинг не активировался.
  2. Проверка токена xauth:
    xauth list
    
    Вывод должен содержать запись для дисплея, который указан в $DISPLAY (например, hostname/unix:10). Если список пуст — проблема с генерацией cookies.
  3. Просмотр логов подключения: На клиенте при подключении можно добавить флаги подробного вывода:
    ssh -Yv user@ваш_сервер
    
    Ищите в выводе строки X11 forwarding request accepted и Allocated X11 display. На сервере проверяйте логи sshd:
    sudo journalctl -u sshd -f
    
    (в отдельном терминале, пока вы пытаетесь подключиться). Ищите ошибки X11 connection refused или xauth: unable to open display.

Шаг 5: Решение проблем с Wayland на клиенте

Если ваш локальный компьютер (особенно Ubuntu 22.04, Fedora 36+) использует Wayland вместо Xorg по умолчанию, классический X11 Forwarding может не работать.

  1. Временное решение: На экране входа в систему (GDM/LightDM) перед вводом пароля выберите сессию "Ubuntu on Xorg" (или аналогичную) вместо "Ubuntu on Wayland". После этого перезайдите в систему и попробуйте подключиться заново.
  2. Постоянное решение (если возможно): Отключите Wayland в конфиге GDM, отредактировав /etc/gdm3/custom.conf (для Ubuntu) или /etc/gdm/custom.conf:
    #WaylandEnable=false
    
    (раскомментируйте строку). Затем перезагрузите систему.
  3. Альтернатива для Wayland: Используйте xwayland — слой совместимости, который обычно установлен по умолчанию. Убедитесь, что он работает: echo $XDG_SESSION_TYPE должен вывести x11 после переключения на Xorg-сессию. Для чистого Wayland без переключения сессии X11 Forwarding работать не будет.

Шаг 6: Альтернативные варианты (если ничего не помогает)

Если настройки верны, но приложения всё равно не запускаются, попробуйте:

  • Использовать ssh -X вместо -Y (и наоборот). Некоторые приложения (например, sudo gedit) требуют -Y для доверенного канала.
  • Запускать приложения с отключённым доступом к ядру: xhost +SI:localuser:root (на локальной машине, небезопасно!) или используйте sudo -E на сервере, чтобы передать переменную DISPLAY.
  • Настроить туннель вручную: В крайнем случае можно вручную пробросить порт X11-сервера (обычно 6000+display), но это сложнее и менее безопасно.
  • Использовать VNC или RDP: Если X11 Forwarding нестабилен, настройте VNC-сервер (например, TigerVNC) или RDP-сервер (xrdp) на удалённой машине. Это передаст весь рабочий стол, но потребует дополнительных ресурсов и отдельного клиента.

⚠️ Важно: Никогда не используйте xhost + (разрешить всем) на рабочей машине. Это серьёзная уязвимость безопасности, позволяющая любому локальному приложению перехватывать ввод и экран.

Частые вопросы

Можно ли использовать X11 Forwarding через Windows? Да, но нужен X-сервер для Windows, например, VcXsrv или Xming. Установите его, запустите, разрешив «Disable access control». Затем в WSL2 или PuTTY настройте X11 Forwarding. В PuTTY это опция в Connection -> SSH -> X11.

Что делать, если ошибка Can't open display? Это классическая ошибка. Проверьте по порядку: 1) переменная DISPLAY установлена (echo $DISPLAY), 2) пакет xauth установлен, 3) в sshd_config стоит X11Forwarding yes, 4) вы подключались с флагом -X или -Y, 5) локальный X-сервер (на вашем ПК) запущен (в Linux он обычно есть, в Windows — VcXsrv).

Почему ssh -X работает, а ssh -Y нет (или наоборот)? Флаг -X включает недоверенный форвардинг с ограничениями (например, запрет на подключение к X-серверу от root). Флаг -Y — доверенный, таких ограничений нет. Если приложение требует прав root или расширенных возможностей X, оно может работать только с -Y. Если же на сервере есть вредоносный процесс, -Y потенциально опаснее.

Как отключить X11 Forwarding, если он включён по умолчанию? В ~/.ssh/config добавьте для конкретного хоста:

Host problematic-server
    ForwardX11 no

Или используйте флаг при запуске: ssh -x user@server (строчная буква X).

Заключение

Настройка X11 Forwarding — это цепочка из нескольких компонентов: корректная конфигурация sshd на сервере, наличие xauth, правильные флаги при подключении и совместимость клиентской среды (Xorg vs Wayland). Следуя этому гайду шаг за шагом, вы сможете диагностировать и устранить большинство распространённых сбоев. Если проблема остаётся, проверьте сетевые политики (фаервол) и убедитесь, что на сервере нет ограничений через Match-блоки в sshd_config.

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

Почему X11 Forwarding работает на одном сервере, а на другом нет?
Можно ли использовать X11 Forwarding через macOS?
Что делать, если `xauth` не найден?
Чем X11 Forwarding отличается от VNC?

Полезное

Проверьте поддержку X11 Forwarding в SSH-клиенте
Настройте SSH-демон на сервере
Установите и проверьте `xauth` на сервере
Подключитесь с флагами `-X` или `-Y`
Проверьте переменную окружения `DISPLAY`
Протестируйте запуск графического приложения