Вопрос или проблема
У меня на ноутбуке установлена 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) для вашей ситуации:
-
Конфигурация SSH:
Убедитесь, что на вашем Raspberry Pi в файле
/etc/ssh/sshd_config
стоитX11Forwarding yes
. Это позволит разрешить перенаправление X11. Ваши настройки выглядят корректно.На вашем ноутбуке в файле
/etc/ssh/ssh_config
должны быть включены параметрыForwardX11 yes
иForwardAgent yes
, как у вас указано. Это позволяет вашему локальному SSH-клиенту запрашивать перенаправление X11. -
Команда для подключения:
Используйте команду:
ssh -X [email protected]
Здесь,
[email protected]
замените на фактический IP-адрес или домен Pi. -
Проверка установки X-приложений:
Ошибка
bash: line 1: xeyes: command not found
означает, что приложениеxeyes
не установлено на Raspberry Pi. На Raspberry Pi командойsudo apt install x11-apps
установите необходимый пакет с X-приложениями, к которому относится иxeyes
. -
Компиляция и запуск вашего C++ приложения:
Если у вас есть C++ программа с GUI на вашем ноутбуке, и вы хотите её запускать на Raspberry Pi, убедитесь, что библиотеки, требуемые для её работы (например, Qt или GTK), установлены на Pi. Компилируйте ваше приложение на Raspberry Pi, а затем запускайте его, используя SSH-сесію.
-
Проверка процесса:
Запустив приложение на Pi через SSH, ваша программа должна открыться на экране ноутбука. Убедитесь, что у вас работает сервер X на локальной машине (ноутбуке), так как это необходимо для показа графического интерфейса.
-
Версии OpenSSH:
С точки зрения поддержания базовой функциональности перенаправления X11, версии OpenSSH играют незначительную роль, пока они поддерживают эту возможность. У вас установки OpenSSH достаточно современные, чтобы обеспечить поддержку X11 Forwarding.
-
Диагностика перезапуска SSHD:
Если вы изменяли файл конфигурации
sshd_config
, помните, что на Raspberry Pi может потребоваться перезапуск служба SSHD с помощью командыsudo systemctl restart ssh
, чтобы применить изменения.
Подводя итог, важно понять, что в каждом из используемых вами сценариев машинные роли клиента и сервера могут различаться в зависимости от контекста – будь то SSH или X11. Правильная настройка конфигурационных файлов и установка необходимых приложений способствует успешности выполнения задачи.