Как запустить приложение X из SSH

Я пытался найти эту тему в Google, но без каких-либо существенных результатов.

Мне нужно запустить приложение с графическим интерфейсом из терминала, но мне все равно, что это приложение показывает мне. Кроме того, мне нужно запустить несколько экземпляров этого приложения в разных сеансах. Это связано с некоторыми автоматизированными тестами с графическим интерфейсом, поэтому я знаю, чего хочу, и ищу ответ:).

Я думаю, что надлежащие шаги должны быть:

  1. Начать новый сеанс X Window
  2. Получить мой новый идентификатор сессии
  3. экспортировать его в переменную env (экспорт DISPLAY:13.0)
  4. запустить мое приложение

но я застрял на первом этапе. у кого-нибудь здесь была подобная проблема?

--- РЕДАКТИРОВАТЬ: 1) Меня не волнует вывод графического интерфейса - мне нужны только stdout и stderr из моего приложения. - Вот почему этот вопрос не является дубликатом - хорошо знаю Google:). Я не хочу перенаправлять вывод в мой собственный графический интерфейс.

3 ответа

Решение

Если вы не хотите видеть, что делает приложение, вы можете предоставить ему "виртуальный" x-сервер с xvfb:

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

После установки вы можете запустить его с:

sudo Xvfb :10 -ac -screen 0 1024x768x24 &

он будет работать в фоновом режиме, а затем вы начнете свои клиенты с:

DISPLAY=:10 your-client

Короткая команда:

ssh -X <username>@<host> gedit &

от man ssh

-X      Enables X11 forwarding.
        This can also be specified on a per-host basis in a configuration file.

        X11 forwarding should be enabled with caution.  Users with the
        ability to bypass file permissions on the remote host (for the
        user's X authorization database) can access the local X11
        display through the forwarded connection. An attacker may then
        be able to perform activities such as keystroke monitoring.

  1. Проверьте /etc/ssh/sshd_config на стороне сервера:

    sudo nano /etc/ssh/sshd_config
    

    для строк ниже:

    X11Forwarding yes
    X11UseLocalhost no
    

    Перезапустите ssh srever, если вы внесли изменения:

    sudo service ssh restart
    
  2. Проверьте /etc/ssh/ssh_config на стороне клиента:

    sudo nano /etc/ssh/ssh_config
    

    для строк ниже

    ForwardX11 yes
    ForwardX11Trusted yes
    

Вам просто нужно запустить экспорт DISPLAY=:id# в вашем сеансе SSH, и программы будут работать на удаленном дисплее. Быстрый пример:

maythux@maythuxPC:~$ ssh testSSH@myServer
maythux@maythuxPC:~$ export DISPLAY=:0
maythux@maythuxPC:~$ gedit

Сейчас gedit будет работать на дисплее пользователя с именем testSSH

Вы можете сократить все это до одной команды:

ssh testSSH@myServer "DISPLAY=:0 nohup gedit"
Другие вопросы по тегам