Запуск процесса GUI на удаленном компьютере с Windows через SSH

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

Я хотел бы запустить процесс на удаленном компьютере через SSH и чтобы графический интерфейс этого процесса открылся на одном из дисплеев удаленного компьютера.

Удаленный компьютер работает под управлением Windows (10 или 11)

Пример

Чтобы объяснить, что я имею в виду, вот как это работает на удаленном компьютере с Linux (работающем с xserver):

  1. Подключитесь к удаленному компьютеру с Linux через SSH
  2. Установите переменную окружения $DISPLAY в значение :0 или любой другой ID дисплея.
  3. Запустите процесс. Теперь процесс появится на экране удаленного компьютера.

Вот полная команда, которую я протестировал на удаленном Ubuntu 22.04 (но она должна работать на любом Linux, работающем с xserver):

ssh <remote_user>@<remote_ip> "export DISPLAY=:0 && gedit"

Моя попытка

В Windows, я могу запустить процесс в Windows удаленно с помощью ssh <remote_user>@<remote_ip> "notepad.exe". Однако графический интерфейс окна не появляется на удаленном дисплее.

Я вижу, что процесс появляется в списке задач, так что он выполняется нормально, но графический интерфейс просто не появляется.

Итак, чтобы повторить мой вопрос, как мне сделать так, чтобы он появился?
И чтобы было абсолютно ясно: я не хочу, чтобы графический интерфейс открылся на моем локальном ПК (ПК, с которого я подключаюсь). Я хочу, чтобы он появился на удаленном дисплее (компьютера, к которому я подключаюсь)

Лучший способ, который я нашел, – создать запланированную задачу и вызвать ее, см. https://serverfault.com/a/1160137/30441

Включая фактический ответ из этой ссылки здесь (благодарность Кристиану Димитрову)

Вы можете это сделать. Допустим, вы подключены к удаленной машине через SSH с пользователем ‘office’ и хотите запустить Mozilla Firefox. Сначала нужно создать запланированную задачу:

$User = "office"
$Firefox = New-ScheduledTaskAction -Execute "C:\Program Files\Mozilla Firefox\firefox.exe"
Register-ScheduledTask -TaskName "Firefox" -User $User -Action $Firefox

Затем вы можете выполнить ее, запустив следующую команду:

Start-ScheduledTask -TaskName "Firefox"

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

Подключение к удаленным системам и запуск графических интерфейсов через SSH может оказаться нетривиальной задачей, особенно когда речь идет о системе на базе Windows. В отличие от Linux, где использование X Server позволяет легко перенаправить графические приложения на удаленные дисплеи, Windows требует иного подхода. Рассмотрим, как можно решить данную задачу, используя подход с созданием и запуском запланированной задачи.

Теория

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

Для Windows системы, к сожалению, такого прямого функционала нет. Когда SSH используется для подключения к Windows, процессы запускаются в контексте среды терминального сервера, которая не привязана к реальному рабочему столу. Это объясняет, почему при удаленном запуске приложения через SSH мы видим процесс в списке, но не видим его графический интерфейс на экране.

Пример

Для демонстрации используем ситуацию, когда необходимо запустить графическое приложение, например, Notepad или Firefox, на удаленной машине с Windows, при этом его интерфейс должен быть видимым на самом удаленном компьютере. Решение состоит в использовании диспетчера задач Windows, который позволяет запускать приложения в реальном пользовательском контексте рабочего стола.

Применение

Шаг 1: Создание запланированной задачи

Для того, чтобы запустить приложение как полноправную часть рабочего стола, необходимо создать запланированную задачу. Это можно сделать с помощью PowerShell:

  1. Откройте PowerShell на удаленной машине.
  2. Создайте действие, которое будет запускать необходимое приложение (Firefox в качестве примера):

    $User = "office"  # замените на необходимое имя пользователя
    $Action = New-ScheduledTaskAction -Execute "C:\Program Files\Mozilla Firefox\firefox.exe"
    Register-ScheduledTask -TaskName "RunFirefox" -User $User -Action $Action

    Здесь -Execute указывает на полный путь к исполняемому файлу вашего приложения.

Шаг 2: Запуск задачи

После создания задачи достаточно вызвать её запуск через PowerShell или командную строку:

Start-ScheduledTask -TaskName "RunFirefox"

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

Особенности и уточнения

  • Права доступа: Убедитесь, что учетная запись, от имени которой создается задача, обладает достаточными правами для запуска приложений в интерактивном режиме рабочего стола.

  • Безопасность: Осуществление подобных действий может повысить риски безопасности, так как предполагается автоматический запуск задач с пользовательскими правами. Настоятельно рекомендуется проверять конфиги запланированных задач и управлять правами доступа к используемым приложениям.

Заключение

Данный метод демонстрирует, как можно обойти ограничения Windows в плане отображения графического интерфейса для удаленно запущенных задач. Хотя это может показаться сложнее, чем в Linux-системах, правильная настройка позволяет достичь запланированного результата. Главное — осознание рисков безопасности и поддержание строгого контроля доступа к конфигурациям системы.

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

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