Но бывает так, что при выполнении такой команды окно приложения открывается не на host, а на некой третьей машине.
Вероятно, это проблема конфигурации этих машин. Система на них устанавливается по автоматизировано сети.
Подскажите пожалуйста по какой причине может такое приходить ?
Здравствуйте, Maveric_, Вы писали:
M_>Подскажите пожалуйста по какой причине может такое приходить ?
По такой причине, что приложение откуда-то должно брать адрес x-сервера. И оно берёт из переменной окружения, обычно, а если там указан не тот адрес — то не там и откроется.
Здравствуйте, Слава, Вы писали:
С>Здравствуйте, Maveric_, Вы писали:
M_>>Подскажите пожалуйста по какой причине может такое приходить ?
С>По такой причине, что приложение откуда-то должно брать адрес x-сервера. И оно берёт из переменной окружения, обычно, а если там указан не тот адрес — то не там и откроется.
... Вы имеете в виду переменную $DISPLAY ? Можете более детально раскрыть свою мысль ?
Здравствуйте, Maveric_, Вы писали:
M_>Но бывает так, что при выполнении такой команды окно приложения открывается не на host, а на некой третьей машине. M_>Вероятно, это проблема конфигурации этих машин. Система на них устанавливается по автоматизировано сети.
Иксоовые проги выводят туда, куда показывает $DISPLAY. когда делаешь "ssh -X", локальный клиент открывает форвард удаленного порта на локальный (типа как -Rxxx), и выставляет переменную $DISPLAY там во что то типа "localhost:10.0", соответственно, если где то с форвардами что то сломалось — порт (база + 10, забыл что там за база, 6000?) локального хоста может быть зафоррважен куда то ещё. Или $DISPLAY прибит гвоздями в .bashrc на удалённой машине, или там tmux/screen, или сломан xauth (забыл его роль точно).
Здравствуйте, aik, Вы писали:
aik>Здравствуйте, Maveric_, Вы писали:
M_>>Но бывает так, что при выполнении такой команды окно приложения открывается не на host, а на некой третьей машине. M_>>Вероятно, это проблема конфигурации этих машин. Система на них устанавливается по автоматизировано сети.
aik>Иксоовые проги выводят туда, куда показывает $DISPLAY. когда делаешь "ssh -X", локальный клиент открывает форвард удаленного порта на локальный (типа как -Rxxx), и выставляет переменную $DISPLAY там во что то типа "localhost:10.0", соответственно, если где то с форвардами что то сломалось — порт (база + 10, забыл что там за база, 6000?) локального хоста может быть зафоррважен куда то ещё. Или $DISPLAY прибит гвоздями в .bashrc на удалённой машине, или там tmux/screen, или сломан xauth (забыл его роль точно).
1. Переменные DISPLAY на машинах выставляются в "localhost:10.0", "localhost:11.0" и т.д.
2. DISPLAY гвоздями не прибит.
3. tmux/screen не используется.
Здравствуйте, Maveric_, Вы писали:
M_>Здравствуйте.
M_>Все знают как linux/unix можно запустить gui-приложение на удаленной машине. M_>Можно сделать что-то типа: M_>
И не хватает подробностей, на какой машине открывается приложение,
вместо машины на которой запущены "ssh -X", запущены на этой третьей машине "ssh -X"
куда-то и т.д.
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, Maveric_, Вы писали:
M_>>Подскажите пожалуйста по какой причине может такое приходить ?
Pzz>Шпионят.
Pzz>Я бы предположил, что скрипты, которые исполняются на той машине, на которую зашли по ssh, зачем-то переопределяют переменную DISPLAY.
Здравствуйте, Zhendos, Вы писали:
Z>Здравствуйте, Maveric_, Вы писали:
M_>>Здравствуйте.
M_>>Все знают как linux/unix можно запустить gui-приложение на удаленной машине. M_>>Можно сделать что-то типа: M_>>
Z>А почему '-X' вместо '-Y'?
Z>И не хватает подробностей, на какой машине открывается приложение, Z>вместо машины на которой запущены "ssh -X", запущены на этой третьей машине "ssh -X" Z>куда-то и т.д.
Подробности:
1. наблюдается на системах RHEL 7.2, 7.4
2. к сожалению, сейчас точно сказать нельзя было ли на третьей машине "ssh -X" в тот момент, но вполне могло быть
Думаю, что можно использовать "-Y" вместо "-X". Думаете "-Y" может приводить к подобной ситуации ?
Здравствуйте, Maveric_, Вы писали:
M_>Нет. Все машины наши и таких скриптов нет.
Ну, не очень понятно.
Процесс там под капотом происходит следующий. Когда кто-то подсоединяется к SSH-серверу, сервер открывает незанятый TCP-порт с адресом типа localhost:6000+N, где N — некое небольшое число, и записывает этот адрес в переменную DISPLAY. Т.е., у меня, например, для адреса localhost:6010, echo $DISPLAY говорит localhost:10.0 (зачем там еще .0 дописано, к делу не относится).
Соответственно, любая иксовая программа, когда ее запускают, присоединяется к этому адресу. И SSH-сервер пробрасывает это соединение внутри своего SSH-соединения на сторону SSH-клиента. А SSH-клиент, соответственно, смотрит на $DISPLAY уже на своей стороне, присоединяется туда с помощью TCP-сокета, и пробрасывает поток данных из SSH соединения в этот сокет.
Непонятно, где в этой конструкции данные могут ответвиться на другую машину. Разве что кто-то где-то "поправил" DISPLAY. И это, скорее всего, на стороне сервера, потому что на стороне клиента это было бы сразу заметно — все локальные окна тоже оккрывались бы "не на месте".
P.S. А это со всеми приложениями происходит, или с каким-то одним?
Здравствуйте, Maveric_, Вы писали:
M_>Подробности: M_>1. наблюдается на системах RHEL 7.2, 7.4 M_>2. к сожалению, сейчас точно сказать нельзя было ли на третьей машине "ssh -X" в тот момент, но вполне могло быть
Вот если, например, запустить на машине A firefox, потом пойти на машину B по SSH, и тоже запустить firefox, то реально firefox, запущенный на машине A откроет еще одно окно, а firefox, запущенный на машине B, по-тихому завершится. Это потому, что второй firefox найдет первый и передаст ему url, а сам окончит работу — механизм у них такой, чтобы не плодить процессов. А искать он его будет посредством X-сервера, и найдет он, сам того не понимая, процесс, запущенный с другой машины. Жутко, кстати, раздражает, если URL это какой-нибудь file://..., файловые системы-то на разных машинах разные.
Так вот, не может ли быть и тут, что какая-то шибко умная программа, которая уже имеет окно на третьей машине, при попыткее ее еще раз запустить, открывает еще одно окно на той же машине, а не где сказали?
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, Maveric_, Вы писали:
M_>>Нет. Все машины наши и таких скриптов нет.
Pzz>Ну, не очень понятно.
Pzz>Процесс там под капотом происходит следующий. Когда кто-то подсоединяется к SSH-серверу, сервер открывает незанятый TCP-порт с адресом типа localhost:6000+N, где N — некое небольшое число, и записывает этот адрес в переменную DISPLAY. Т.е., у меня, например, для адреса localhost:6010, echo $DISPLAY говорит localhost:10.0 (зачем там еще .0 дописано, к делу не относится).
Pzz>Соответственно, любая иксовая программа, когда ее запускают, присоединяется к этому адресу. И SSH-сервер пробрасывает это соединение внутри своего SSH-соединения на сторону SSH-клиента. А SSH-клиент, соответственно, смотрит на $DISPLAY уже на своей стороне, присоединяется туда с помощью TCP-сокета, и пробрасывает поток данных из SSH соединения в этот сокет.
Pzz>Непонятно, где в этой конструкции данные могут ответвиться на другую машину. Разве что кто-то где-то "поправил" DISPLAY. И это, скорее всего, на стороне сервера, потому что на стороне клиента это было бы сразу заметно — все локальные окна тоже оккрывались бы "не на месте".
Pzz>P.S. А это со всеми приложениями происходит, или с каким-то одним?
Как работает проброс иксов я представляю.
Замечено на gedit, nautilus, gnome-terminal. Думаю, что другие приложения тоже так "могут".
Кстати, на RHEL 6.x такого не замечено. Вероятно, это связано с тем, что при запуске некоторых новых приложений они не запускают новый процесс, а создают новое окно в уже запущенном...
Видимо, надо добиться запуска нового процесса в любом случае.