Esse comportamento já é possível?
Tudo é possível no linux. Você precisará de algum conhecimento básico sobre o Xserver , algum tempo e um sistema para testar, já que está mexendo com o seu X e certamente precisará do navegador em execução se precisar de ajuda :-)
Na minha opinião, existem três soluções possíveis:
As configurações de monitores múltiplos usam o Xinerama . A solução mais simples que consigo pensar é adicionar uma terceira tela virtual à sua configuração e simplesmente mover as janelas para lá usando o xdotool. Existem algumas desvantagens nesta solução, mas não seria necessário o esforço de mover janelas entre diferentes Xservers, o que geralmente não é possível.
Como não é possível mover janelas entre diferentes Xservers , precisamos de um tipo de proxy como xmove ou Xpra para fazer isso por nós. Acho que as janelas vivem em uma sessão Xfvb separada para ocultar as janelas. Você pode anexar e desanexar à sessão.
Independentemente do método usado, você precisa de um evento quando o monitor é desconectado. O evento deve ser acionado quando a tela é desconectada e também quando reconectada. Você pode daemonizar o script para assistir ao evento.
Eu preferiria a solução usando o Xpra por vários motivos. Só posso lhe dar algumas dicas de como fazê-lo. As soluções não estão completas, mas você deve começar.
Solução Xinerama
Configuração
A instalação do Xinerama deve ser estendida para ter uma configuração estática: consulte https://help.ubuntu.com/community/XineramaHowTo
veja também terceira tela falsa e Xdummy
obter janelas afetadas
Podemos usar o xdotool para procurar janelas. Depois, podemos verificar a posição deles e movê-los. Estou assumindo dois monitores com 1920x1080
configuração. A seguir, todas as janelas serão movidas da tela do xinerama da direita para a esquerda.
while read xwindowid; do
eval $(xdotool getwindowgeometry --shell "$xwindowid")
if (( X > 1920 && X <= (1920 * 2))); then
xdotool windowmove --relative $WINDOW -1920 y
fi
done <<< "$(xdotool search --screen 0 '.*')"
Agora você pode mover todas as janelas da tela do laptop (tela0) para uma terceira tela (virtual) se um monitor for conectado. Ao mesmo tempo, você pode mover qualquer janela armazenada na terceira tela para a primeira.
Solução XPRA
Para usar o Xpra para mover as janelas, todas as janelas precisam ser gerenciadas pelo Xpra antes. Você precisa iniciar toda a área de trabalho usando o Xpra na inicialização do sistema. Duas vezes uma é a área de trabalho principal onde você trabalha e a outra é principalmente uma área de trabalho virtual.
xpra start-desktop :99
xpra start-desktop :1 --exit-with-children −−attach
Agora você pode ter o Windows para a tela desconectada em execução em uma sessão xpra separada e anexar / desconectar quando o monitor alternar.
xpra attach :99
xpra detatch :99
Há também uma extensão de shell gnome descontinuada que pode ser útil se você quiser mover manualmente uma janela do oculto :99
para o normal :0
entre as exibições xpra iniciadas.
O evento
Você pode observar a desconexão / reconexão de um monitor específico
talvez preste atenção nas dimensões alteradas do seu xinerama usando o xwininfo para torná -lo independente do monitor desconectado, se você quiser, ou seja, estender sua configuração para 3 monitores e desconectar um dispositivo arbitrário. Observe que isso funcionará apenas para a solução xpra.
xwininfo -display :0 -root | grep -e "-geometry"
-geometry 5760x2160+0+0