Esegui l'applicazione sul computer locale e mostra la GUI sul display remoto


35

È possibile eseguire un'applicazione sul desktop locale ma visualizzare la GUI sul mio laptop (X remoto)?

Mi chiedo se è possibile emulare un'impostazione a doppio monitor utilizzando 2 distinte macchine connesse lan.

Ho installato una sinergia e posso facilmente controllare il mio laptop con la tastiera / mouse desktop, ma vorrei anche semplicemente eseguire qualcosa sul desktop e visualizzare la GUI sullo schermo del laptop.

Dalla mia esperienza limitata con X, so che posso eseguire un programma su una macchina remota e usare il display del primo per mostrare l'output, ma non viceversa.

Qualsiasi suggerimento sarebbe di grande aiuto. Grazie

PS con XFCE 4.10 su Ubuntu 12.10

Risposte:


39

Variante A - Ripresa di X Windows su un altro DISPLAY:

  1. Assicurati che l'Xserver sul tuo laptop inizi ad ascoltare le connessioni tcp. Purtroppo X11-Networking è disabilitato di default nella maggior parte delle distribuzioni. Dato che Xserver è avviato dal tuo display manager (gdm, lightdm), questo deve essere configurato lì:

    Qualunque sia il display manager che usi, alcuni file di configurazione in / etc / conterranno probabilmente il parametro XServer responsabile. Esegui grep -r 'nolisten tcp' /etc/sul tuo laptop per scoprire quale file di configurazione è responsabile e rimuovere la parte in cui dice -nolisten tcp(non l'intera riga, solo questo parametro). Riavvia X sul tuo laptop.

    Ora il tuo laptop dovrebbe avere un display in esecuzione sulla porta tcp 6000 (prova a eseguire nmap -p6000 Laptopsul tuo PC desktop, se la porta segnalata come "aperta", sei arrivato così lontano).

  2. Rendi il tuo X-display disponibile per il computer desktop. X11 utilizza un meccanismo di autenticazione per concedere l'accesso a un display. Devi consentire al PC desktop di sparare Windows sul laptop. Normalmente scambiando un cookie di visualizzazione.

    Per cominciare, eseguire questo passaggio con le mani sul notebook. Una volta ottenuto il concetto con la DISPLAYvariabile e tutto il resto, puoi farlo tramite ssh.

    Veloce e sporco: puoi eseguire xhost +desktops.computers.ip.addresssul tuo laptop per concedere l'accesso X al computer desktop. Si noti che tutti gli utenti del computer portatile possono utilizzare il display del laptop X in questo modo. Si noti che questo è sufficiente, ad esempio per l'installazione di un keylogger sul display dei laptop. Utilizzare questo metodo solo per i test.

    Corretto e sicuro: esegui xauth extract cookie-file :0sul tuo laptop per esportare il tuo segreto di accesso al display in "file cookie". Trasferisci il cookie sul tuo computer desktop. Corri xauth merge cookie-file. O in un breve passaggio (dal desktop) ssh Laptop xauth extract - :0 |xauth merge -Nota: se il laptop e il desktop condividono una directory home, ad es. Tramite nfs, non è necessario scambiare alcuna credenziale. Il database delle credenziali è il file .Xauthority nella tua home directory e può essere condiviso tra macchine diverse.

  3. Esegui il programma: in un terminale sul PC desktop in esecuzione export DISPLAY=Your.Laptops.IP.Address:0, esegui qualsiasi programma X nello stesso terminale. Dovrebbe apparire sul display dei notebook.

Variante B: utilizzo di SSH con una svolta.

SSH esegue l'inoltro X11 inoltrando un socket X11 locale (normalmente un socket di dominio Unix) a un socket TCP locale sul computer remoto, quindi negoziando il cookie di visualizzazione, quindi impostando DISPLAY-Environment sul computer remoto. In questo modo tutto il traffico X11 è crittografato sul tunnel ssh. Il caso d'uso normale è di inoltrare il display locale al computer remoto (ciò significa che le applicazioni remote possono visualizzare x windows localmente).

Il vantaggio dell'uso di ssh è che non è necessario mettere l'X-Server in modalità di ascolto tcp (poiché viene utilizzato il socket unix). E ssh gestisce lo scambio di credenziali.

  1. SSH sul tuo laptop dal tuo computer desktop (non devi ancora usare -X).
  2. Nella shell remota entra export DISPLAY=:0questo rende lo schermo già in esecuzione sul tuo notebook disponibile per la shell che hai ottenuto tramite SSH. Se esegui un comando X ora, apparirà già sullo schermo del tuo notebook, ma continuerà a essere eseguito sul tuo laptop (provalo per sicurezza).
  3. Da questa shell ssh al tuo computer desktop, usa -X questa volta. Ora hai una shell sul computer su cui ha avuto origine la sessione ssh ma questa volta con X funzionante. Esegui xeyes o xcalc per testarlo.
  4. echo $DISPLAYti mostra la designazione, il display del tuo laptop X ora ha sul tuo computer desktop. Vale a dire: 10 o: 11.
  5. Ora puoi ridurre a icona il terminale. Ogni volta che inserisci export DISPLAY=:10(vedi quale numero visualizzato hai) sul tuo computer desktop ora, ogni programma che eseguirai in seguito nella stessa shell apparirà sullo schermo del tuo notebook.

    Questa variante è semplice ma lenta, poiché tutto il traffico X11 viene inoltrato tramite SSH.

Variante C - Il concetto originale di thinclient:

Puoi usare il tuo laptop per aprire una sessione desktop in esecuzione interamente sul tuo computer desktop.

  1. Configurare il display manager sul desktop per rispondere alle trasmissioni XDMCP. Come fare ciò dipende dal tuo display manager. Alcuni gestori di display non lo supportano affatto, ad es. Slim. XDM, KDM, WDM, GDM lo supportano.

  2. Avvia un X-Server sul tuo laptop, che richiede il display manager dal tuo desktop. O una X nidificata Xephyr :1 -query desktopoppure Xephyr :1 -broadcast oppure spegnendo il X-Server dei Notebook e accedendo al Terminale di sistemasudo Xorg :0 -broadcast

    Il display manager farà in modo che le credenziali vengano generate e scambiate e tutto il resto. Complimenti, ora dovresti vedere una finestra di accesso fornita dal tuo computer desktop.


2
BTW. Tutta questa meravigliosa funzionalità X11 smetterà di funzionare non appena Ubuntu passerà a Wayland. Non è più possibile inoltrare le richieste di wayland NAtive tramite ssh.
Paul Hänsch,

6
Non è ironico che non ci sia una toolchain grafica per controllare il tuo X-Server? Se vuoi veramente lavorare con le GUI devi prima dominare la riga di comando.
Paul Hänsch,

Suggerimento generale: il primo programma che potresti voler avviare sul display remoto è un avviatore dell'applicazione. Cioè lxpanel o qualcosa del genere. Questo salva un sacco di lavoro da riga di comando.
Paul Hänsch,

Funziona ancora con Ubuntu 17 + ... o la previsione di Wayland è arrivata?
Xen2050,

19

Puoi usare ssh X forwarding per raggiungere il tuo obiettivo. Se ci si trova nella stessa sottorete di quella che si è chiusa velocemente.

Installa il server e il client ssh sul tuo laptop e PC desktop

sudo apt-get install ssh

Per connettersi al PC desktop, aprire un terminale sul laptop e digitare quanto segue

ssh -X username@desktop_pc_ip

E puoi avviare qualsiasi software usando il terminale, ad esempio avviando Firefox, basta digitare firefoxil terminale.


2
Non dimenticare di verificare che i file di configurazione di sshd (di solito / etc / ssh / sshd_config) abbiano anche X11Forwarding impostato su yes.
Matrix Mole,

Ecco il mio caso d'uso: sono sul mio desktop e apro Firefox, ad esempio, ma voglio che la finestra del browser si apra sul display del mio laptop e continui a funzionare sul mio desktop. Sto cercando una funzionalità simile alle aree di lavoro, ma invece di un'area di lavoro locale (4 schermate sullo stesso PC) per utilizzare un'area di lavoro remota (il laptop)
Vlad Balmos,

2
Inoltre puoi provare il x2xpacchetto, puoi usare una tastiera e un mouse su macchine diverse. ex:ssh -X user@host x2x -west -to :0
OHLÁLÁ,

@iUngi Sto già usando la sinergia per questo, grazie comunque
Vlad Balmos,

Tieni presente che aprendo l'accesso al server X del tuo desktop, stai fornendo un accesso piuttosto ampio alla macchina remota. Se il tuo server è stato compromesso, questo potrebbe essere usato anche per accedere al tuo desktop. L'inoltro X11 è utile, ma pensa a quello che stai facendo e non attivarlo per impostazione predefinita.
MC0e

7

Preparazione

(lo fai solo una volta)

Sul desktop installare il server SSH

sudo apt-get install openssh-server


Dal tuo laptop:

ssh -X nome utente @ desktop_pc_ip

Nel terminale ottieni tutto ciò che esegui sarà sul tuo desktop ma visualizzato sul tuo laptop. Se vuoi fare lo stesso mentre sei seduto sul desktop (e inviare finestre sul tuo laptop), continua.

Sul tuo terminale corri

echo $ DISPLAY

Questo ti mostrerà qualcosa di simile:

localhost:10.0

Dal tuo desktop:

Apri un terminale ed esegui

DISPLAY=:10.0 firefox

Questo dovrebbe inviare una firefoxfinestra sul tuo laptop ma in esecuzione sul desktop. Assicurati che il numero inserito (ad es. 10.0) Sia lo stesso del echorisultato


3

Stai cercando di utilizzare una combinazione di SSH e schermo per ottenere la situazione che desideri.

Sul desktop, installa la schermata:

sudo apt-get schermata di installazione

Da lì, avvia una nuova sessione schermo:

schermo

e apri firefox in esso:

firefox

Usa firefox tutto ciò che vuoi sul desktop, quindi ssh sul tuo computer dal tuo laptop:

ssh -X nome utente @ nome host

Digita il seguente comando per vedere quali sessioni dello schermo hai in esecuzione:

schermo -ls

Accedi alla tua sessione schermo (1234 sarebbe il numero che ti ha fornito lo schermo)

schermo -x 1234

Quindi puoi utilizzare Firefox sul tuo laptop e chiudere il terminale sul desktop.


ci ho provato. ha aperto lo schermo dal terminale, avviato firefox sul desktop, quindi spostato dal laptop al desktop, collegato la sessione dello schermo, ma non ho alcuna finestra sul laptop, ma solo l'output del programma in esecuzione sullo schermo.
Vlad Balmos,

Lo stavi mescolando. Aspetta ... almeno uno di voi l'ha fatto. Installa la schermata sul tuo computer desktop, usa il tuo notebook ssh -Xsul desktop, avvia la schermata nella sessione ssh, scollegala e lascia la sessione in esecuzione. Quindi ricollegare la sessione dello schermo con le mani sul computer desktop ed eseguire qualcosa. Questo è simile alla mia risposta "SSH with a twist". L'uso dello schermo lo rende un po 'più conveniente.
Paul Hänsch,

3

Virtualgl creerà un desktop (in background) extra ( stile TightVNC) a cui è possibile accedere tramite un client VNC turbo . Funzionerà come un affare di tipo desktop remoto -> Ma riprodurrà video fluidi su una rete.

Se stai cercando un modo per scaricare l'overhead della CPU per una connessione remota, in modo da poter eseguire app dal tuo computer sul tuo laptop, sarebbe quello che farei.

http://www.virtualgl.org/

Puoi anche esportare l'ambiente desktop tramite SSH come / dude sopra menzionato.


Grazie. Sembra promettente. Dò un'occhiata e ti terrò aggiornato.
Vlad Balmos,

Sì, "TurboVNC" (più il suo componente VirtualGL) È il risultato della mia ricerca di un programma desktop remoto che mi avrebbe permesso di giocare a videogiochi e film. Funzionerebbe facilmente come monitor aggiuntivo.
TardisGuy

1

Dopo qualche altro scavo online sono arrivato attraverso DMX

Dalla home page

Xdmx è un server X proxy che fornisce supporto multi-head per più schermi collegati a macchine diverse (ognuna delle quali esegue un tipico server X). Quando Xinerama viene utilizzato con Xdmx, i display multipli su più macchine vengono presentati all'utente come un'unica schermata unificata.


1
questa sarebbe una risposta migliore se puoi dare istruzioni su come installare e come usare.
Fossfreedom

XmetaX offre funzionalità simili. Esiste un'alternativa a Xdmx e XmetaX?
Mariusz,

1

Sì, è possibile. Sto prendendo entrambi i computer Linux con xclock installato sul computer locale. Sto cercando di eseguire xclock localmente e mostrare l'orologio sul computer Linux remoto.

reboot the remote machine
Disable firewall
Disable SELINUX
Check $DISPLAY variable value by command
echo $DISPLAY
Let say its value is :1
run command
xhost +

Now on local computer
xclock -display remote_machine_IP_address:1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.