Sul mio computer locale, eseguo:
ssh -X [email protected]
(Per completezza, ho anche testato tutto quanto segue usando -Y con risultati identici).
Come previsto, questo accede a remotemachine.com bene e tutto sembra a posto. Se poi provo a eseguire xcalc, tuttavia, ottengo:
connect /tmp/.X11-unix/X0: No such file or directory
Error: Can't open display: localhost:10.0
Ma,
$ ls -la /tmp/.X11-unix/
total 36
drwxrwxrwt 2 root root 4096 2012-11-23 09:29 .
drwxrwxrwt 8 root root 32768 2012-11-29 08:22 ..
srwxrwxrwx 1 root root 0 2012-11-23 09:29 X0
Quindi non solo /tmp/.X11-unix/X0 esiste, ha permessi r/w/x universali!
In precedenza ho usato x-forwarding senza problemi, anche se non da un po' di tempo...
uname -a sul server per riferimento:
Linux machinename 2.6.32-25-generic #45-Ubuntu SMP Sat Oct 16 19:52:42 UTC 2010 x86_64 GNU/Linux
Ho cercato sul web per un paio d'ore senza successo. Altre menzioni dello stesso problema, ma nessuna soluzione.
Risposta accettata:
Se hai un server X in esecuzione e il DISPLAY
la variabile di ambiente è impostata su :0
, che dice alle applicazioni di connettersi al server X utilizzando un socket di dominio unix che si trova generalmente su Linux in /tmp/.X11-unix/X0
(anche se vedi sotto sullo spazio dei nomi astratto su Linux recente).
Quando esegui un ssh su macchina remota , sshd
su macchina remota imposta DISPLAY su localhost:10
(ad esempio), il che questa volta significa che le connessioni X devono essere eseguite su TCP alla porta 6010 della macchina localhost. sshd su macchina remota ascolta le connessioni lì e inoltra qualsiasi connessione in entrata al client ssh. Il client ssh prova quindi a connettersi a /tmp/.X11-unix/X0
(dall'estremità locale, non da quella remota) per contattare il tuo server X.
Ora, forse non hai un server X in esecuzione (sei su Mac?) O forse il socket del dominio unix non si trova in /tmp/.X11-unix, il che significherebbe che ssh non è stato configurato correttamente durante la compilazione tempo.
Per capire quale sia il percorso corretto per il socket unix, potresti provare a strace -e connect xlogo
(o l'equivalente sul tuo sistema) sul tuo computer locale per vedere cosa fa una normale applicazione X.
netstat -x | grep X
può anche dare un indizio.
Per la cronaca, su una macchina Linux Debian qui, Xorg ascolta su entrambi /tmp/.X11-unix/X0
nel filesystem e /tmp/.X11-unix/X0
nello spazio dei nomi astratto (generalmente scritto @/tmp/.X11-unix/X0
). Da strace
, le applicazioni X11 sembrano ora utilizzare quello spazio dei nomi astratto per impostazione predefinita, il che spiega perché funzionano ancora se /tmp/.X11-unix
viene rimosso, mentre ssh
non usa quello spazio dei nomi astratto.