SSH: avvia i programmi della GUI sullo schermo remoto, non sul display X.


11

Il problema

La maggior parte delle persone desidera connettersi a un server su ssh con l'opzione "-X" al fine di eseguire programmi GUI sull'host remoto utilizzando la visualizzazione del client. Vorrei eseguire programmi GUI sul monitor fisico collegato al server. È possibile ? Fammi essere più specifico:

La mia situazione è la seguente: ho una workstation senza tastiera o mouse, ma ha un monitor collegato ad essa. Vorrei SSH ad esso con il mio laptop ed essere in grado di avviare alcuni programmi grafici, come xeyes o ssvnc e farlo apparire sul monitor della workstation.

[xapple@laptop ~]$ ssh workstation
Last login: Mon Sep 26 20:03:35 2011 from laptop
[xapple@workstation ~]$ export DISPLAY=:0
[xapple@workstation ~]$ xeyes
No protocol specified
Error: Can't open display: :0

Modifica: informazioni extra

Forse dovrei spiegare alcune cose più chiaramente:

  • Ho accesso sudo sulla workstation, posso installare qualsiasi cosa se necessario.
  • La workstation esegue l'interfaccia utente GNOME.
  • Prima di disconnettere la tastiera e il mouse dalla workstation, ho effettuato l'accesso a una sessione GNOME. Si può quindi vedere il mio desktop GNOME sul monitor della workstation attualmente.
  • Non desidero eseguire programmi dal mio laptop sulla workstation. Vorrei eseguire i programmi di workstation sulla workstation. Gli xeyes o qualunque eseguibile si trovano sul server remoto e dovrebbero essere eseguiti sul monitor del server remoto
  • Capisco che eseguire questo mi lascerà in una situazione in cui il mio cursore non sarà collegato all'interfaccia. Non riesco a fare clic sulle cose. Va bene.

Qualsiasi aiuto molto apprezzato!


Sei stato eseguito xhost +sul tuo server?
karlphillip,

Penso che questa sia anche una domanda interessante, ad esempio se hai 3 PC Ubuntu che eseguono Synergy per usare la stessa tastiera e mouse tra i 3 ... quando accedi devi effettuare l'accesso 3 volte. sarebbe bello creare uno script che ti acceda agli altri due PC, quando accedi al PC principale.
Sverre,

Risposte:


5

qualsiasi applicazione xlib deve connettersi a un xserver. devi comunicare all'app la connessione al server:

  • impostazione della variabile d'ambiente DISPLAY
  • utilizzando un flag della riga di comando come -display

il primo xserver di solito è raggiungibile dalla stringa di connessione ': 0'. quindi, prova questo:

xeyes -display :0

o questo

env DISPLAY=:0 xeyes

In molti casi (come quando avviato da GDM di GNOME), XAUTHORITYsarà necessaria anche l' impostazione , poiché il server X11 utilizzerà un file Xauthority temporaneo.
user1686

Interessante, dopo aver impostato la variabile $ DISPLAY, ora ricevo, oltre al messaggio "Errore: impossibile aprire il display", il messaggio "Nessun protocollo specificato" quando si tenta di avviare xeyes.
xApple

@grawity Grazie per il consiglio. Posso chiedere come impostare XAUTHORITY affinché il mio comando funzioni?
xApple

5

Questa workstation esegue un server X Windows? Senza quello, questo è tutto discutibile.

È necessario QUALCOSA per elaborare i dati in grafici, pixel, colori e posizioni. Un 'monitor' è inutile senza una sorta di software per eseguirlo.

Supponendo che lo sia. (ma dal testo, sicuramente suona diversamente)

Dati i nomi host (e la risoluzione DNS appropriata tramite / etc / hosts o DNS o altro) di 'workstation' e 'laptop' ... in caso contrario, sostituire i nomi host della macchina con gli indirizzi IP appropriati.

ssh workstation
xhost +laptop

è quindi possibile disconnettersi dalla workstation a questo punto, in quanto ciò imposta le autorizzazioni sull'Xserver della workstation per consentire al "laptop" di connettersi.

se avvii i tuoi programmi con DISPLAY env var impostato in modo appropriato, puoi far sì che le applicazioni vengano visualizzate sulla workstation, mentre sono in esecuzione sul tuo laptop.

DISPLAY=workstation:0 xeyes

-o-

export DISPLAY=workstation:0
xeyes

entrambi i metodi funzioneranno, quest'ultimo provoca la visualizzazione di qualsiasi elemento X11 correlato sulla workstation all'avvio da quella shell. (spero che abbia senso)

La linea "xhost" consente l'autorizzazione per il laptop a connettersi all'Xserver della workstation. Senza di essa, ti verrà negata l'autorizzazione, a meno che non avvii il server X senza autorizzazioni, il che non è davvero raccomandato. La protezione "xhost" è ancora scadente, poiché i dati vengono inviati "in chiaro" tra laptop e workstation e potrebbero essere sniffati, ma è una soluzione semplice.

Se si desidera la privacy, è necessario impostare una sorta di tunnel crittografato tra il laptop e la workstation (porta 6000 per display: 0). Sì, a questo punto diventa strano.

Se ti trovi in ​​un ambiente controllato, sarà sufficiente utilizzare il comando 'xhost + laptop', se lasci la parte 'laptop' di quel comando 'xhost +', allora CHIUNQUE può connettersi a Xserver e visualizzare cose.

Ricorda, il mouse NON è "connesso" alla workstation Xserver e NON sarai in grado di manipolare Windows o fare clic sulle cose.

Se vuoi che il mouse sia collegato, ti consiglierei qualcosa come x2x, synergy, vnc o un'applicazione di condivisione dello schermo basata su X Windows.


Grazie per la tua risposta ! Hai ragione, forse dovrei specificare alcune altre cose: (1) La workstation esegue l'interfaccia utente GNOME (2) Non desidero eseguire programmi dal mio laptop. Xeyes o qualunque cosa debba essere eseguita sulla workstation con il monitor della workstation (3) Va bene, capisco che il mio cursore non sarà collegato.
xApple,

Oh, allora devi solo ssh sulla workstation, impostare la variabile DISPLAY su 'localhost: 0' (o semplicemente ': 0') e avviare la tua app. Dovrai comunque avere a che fare con le autorizzazioni (xhost + localhost probabilmente la risposta migliore) e nohup o &! (background e disown) o bg / disown dalla shell in modo che l'app non si chiuda quando ci si disconnette. (a meno che non sia quello che vuoi, ovviamente)
lornix,

Ah, quindi forse il mio problema è solo un problema di autorizzazione. Tuttavia, se eseguo "xeyes" come root, il messaggio di errore è lo stesso. Se pubblichi una risposta che risolve i problemi di autorizzazione, posso contrassegnarla come risolta!
xApple

Qualcuno ha effettuato l'accesso alla sessione X windows sulla workstation? Senza questo, il codice che ascolta le connessioni al programma non è ancora attivo, solo le cose di accesso. (Sto semplificando notevolmente!) Prova a scrivere sulla workstation, quindi su "startx", POI potresti essere in grado di collegarti al display. Un altro modo è utilizzare un server X bare bones, digitando 'X: 0 &', impostando la variabile DISPLAY e quindi eseguendo 'xhost + laptop' (o semplicemente 'xhost +'). Ma sta diventando un po 'di basso livello per la maggior parte. (Ottimo per i test!)
lornix,

Sì, ho effettuato l'accesso a una sessione GNOME sulla workstation prima di disconnettere tastiera e mouse. Tuttavia ho provato a eseguire il comando "startx" dalla mia sessione ssh. Il messaggio di errore era il seguente: "X: utente non autorizzato a eseguire il server X, interruzione".
xApple
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.