Ainda catalogando pacotes para o projeto descrito em post anterior, esbarrei com um programa muito interessante.
O xmove permite mover janelas de um servidor X para outro, ou ainda suspender janelas - o que permite deixar programas gráficos abertos mesmo que não estejam conectados a nenhum servidor X real.
Isso permite que você faça algo semelhante ao que se faz com o screen ao usar aplicações para console, só que com aplicações gráficas.
Darei um exemplo de uso do xmove a seguir - manter o xchat aberto mesmo que você precise fechar o X.
Usando o xmove para suspender clientes do X
Primeiramente, rode o xmove em segundo plano:
(xmove -interface localhost&)
Note os argumentos -interface localhost. Eles são colocados por medida de segurança pois, por padrão, o xmove escutaria em todas as interfaces de rede, e poderia ser acessado remotamente (esse comportamento é descrito em sua manpage).
Agora aponte a variável de ambiente DISPLAY para o display do xmove:
export DISPLAY=localhost:1
E inicie o processo do xchat em segundo plano:
(xchat&)
Você pode iniciar quantos programas quiser. Para suspender todos os programas que estão rodando debaixo do xmove, e poder fechar o seu servidor X, digite o seguinte comando:
xmovectrl -moveall -suspend
Note que para usar o xmovectrl, a variável DISPLAY precisa estar apontando para o display do xmove.
Fazendo isso, as janelas dos programas desaparecerão da tela, e você poderá fechar o seu servidor X.
Depois de reabrir o servidor X, para pegar as janelas de volta, volte a definir a variável de ambiente DISPLAY corretamente e chame o xmovectrl, da seguinte forma:
export DISPLAY=localhost:1 xmovectrl -moveall :0
Se aparecer a mensagem "Not authorized to connect with xmove", não se desespere. Apenas rode o comando mais uma vez.
Idéias
Um recurso interessante seria se o xmove suspendesse os clientes automaticamente caso detectasse que o servidor X foi desligado. Atualmente, caso você desligue o servidor X sem suspender os clientes como indiquei aqui, eles morrem. Se alguém quiser implementar, aí está uma boa dica. Senão, quem sabe eu mesmo não implemento algum dia?
Outros usos
É importante lembrar que o xmove não serve apenas para suspender clientes do X. Ele pode efetivamente mover janelas de um servidor X para outro. Conseqüentemente, pode mover janelas de um computador para outro.
Imagine um esquema automatizado desses no qual você mova a janela para o canto da tela, e ela apareça no computador vizinho. Isso seria possível de ser implementado estendendo o gerenciador de janelas, e permitiria uma interessante forma de trabalho em grupo.