Sono curioso di sviluppare un semplice sistema per la condivisione di applicazioni GUI tra utenti su un singolo computer, che usa Xorg (o forse qualsiasi forma moderna di display X11). Vorrei che l'utente Alice fosse in grado di autorizzare l'utente Bob a visualizzare e controllare una particolare applicazione selezionata in esecuzione, che apparirà quindi a Bob esattamente come appare per Alice, consentendo a entrambi di controllare l'applicazione.
TL; DR: mi piacerebbe sapere come raccogliere / raschiare i dati grafici.
I presupposti e i requisiti includono:
- Supponendo che Alice e Bob siano connessi allo stesso computer locale.
- Alice e Bob potrebbero utilizzare qualsiasi desktop desiderato (Gnome, KDE, XFCE, ecc.) e qualsiasi kit di strumenti grafici (GTK, Qt, ecc.). Possono avere diverse configurazioni.
- Alice e / o Bob possono essere registrati tramite server VNC separato (ad esempio tigervnc), server X11VNC framebuffer-grabbing, X2Go, monitor e tastiera fisici, finestra VirtualBox su uno schermo host o altri mezzi. L'utente non dovrebbe preoccuparsi di come sta visualizzando il proprio desktop.
- La finestra di livello superiore e tutte le finestre discendenti dell'applicazione selezionata di Alice appaiono per Bob alla stessa dimensione / scala, ma consentono a Bob di spostarle separatamente da ciò che vede Alice. Le riduzioni verrebbero replicate per entrambi gli utenti.
- Per ora mi interessa solo il supporto delle operazioni grafiche 2D di base: il rendering 3D e il video non sono essenziali.
Quello che sto cercando è un modo per agganciare o essere informato degli aggiornamenti dell'interfaccia utente dell'applicazione, così posso trasmettere gli aggiornamenti (il protocollo non ha importanza per questa domanda) e ridisegnarli per Bob. Come si fa normalmente?
Ho notato che Google Hangouts, ad esempio, è in grado di condividere lo schermo intero di un utente. Può anche condividere singole app, che è quello che mi piacerebbe fare, ma solo qualche volta. Sembra non funzionare su desktop che non usano un compositore di qualche tipo, e potrebbe non funzionare anche per altri motivi. Non vorrei richiedere un framebuffer hardware per curiosare, in quanto uno dei miei casi di utilizzo più importanti è dove uno o entrambi gli utenti sono remoti.
C'è un modo per "intercettare" il disegno / la pittura delle chiamate API a un certo livello, per ottenere un mezzo abbastanza agevole per l'hardware e il desktop di catturare la GUI di un'applicazione?
EDIT: Come pensiero aggiuntivo, come potrebbe essere cambiata la situazione o come potrebbe essere in futuro, per quanto riguarda i compositori e i server di visualizzazione come Wayland? La relazione tra server X e compositori sembra un po 'confusa al momento, ma Wayland (o Mir?) Potrebbero offrire un modo più semplice per farlo sia per le applicazioni X che per le API dirette?