SSH X11 перенаправление Void Linux ноутбук и Raspberry Pi Zero 2W без монитора: что из них клиент, а что сервер?

Вопрос или проблема

У меня на ноутбуке установлена Void Linux с openssh-9.9p2_1.
И Raspberry PI Zero 2W с Raspbian Bullseye и openssh 1:8.4p1-5+deb11u3.
Я хочу использовать Raspberry Pi Zero для чтения данных с шины CAN в моей машине по сети Wi-Fi.

Я читал Как перенаправить X через SSH для удаленного запуска графических приложений? и подозреваю, что я мог перепутать сервер и клиент.

На Raspberry Pi не установлен xorg-server.
У меня есть программа на C++ с графическим интерфейсом, установленная на моем ноутбуке, который работает под управлением Openbox, которую я хочу запустить на Pi для подключения через CAN hat.

На ноутбуке в /etc/ssh/ssh_config:

   ForwardAgent yes
   ForwardX11 yes

На Pi в /etc/ssh/sshd_config:

X11Forwarding yes
X11DisplayOffset 10

С трудом понимаю, как запустить что-либо через ssh -X. В xterm на моем ноутбуке пробовал с простым

ssh -v -X [email protected] xeyes

и получаю (среди прочего)

debug1: Sending command: xeyes
bash: line 1: xeyes: command not found

Имеют ли значение версии openssh?

Должен ли мой ноутбук быть сервером или клиентом?

Или я неправильно запускаю исполняемый файл?

Пожалуйста, помогите глупому парню 🙂

Команда ssh — это клиент ssh. Удаленная машина, на которую вы входите, запускает sshd, и это сервер sshd.

Графический клиент — это приложение, которое генерирует графику. X сервер работает на машине, на которой находится экран.

Таким образом, вы входите по ssh с вашей локальной машины (клиент) на удаленную машину (сервер) и запускаете приложение (клиент) на удаленной машине, которое затем отправляет графику обратно на ваш локальный X сервер…

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

С точки зрения ssh, компьютер, с которого вы выполняете ssh -X, является клиентом, а другой — сервером.

С точки зрения X11, может помочь представить экран как принтер, на который какой-то процесс выводит данные. Компьютер, где происходит рисование, является сервером, а другой — клиентом.

Таким образом, если вы делаете следующее:

user1@computer:~$ ssh -X user2@remote

user2@remote:~$ xeyes

ssh: computer — клиент, remote — сервер

X11: computer — сервер, remote — клиент

Однако, благодаря перенаправлению, вы могли бы быть придирчивым и сказать, что для xeyes фактический сервер находится на remote, как покажет переменная DISPLAY.

Ответ или решение

При решении вопроса о перенаправлении X11 через SSH между ноутбуком с Void Linux и безголовым Raspberry Pi Zero 2W, важно сначала разобраться с ролями клиент-сервер в контексте SSH и X11, особенно учитывая сложность понятий, связанных с этой технологией.

Теория (Theory):

Перенаправление X11 через SSH позволяет запускать графические приложения на удалённой машине, выводя интерфейс на локальной машине. В контексте SSH, та машина, с которой вы запускаете команду ssh -X, является клиентом, а та, на которую вы подключаетесь, является сервером. Однако, в контексте X11, роли меняются: локальная машина, на которой показывается интерфейс, выступает в роли сервера, а удалённая машина (где запускается программа) — клиента.

Пример (Example):

Предположим, вы находитесь на своём ноутбуке с Void Linux и хотите запустить графическое приложение, установленное на Raspberry Pi. Вы используете команду:

ssh -X [email protected]

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

Применение (Application) для вашей ситуации:

  1. Конфигурация SSH:

    Убедитесь, что на вашем Raspberry Pi в файле /etc/ssh/sshd_config стоит X11Forwarding yes. Это позволит разрешить перенаправление X11. Ваши настройки выглядят корректно.

    На вашем ноутбуке в файле /etc/ssh/ssh_config должны быть включены параметры ForwardX11 yes и ForwardAgent yes, как у вас указано. Это позволяет вашему локальному SSH-клиенту запрашивать перенаправление X11.

  2. Команда для подключения:

    Используйте команду:

    ssh -X [email protected]

    Здесь, [email protected] замените на фактический IP-адрес или домен Pi.

  3. Проверка установки X-приложений:

    Ошибка bash: line 1: xeyes: command not found означает, что приложение xeyes не установлено на Raspberry Pi. На Raspberry Pi командой sudo apt install x11-apps установите необходимый пакет с X-приложениями, к которому относится и xeyes.

  4. Компиляция и запуск вашего C++ приложения:

    Если у вас есть C++ программа с GUI на вашем ноутбуке, и вы хотите её запускать на Raspberry Pi, убедитесь, что библиотеки, требуемые для её работы (например, Qt или GTK), установлены на Pi. Компилируйте ваше приложение на Raspberry Pi, а затем запускайте его, используя SSH-сесію.

  5. Проверка процесса:

    Запустив приложение на Pi через SSH, ваша программа должна открыться на экране ноутбука. Убедитесь, что у вас работает сервер X на локальной машине (ноутбуке), так как это необходимо для показа графического интерфейса.

  6. Версии OpenSSH:

    С точки зрения поддержания базовой функциональности перенаправления X11, версии OpenSSH играют незначительную роль, пока они поддерживают эту возможность. У вас установки OpenSSH достаточно современные, чтобы обеспечить поддержку X11 Forwarding.

  7. Диагностика перезапуска SSHD:

    Если вы изменяли файл конфигурации sshd_config, помните, что на Raspberry Pi может потребоваться перезапуск служба SSHD с помощью команды sudo systemctl restart ssh, чтобы применить изменения.

Подводя итог, важно понять, что в каждом из используемых вами сценариев машинные роли клиента и сервера могут различаться в зависимости от контекста – будь то SSH или X11. Правильная настройка конфигурационных файлов и установка необходимых приложений способствует успешности выполнения задачи.

Оцените материал
Добавить комментарий

Капча загружается...