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

16

Я использую XFCE 4.12 с настройкой 3 мониторов на два экрана X и две видеокарты на одном компьютере. Два монитора образуют один экран X, используя функциональность nvidia twinview, то есть Screen0 на Device0 в конфигурации Xorg. Третий монитор предназначен для второго экрана, который является Screen1 на Device1 в конфигурации Xorg. Я могу хорошо перетаскивать окна между мониторами на Screen0. Я также могу свободно перемещать мышь между Screen0 и Screen1, и даже данные буфера обмена переносятся между двумя X-экранами.

Оба этих экрана X действуют как независимые рабочие столы, которые имеют свой собственный набор видов. Мне нравится этот способ, и он полезен для автоматического "приклеивания" одной стороны. Однако, если я запускаю программу на одном экране X, я не могу переместить ее на другой экран X, просто перетащив ее. Если я хочу запустить эту программу на другом экране, я должен перезапустить ее на этом экране.

Мой вопрос заключается в том, есть ли способ переместить программу во время ее работы на другой экран с помощью какой-либо команды или другой функции X-окон. Благодарю.

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

deltaray
источник
1
xpra предлагает нечто очень похожее на то, что вы просите ...
vlp
Google также показывает
Я не помню, чтобы мне пришлось что-то менять в CentOS 5 или 6, чтобы получить такое поведение. Какой дистрибутив, в какой версии вы используете здесь?
Нильс
Это похоже на копию unix.stackexchange.com/questions/152291/…
Натан Феллман
@NathanFellman Возможно, но я даже не думаю, что в моем случае я говорю о перемещении между дисплеями. Согласно моему списку процессов, я запускаю только один экземпляр процесса X, который равен: 0. Нет: 1 или: 2 и т. Д. Возможно, это просто проблема того, как XFCE управляет несколькими экранами или что-то в моей конфигурации. Что касается программ, упомянутых до сих пор, ни одна из них, кажется, все еще не поддерживается или не доступна. xmove почти 20 лет, и я не могу найти копию XiMove. xpra также кажется неправильной программой для того, что я пытаюсь сделать.
Deltaray

Ответы:

13

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

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

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

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

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

Вениамин
источник
2
Спасибо за попытку ответить, но проблема не в этом. Я говорю о перемещении между экранами X на одном сервере, а не между серверами X.
Дельтарай
5
Первоначально я пропустил этот нюанс, извинения. К сожалению, без расширения, такого как Xinerama, которое объединяет несколько экранов в один, кажется, что приложения обрабатывают отдельные экраны на одном и том же сервере как отдельные логические серверы и управляют подключениями к ним по отдельности - см. Ссылку [2], которую я добавил в последнем редакторе. Обходной путь для перемещения приложения между X-серверами должен также применяться для перемещения между экранами, вам просто нужно будет указать часть экрана переменной среды DISPLAY при (например) подключении Xpra.
Бенджамин