Approccio di sviluppo per la condivisione di applicazioni GUI su X

2

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?

    
posta Chris Robison 29.05.2015 - 03:33
fonte

1 risposta

3

Con X, ci sono solo tre modi per farlo: richiedere che i programmi siano collegati con un Xlib personalizzato che ha i ganci per la comunicazione con un'applicazione per mostrarlo altrove, usa un server personalizzato per catturare i contenuti di una singola finestra (come VNC potrebbe fare) o intercettare ed elaborare il flusso del protocollo X.

Ho progettato e realizzato un programma chiamato XTV alla fine degli anni '80 che replicava singoli client X su più host e faceva condivisione di tastiere e puntatori. Ciò è stato ottenuto mediante intercettazione e modifica del protocollo per ogni visualizzazione di destinazione. Era anche, per quanto ne so, il primo tentativo di farlo in un modo che usava client e server non modificati. La cosa più vicina ad essa che avrebbe funzionato con X più moderno è Xpra .

C'era un articolo su di esso e successive ricerche e sviluppi, alcuni dei quali sono coperto da altri documenti che lo citano .

    
risposta data 29.05.2015 - 04:29
fonte

Leggi altre domande sui tag