É possível mover uma janela de uma tela X para outra no mesmo host?

16

Estou executando o XFCE 4.12 com 3 monitores configurados em duas telas X e duas placas de vídeo no mesmo computador. Dois dos monitores formam uma única tela X usando a funcionalidade nvidia twinview, que é Screen0 no Device0 na configuração do Xorg. O terceiro monitor é para a segunda tela, que é Screen1 no Device1 na configuração do Xorg. Eu posso arrastar bem as janelas entre os monitores no Screen0. Também posso mover meu mouse livremente entre Screen0 e Screen1 e até os dados da área de transferência são transportados entre as duas telas X, ok.

Ambas as telas X atuam como desktops independentes, com seu próprio conjunto de viewports. Eu gosto dessa maneira e é útil para fazer um lado "ficar" automaticamente. No entanto, se eu iniciar um programa em uma tela X, não posso movê-lo para a outra tela X simplesmente arrastando-o. Se eu quiser executar esse programa na outra tela, tenho que reiniciá-lo nessa tela.

Minha pergunta é se existe uma maneira de mover o programa enquanto ele está sendo executado para a outra tela usando algum comando ou outra função do X windows. Obrigado.

Atualização: vou começar uma recompensa nessa questão, mas estou pensando nisso há algum tempo. Para ganhar a recompensa, você deve fornecer uma citação para a prova.

deltaray
fonte
11
O xpra oferece algo bem parecido com o que você está perguntando ...
vlp
googling também revela xmove
Não me lembro que precisei mudar alguma coisa no CentOS 5 ou 6 para obter esse comportamento. Qual distribuição em qual versão você está usando aqui?
Nils
Isso parece com uma duplicata do unix.stackexchange.com/questions/152291/…
Nathan Fellman
@ NathanFellman Possivelmente, mas eu nem acho que no meu caso estou falando sobre a movimentação entre monitores. De acordo com minha lista de processos, estou executando apenas uma instância do processo X, que é: 0. Não há: 1 ou: 2, etc. Talvez este seja apenas um problema de como o XFCE gerencia várias telas ou algo na minha configuração. Em relação aos programas mencionados até agora, nenhum deles parece ainda estar em manutenção ou disponível. O xmove tem quase 20 anos e não consigo encontrar uma cópia do XiMove. O xpra também parece ser o tipo errado de programa para o que estou tentando fazer.
Deltaray 3/11

Respostas:

13

Você não pode mover um aplicativo X iniciado diretamente com o servidor X no qual o aplicativo é exibido, devido ao fato de um cliente X estar "vinculado ao servidor X (exibição X) em que ele foi iniciado durante toda a vida útil" [ 1 ] provavelmente com metadados que o servidor X contém sobre as janelas de um cliente que não podem ser facilmente transferidas entre os servidores X.

O mesmo se aplica às telas configuradas separadamente (quando não se usa extensões como Xinerama ou Twinview) para programas que não possuem suporte para várias telas explicitamente escrito em - "Com essa configuração, não é possível mover janelas entre telas, além de alguns programas especiais, como o GIMP e o Emacs, que oferecem suporte para várias telas ". [ 2 ]

Em teoria, se um aplicativo foi projetado para lidar com uma alternância de contexto do servidor X, ele pode ser fornecido com o novo número de tela / exibição, salvar o estado de suas janelas, conectar-se ao novo servidor / tela X e ressuscitar suas janelas, mas poucas os aplicativos seriam projetados dessa maneira e necessariamente envolveriam muitos clichês ou a inclusão de uma biblioteca que facilitaria isso de alguma forma.

A melhor opção para você é provavelmente usar outros aplicativos que possam atuar como proxy entre um cliente X e o servidor X de exibição de maneira semelhante à tela GNU que pode ser usada para aplicativos de console e terminal. Xmove e Xpra [ 3 e 4 ] parecem ser as implementações mais usadas para fazer isso. A ressalva de usá-los é que os aplicativos que você inicia precisam se registrar no Xmove ou no Xpra como servidor X para poder alternar o contexto entre os diferentes servidores de exibição.

Finalmente, há outra pergunta, no SuperUser, que está fazendo uma pergunta semelhante para um propósito ligeiramente diferente (reconecte-se ao X após a falha do X, em vez de desconectar / reconectar deliberadamente o cliente) [ 5 ]

Benjamin
fonte
2
Obrigado por tentar responder, mas não é esse o problema. Estou falando de mover-se entre telas X no mesmo servidor, não entre servidores X.
Deltaray
5
Eu perdi essa nuance originalmente, desculpas. Infelizmente, sem uma extensão como o Xinerama que mescla várias telas em uma, parece que os aplicativos tratam telas separadas no mesmo servidor que os servidores lógicos separados e gerenciam conexões com elas separadamente - veja o link [2] que adicionei na última edição. A solução alternativa para mover um aplicativo entre servidores X também deve ser mantida para a movimentação entre telas. Você precisará especificar a parte da tela da variável de ambiente DISPLAY ao (por exemplo) conectar o Xpra.
Benjamin