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

10

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

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

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

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

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

--- EDIT: 1) Я не забочусь о выходе GUI - мне нужно только stdout и stderr из моего приложения. - вот почему этот вопрос не дублируется - хорошо знаю google :). Я не хочу перенаправлять вывод в свой собственный графический интерфейс.

    
задан Paweł Wojtal 08.06.2015 в 13:30
источник

3 ответа

16

Если вы не видите, что делает приложение, вы можете предоставить его «виртуальным» x-сервером с помощью xvfb:

  

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

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

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

он запустится в фоновом режиме, а затем вы запустите своих клиентов:

DISPLAY=:10 your-client
    
ответ дан roadmr 08.06.2015 в 15:13
источник
11

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

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
    
ответ дан A.B. 08.06.2015 в 15:37
5

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

[email protected]:~$ ssh [email protected]
[email protected]:~$ export DISPLAY=:0
[email protected]:~$ gedit

Теперь gedit будет запускаться для пользователя с именем testSSH display

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

ssh [email protected] "DISPLAY=:0 nohup gedit"
    
ответ дан Maythux 08.06.2015 в 14:31