Я использую XFCE 4.12 с настройкой 3 мониторов на два экрана X и две видеокарты на одном компьютере. Два монитора образуют один экран X, используя функциональность nvidia twinview, то есть Screen0 на Device0 в конфигурации Xorg. Третий монитор предназначен для второго экрана, который является Screen1 на Device1 в конфигурации Xorg. Я могу хорошо перетаскивать окна между мониторами на Screen0. Я также могу свободно перемещать мышь между Screen0 и Screen1, и даже данные буфера обмена переносятся между двумя X-экранами.
Оба этих экрана X действуют как независимые рабочие столы, которые имеют свой собственный набор видов. Мне нравится этот способ, и он полезен для автоматического "приклеивания" одной стороны. Однако, если я запускаю программу на одном экране X, я не могу переместить ее на другой экран X, просто перетащив ее. Если я хочу запустить эту программу на другом экране, я должен перезапустить ее на этом экране.
Мой вопрос заключается в том, есть ли способ переместить программу во время ее работы на другой экран с помощью какой-либо команды или другой функции X-окон. Благодарю.
Обновление: я собираюсь начать щедрость по этому вопросу, но я размышлял об этом некоторое время. Чтобы получить награду, вы должны предоставить цитату для доказательства.
Ответы:
Вы не можете переместить 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 ]
источник