P Можно ли переместить окно с одного X-экрана на другой на одном и том же хосте?

Мое решение сделало два шага. Я нашел, что nxsetup сценарий называет nxloadconfig (/usr/bin/nxloadconfig) сценарий, и это перестало работать из-за условия на строке 675:

[ -z "$(strings $COMMAND_NXAGENT | egrep 'NXAGENT - Version 1.5.0|NXAGENT - Version 2.[01].0|NXAGENT - Version 3.[0123].0')" ] && \
    WARNING="yes" && echo "Error: Could not find 1.5.0 or 2.[01].0 or 3.[0123].0 version string in nxagent. NX 1.5.0 or 2.[01].0 or 3.[0123].0 backend is needed for this version of FreeNX."

Во-первых, целевая строка в моем nxagent приложение имело текст NXAGENT - Version 3.4.0, так сценарий, о котором сообщают правильно, это не могло найти строку версии в диапазоне, который это хотело. Так, от другого форума я обновил сценарий для включения версий 3.4.0 и 3.5.0 в поиск (обновил выражение GREP для включения [012345] вместо просто [0123]).

Но, даже при том, что я сделал это, nxsetup все еще дало мне ту же ошибку. Я затем начал заниматься расследованиями, строки управляют, чтобы используемый сценарий и в конечном счете нашел, что у меня не было строк в моей системе. binutils пакет обеспечивает строковую команду, и я должен был установить его из репозитория OSS.

zypper in binutils

Похоже, что пакет FreeNX пропустил зависимость или просто предположил, что любая система должна иметь строки на нем, которые я обнаружил, не имеет место.

16
30.10.2015, 16:11
1 ответ

Вы не можете переместить X-приложение, запущенное непосредственно с X-сервера, на котором приложение в конечном итоге отображается, это связано с тем, что X-клиент "привязан к X-серверу (X-дисплею), на котором он был запущен, на весь срок его жизни"[1]. Скорее всего, это связано с метаданными, которые X-сервер хранит об окнах клиента, которые не могут быть легко переданы между X-серверами.

То же самое относится к отдельно настроенным экранам (когда не используются расширения, такие как Xinerama или Twinview) для программ, в которых нет явной поддержки многоэкранности - "При такой конфигурации невозможно перемещать окна между экранами, кроме нескольких специальных программ, таких как GIMP и Emacs, которые имеют поддержку многоэкранности. "[2]

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

Лучшим вариантом для вас, вероятно, будет использование других приложений, которые могут действовать как прокси между X-клиентом и отображающим X-сервером подобно тому, как GNU screen может использоваться для консольных приложений и терминала. Xmove и Xpra [3&4], похоже, являются наиболее широко используемыми реализациями для этого. Оговорка при их использовании заключается в том, что запускаемые приложения должны зарегистрироваться на Xmove или Xpra в качестве своего X-сервера, чтобы иметь возможность контекстного переключения между различными серверами отображения.

Наконец, есть еще один вопрос на SuperUser, который задает похожий вопрос для немного другой цели (восстановление соединения с X после сбоя X, а не преднамеренное отключение/отключение клиента)[5]

13
27.01.2020, 19:49

Теги

Похожие вопросы