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.