Как мне запустить gnome-terminal удаленно на моем headless-сервере? (не удается запустить через переадресацию X11)

Как мне запустить gnome-terminal удаленно на моем headless-сервере? (не удается запустить через переадресацию X11)

У меня есть headless VM (работающая под управлением Ubuntu server 17.04), к которой я подключаюсь через SSH. Я хорошо разбираюсь в основах переадресации X11 и могу нормально пересылать xterm и его друзья. Терминал XFCE также пересылает нормально.

Я хотел бы иметь возможность использовать терминал Gnome, но он, похоже, не запускается. Вместо этого он просто зависает на некоторое время и в конечном итоге выдает ошибку:

Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Error calling StartServiceByName for org.gnome.Terminal: Timeout was reached

Интересно, что gnome-terminal работает удаленно через X11, если на моей виртуальной машине запущен локальный сеанс рабочего стола (запущенный через startx).

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

Кто-нибудь знает, что можно сделать, чтобы Gnome-terminal работал удаленно, без необходимости запускать сеанс графического интерфейса рабочего стола локально на моей виртуальной машине?

решение1

Это не работает, потому что gnome-terminal(как и любой другой)gnome-thing) попытается подключиться к dbus и потерпит неудачу, не получив ответа в течение длительного времени.

Самый простой способ обойти эту проблему — просто запустить экземпляр dbus для вашего сеанса:

export $(dbus-launch)
gnome-terminal

Если вы началиУэйландсессия поудаленныймашина, поскольку вы впервые запустили export $(dbus-launch), вам придется запустить его снова, или, если нет, gnome-terminalзапустится экземпляр Wayland gnome-terminalна удаленном дисплее вместо экземпляра X11 на вашем перенаправленном дисплее.

Другим обходным путем в этом случае является явный запуск X11 gnome-terminal-server, который завершится после закрытия последнего окна, использующего его. Пример:

#! /bin/bash
ID=foo.bar$RANDOM
GDK_BACKEND=x11 /usr/libexec/gnome-terminal-server --app-id "$ID" &
sleep .4        # yuck
gnome-terminal --app-id "$ID"
wait

решение2

Это можно сделать в обычных Ubuntu или Debian, используя всего лишь:

ssh -X user@host dbus-launch gnome-terminal

В моих заметках есть общие флаги, касающиеся dbus-launch: --exit-with-x11или--exit-with-session

Остается проблема в том, что загрузка займет некоторое время.

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

Редактировать: Кроме того, вы можете сделать это, не требуя x11-dbusпакет (который по умолчанию отсутствует в Ubuntu, хотя он и небольшой).

Это работает не на всех gnome-terminalверсиях, но я проверил на Ubuntu 22 и Debian 11, и это работает.

ssh -X user@host gnome-terminal --disable-factory

Различия между этими подходами выходят за рамки стиля/длины терминальной команды.

Первоначальный подход dbus-launchзапустит gnome-terminalэкземпляр в соответствии gnome-terminal-serverс тем, как он взаимодействует с удаленной машиной.

Однако этот --disable-factoryподход запустит gnome-terminalэкземпляр, который более эффективно работает, например, с док-станцией Ubuntu 22.

Надеюсь, что один из этих двух вариантов удовлетворит ваши требования. Есть и другие подходы, но, по моему мнению, эти самые лучшие из-за своей простоты.

решение3

В вашем простом случае переадресации X11 из одного сеанса см. https://askubuntu.com/a/1279065/463121

после входа в систему:

$ dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY

и тогда gnome-terminal будет быстрым и отлично пересылает данные по X11.

Если что-то пойдет не так, возможно, зависли персональные демоны dbus. Если вы можете завершить все пользовательские процессы и войти в систему снова, то все в порядке.

EDIT: Или даже:

$ dbus-update-activation-environment --all

отhttps://unix.stackexchange.com/a/243696/139357

решение4

Запуск приложения через X может быть очень медленным.
У меня был большой успех с туннелированием VNC через SSH с клиентскими системами по всему миру.

На удаленной машине установите VNC-сервер, например tigervnc, и запустите демон. (yum install -y tigervnc-server ; vncserver :3 -или любой другой порт, который вы хотите использовать). Вам будет предложено задать пароль.

На локальной машине установите клиент VNC (yum install -y tigervnc). Вы можете добавить "exec /usr/bin/gnome-terminal" в файл ~/.vnc/xstartup. Затем выполните: ssh -L 5903:localhost:5903 -N -f -l user удаленный-сервер-IP-или-имя-хоста Номер порта здесь будет 59, а выбранный вами номер порта

В другом терминале выполните: vncviewer :3

Вам будет предложено ввести пароль, установленный на сервере.

Связанный контент