GNU/Linux >> Znalost Linux >  >> Linux

Ssh – Proč se pokus o předání X11 nezdaří s „connect /tmp/.x11-unix/x0:Žádný takový soubor nebo adresář“?

Na svém místním počítači spustím:

ssh -X [email protected]

(Pro úplnost jsem také testoval všechny následující pomocí -Y s identickými výsledky).

Jak se očekávalo, tento přístup k remotemachine.com je v pořádku a vše vypadá dobře. Pokud se však pokusím spustit xcalc, dostanu:

 connect /tmp/.X11-unix/X0: No such file or directory
 Error: Can't open display: localhost:10.0

Ale,

$ 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

Takže nejen že /tmp/.X11-unix/X0 existuje, ale má i univerzální r/w/x oprávnění!

Dříve jsem bez problémů používal x-forwarding, i když ne po nějaké době…

uname -a na serveru pro referenci:

Linux machinename 2.6.32-25-generic #45-Ubuntu SMP Sat Oct 16 19:52:42 UTC 2010 x86_64 GNU/Linux

Už několik hodin hledám na webu bez úspěchu. Další zmínky o stejném problému, ale žádná řešení.

Přijatá odpověď:

Pokud máte spuštěný X server a DISPLAY proměnná prostředí je nastavena na :0 , který říká aplikacím, aby se připojily k X serveru pomocí unixového doménového soketu, který se obecně na Linuxu nachází v /tmp/.X11-unix/X0 (i když viz níže o abstraktním jmenném prostoru na nejnovějším Linuxu).

Když ssh na stroj vzdálený stroj , sshd na vzdáleném stroji nastaví DISPLAY na localhost:10 (například), což tentokrát znamená, že X spojení se provádí přes TCP na portu 6010 počítače localhost. sshd na vzdáleném počítači naslouchá připojení a předává všechna příchozí připojení klientovi ssh. Ssh klient se poté pokusí připojit k /tmp/.X11-unix/X0 (na místním konci, ne na vzdáleném) a kontaktujte váš X server.

Možná nemáte spuštěný X server (jste na Macu?) nebo možná není v /tmp/.X11-unix nalezen soket unixové domény, což by znamenalo, že ssh nebylo při kompilaci správně nakonfigurováno čas.

Chcete-li zjistit, jaká je správná cesta pro unixový socket, můžete zkusit strace -e connect xlogo (nebo ekvivalent ve vašem systému) na vašem místním počítači, abyste viděli, co dělá normální X aplikace.

netstat -x | grep X může také napovědět.

Pro záznam, zde na linuxovém Debianu poslouchá Xorg na obou /tmp/.X11-unix/X0 v souborovém systému a /tmp/.X11-unix/X0 v abstraktním jmenném prostoru (obecně se píše @/tmp/.X11-unix/X0 ). Z strace Zdá se, že aplikace X11 nyní ve výchozím nastavení používají tento abstraktní jmenný prostor, což vysvětluje, proč stále fungují, pokud /tmp/.X11-unix je odstraněn, zatímco ssh nepoužívá tento abstraktní jmenný prostor.

Související:způsob, jak spustit ssh server na zařízení Android?
Linux
  1. Proč nefunguje find -exec mv {} ./target/ +?

  2. Nainstalujte binární soubory do /bin, /sbin, /usr/bin a /usr/sbin, interakce s --prefix a DESTDIR

  3. Kdy mám použít /dev/shm/ a kdy /tmp/?

  1. Proč dávat věci jiné než /home do samostatného oddílu?

  2. Jaký je rozdíl mezi /tmp a /run?

  3. echo nebo print /dev/stdin /dev/stdout /dev/stderr

  1. Proč /bin/sh ukazuje na /bin/dash a ne /bin/bash?

  2. Proč jsou < nebo > vyžadovány pro použití /dev/tcp

  3. Jak změnit výchozí /tmp na /home/user/tmp