Це доповнює інші відповіді інформацією, специфічною з Windows-підсистеми для Linux. Загальноприйнятий відповідь правильний: ваша DISPLAYзмінна налаштована неправильно. Однак не зовсім зрозуміло, чому так відбувається саме з цієї відповіді, тому я виправляю цю відповідь.
Якщо ви працюєте з cygwin або Windows-підсистемою для Linux, а ваш сервер X11 базується на вікнах (наприклад VcXsrv, або XMing), швидше за все ваш сервер X11 прослуховує через порт TCP (наприклад, 127.0.0.1на порти TCP 6000-6010), ніж на сокет домену Unix за замовчуванням ( /tmp/.X11-unix/X0). На даний момент Unix-сокети недостатньо підтримуються у Windows, навіть усередині WSL. Спілкування між програмами в середовищі, подібному до Linux, та програмами, що працюють безпосередньо на хості Windows, також, як правило, простіше через IP-розетки.
Коли ви запускаєте графічні програми локально (тобто із середовища Cygwin або WSL вашого хоста), а ваша DISPLAYзмінна встановлена за замовчуванням (тобто DISPLAY=:0.0), додатки спершу спробують підключитися до сервера X через сокет Unix /tmp/.X11-unix/X0. Це не вдасться, але більшість програм потім повернеться до TCP-з'єднання увімкнено localhost, що має досягти успіху в сервері, якщо ваш X-сервер налаштований за замовчуванням.
Ви можете підтвердити, що це відбувається, шукаючи connect()дзвінки в журналах прострочок із запуску вашої графічної програми. Це, як правило, відбудеться рано, перш ніж з’явиться головне вікно програми.
Така резервна поведінка не відбувається, коли ssh перенаправляє з'єднання з віддаленої сторони, тому ви отримуєте цю помилку. sshdдійсно пересилає з'єднання на локальну сторону, але локальне з'єднання ssh-клієнта тупикові, оскільки він не може достукатися до сервера через сокет Unix. Потім ви отримуєте ENOENTпомилку.
У таких випадках, змінивши DISPLAYзмінну на використання синтаксису TCP замість :0.0синтаксису, можна усунути проблему:
DISPLAY=127.0.0.1:0 ssh remote some-gui-application
Як і інші згадки про відповіді, ви також можете експортувати цю змінну інтерактивно з підказки оболонки:
$ export DISPLAY=127.0.0.1:0
...
$ ssh remote some-gui-application
Ви також можете зберегти цей параметр більш постійно, додавши цю лінію до сценарію ініціалізації профілю оболонки для входу (наприклад ~/.bash_profile).
Примітка. Деякі оболонки мають інший сценарій ініціалізації для сеансів входу та не входу. Наприклад, за допомогою bash ви можете записати цей рядок у сценарій без входу, тобто ~/.bashrcзамість ~/.bash_profile. Якщо це зробити, будьте обережні, щоб не перекрити будь-яке спеціальне значення, яке, можливо, встановило ssh. Це було б так, якби ви скакали спочатку на свій хост через ssh, а потім знову перескакували на інший хост (таким чином вкладаючи свою переадресацію X11).
strace -fo /tmp/trace ssh....перевірити, чи він намагається підключити цей сокет домену Unix.