Не совсем решение буквального "захвата окон уже запущенных программ", но все же…
Используйте xpra.
  На X11 он также известен как экран для X11: он позволяет запускать программы, обычно на удаленном хосте, направлять их отображение на локальный компьютер, а затем отключаться от этих программ и повторно подключаться с того же или другого компьютера без потерять любое состояние.
  
  [...]
  
  Xpra также позволяет пересылать звук, буфер обмена и услуги печати. 
  Сессии могут быть доступны через SSH или защищены паролем через обычные сокеты TCP с SSL или без него. 
Он должен быть установлен, настроен и запущен заранее, точно так же, как screen или tmux для консольных приложений. Вы должны сначала запустить свою программу через xpra , а затем вы можете использовать магию (пере) соединения с разных машин.
xpra доступна как пакет xpra по крайней мере в Debian и Ubuntu. Я использовал это несколько раз. Производительность была лучше, чем при простой пересылке X.
Примеры здесь. Следующее от man xpra на моем Kubuntu:
xpra start :7
  
  Запустите сервер xpra используя номер дисплея :7 .
DISPLAY=:7 firefox
  
  Запустите firefox внутри сервера xpra . Запустите это на хосте, где xpra была запущена, или в терминале, перенаправленном xpra . Окно не появится, пока вы не подключите с помощью xpra attach .
Вы запускаете приведенные выше примеры на своем A. Затем вы можете прикрепить непосредственно из A:
xpra attach :7
  
  Подключите к серверу xpra который использует локальный номер дисплея :7 . Любые приложения, запущенные на этом сервере, появятся на вашем экране.
или из вашего B:
xpra attach ssh:foo@frodo:7
  
  Используйте ssh для подключения к серверу xpra , который работает на машину frodo как пользователь foo и с помощью :7  Любые приложения, запущенные на этом сервере, появятся на вашем локальном экране.