Is this behavior already possible?
Tudo é possível no linux. Você precisará de algum conhecimento básico sobre o Xserver , algum tempo e um sistema para testar, já que você está mexendo com seu X e você certamente precisa do navegador rodando se precisar de ajuda: -)
Na minha opinião, existem três soluções possíveis:
-
Configurações de multimonitor usam Xinerama . A solução mais simples que posso imaginar é adicionar uma terceira tela virtual à sua configuração e simplesmente mover as janelas usando o xdotool. Há algumas desvantagens nessa solução, mas isso não exigiria o esforço de ter que move janelas entre diferentes Xservers que em geral não é possível.
-
Como não é possível mover janelas entre diferentes Xservers , precisamos de um tipo de proxy como < a href="https://en.wikipedia.org/wiki/Xmove"> xmove ou Xpra fazer isso por nós. Acho que as janelas vivem em uma sessão separada Xfvb esconda as janelas. Você pode anexar e desanexar a sessão.
-
Independentemente do método que você está usando, você precisa de um evento quando o monitor for desconectado. O evento deve ser acionado quando a tela é desconectada e também quando reconectado. Você pode daemonizar o script para assistir ao evento.
Eu preferiria a solução usando o Xpra por vários motivos. Eu só posso te dar algumas dicas de como fazer isso. As soluções não estão completas, mas você deve começar.
Solução Xinerama
Configuração
A configuração do Xinerama deve ser estendida para ter uma configuração estática: Consulte o link
veja também terceira tela falsa e Xdummy
obter janelas afetadas
Podemos usar o xdotool para procurar por janelas. Depois, podemos verificar sua posição e movê-los. Estou assumindo dois monitores com configuração 1920x1080
. A seguir, todas as janelas serão movidas da tela xinerama direita para 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 seu laptop (screen0) para uma terceira tela (virtual) se um monitor for anexado. Ao mesmo tempo, você pode mover qualquer janela armazenada na terceira tela para a primeira tela.
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 sua á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 sendo executada em uma sessão xpra separada e anexar / desconectar quando o monitor alterna.
xpra attach :99
xpra detatch :99
Há também uma extensão do shell do gnome dicontinued que pode ser útil se você quiser mover manualmente uma janela do oculto :99
para o% normal:0
entre os displays xpra iniciados.
O evento
-
Você pode observar o desconectar / reconectar de um display específico
-
talvez fique atento às dimensões alteradas do seu xinerama usando xwininfo para que ele seja independente do monitor não conectado se você quer, por exemplo, estender sua configuração para 3 monitores e desconectar um dispositivo arbitrário. Observe que isso só funcionará para a solução xpra.
xwininfo -display :0 -root | grep -e "-geometry"
-geometry 5760x2160+0+0