2

Я хочу запустить приложение с графическим интерфейсом на удаленной машине, к которой у меня есть доступ только по ssh. Мне не нужно или не хочется видеть окно графического интерфейса. (Я знаю, что мог бы использовать что-то вроде ssh -C -X remote_server если бы хотел, чтобы графический интерфейс был на моем клиенте.)

Я знаю, что X работает на удаленной машине, поскольку ps показывает это:

root  ... /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp vt7

Я установил DISPLAY=:0.0 но затем я получаю «Xlib: connection to»: 0.0 "отказано сервером", когда я пытаюсь его использовать.

В Get remote x display работает в Linux без туннелирования ssh, а Xserver не работает, если только DISPLAY = 0.0. Я вижу совет использовать gdmsetup, чтобы позволить X прослушивать TCP. Но gdmsetup - это приложение с графическим интерфейсом! И попытка запустить его через ssh -X не сработала («X11-соединение отклонено из-за неправильной аутентификации»).

Итак, есть ли текстовый файл, который я могу отредактировать, чтобы удалить -nolisten? И после его редактирования как безопасно перезапустить X удаленно? (На этом компьютере запущены другие функции, поэтому запрос перезагрузки возможен, но нежелателен.) Если нет, должен ли gdmsetup работать через ssh, и я должен продолжать в этом направлении?

ОБНОВЛЕНИЕ: я должен был сделать сессию ssh -X как root (ssh как обычный пользователь, затем sudo или su, не работает.) Итак, я сделал редактирование с помощью gdmsetup. Затем я перезапустил X с помощью gdm-restart . Я также сделал xhost + из этой сессии ssh -X. Строка ps больше не отображает часть -nolisten tcp . Но все равно не повезло, подключившись к нему, либо DISPLAY=:0 либо DISPLAY=localhost:0

ОБНОВЛЕНИЕ № 2: Я только что заметил причину, по которой xauth + не помог (когда это было сделано через ssh -X) в том, что он изменил мою клиентскую машину, а не удаленный сервер! К сожалению. Хорошая работа, я был внутри брандмауэра! (Я думаю, что причина, по которой это произошло, была связана с переменной среды XAUTHORITY, см. Ответ Кугар.)

3 ответа3

2

как вам кажется, вы хотите, чтобы ваше приложение сейчас подключалось к корневому сеансу: gdm - экран входа в систему.

почему бы вам просто не запустить свой собственный xserver и свою программу:

%> startx /your/program -- :1

(Добавлено Дарреном) Именно это я и сделал. В одном сеансе ssh станьте пользователем root и введите:

startx -- :1 &
export DISPLAY=:1
xhost + &

Затем в другой сессии ssh, обычный пользователь:

export DISPLAY=:1
xclock

(Просто использую xclock в качестве теста.)

1

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

Одним из способов является использование xhost и предоставление разрешений для каждого IP-адреса, но это крайне небезопасно, поскольку любая программа, работающая на этом компьютере (или любая машина, если вы просто используете +), может автоматически подключаться к вашему серверу X dislpay.

Распространенным способом является использование авторитетного файла X. Тогда вам просто нужно знать этот файл и иметь к нему доступ. Теперь это зависит от распространения, если этот файл.Xauthority в вашем домашнем каталоге или это какой-то временный файл, настроенный каждый раз, когда вы запускаете X сеанс.

В первом случае все работает "из коробки", во втором случае вам нужно знать это временное имя файла. Один из способов выяснить это - посмотреть на переменную XAUTHORITY в среде некоторой программы (например, windowmanager), уже запущенной на вашем X-сервере. Вы можете легко получить переменные окружения из файла /proc /PID / environment:

cat /proc/12345/environ | xargs -0 -L 1 echo | grep XAUTHORITY

Затем просто экспортируйте переменные XAUTHORITY и DISPLAY в вашу оболочку и запустите вашу программу

0

Похоже, вы идете на многое, чтобы заставить его работать. В качестве альтернативы я мог бы порекомендовать установить FreeNX на удаленный компьютер и получить к нему доступ с помощью NXClient. Вы получите полный удаленный рабочий стол через ssh, и вы сможете просто открыть окно терминала и запустить ваше приложение. Это займет меньше времени, чем попытка выяснить туннелирование с помощью ssh.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .