Когда SSH локально подключается к моему компьютеру (не спрашивайте, это обходной путь), я не могу запустить графические приложения без запуска:
export DISPLAY=:0.0
Если я запускаю это сначала, а затем запускаю графическое приложение, все получается. Если нет, это не работает, нет дисплея для прикрепления.
Существует ли команда для отображения всех доступных дисплеев (т.е. всех возможных значений) на компьютере?
( DISPLAY=:0 yourapp & )
.w
. Более подробная информация: список существующих отображаемых имен X?Ответы:
Если вы хотите, чтобы X-соединение было переадресовано через SSH, вам нужно включить его как на стороне сервера, так и на стороне клиента. ( В зависимости от распределения, она может быть включена или отключена по умолчанию.) На стороне сервера, убедитесь , что у вас есть
X11Forwarding yes
в/etc/sshd_config
(или/etc/ssh/sshd_config
или там , где файл конфигурации). На стороне клиента передайте эту-X
опциюssh
команде илиForwardX11
введите вашу~/.ssh/config
.Если вы бежите
ssh -X localhost
, вы должны увидеть, что$DISPLAY
это (вероятно)localhost:10.0
. Контраст с:0.0
, который является значением, когда вы не подключены через SSH. (.0
Часть может быть опущена; это номер экрана, но несколько экранов используются редко.) Существует две формы X-дисплеев, с которыми вы, вероятно, когда-либо столкнетесь::
.:
.С помощью
ssh -X localhost
вы можете получить доступ к X-серверу через оба дисплея, но приложения будут использовать другой метод::NUMBER
доступ к серверу через локальные сокеты и разделяемую память, аHOSTNAME:NUMBER
доступ к серверу через TCP, который медленнее и отключает некоторые расширения.Обратите внимание, что вам нужна форма авторизации для доступа к X-серверу, которая называется cookie и обычно хранится за кулисами в файле
~/.Xauthority
. Если вы используете ssh для доступа к другой учетной записи пользователя или если ваш дистрибутив помещает файлы cookie в другой файл, вы можете обнаружить, чтоDISPLAY=:0
он не работает в рамках сеанса SSH (ноssh -X
будет, если он включен на сервере; вы никогда не будете надо связыватьсяXAUTHORITY
при этомssh -X
). Если это проблема, вам нужно установитьXAUTHORITY
переменную окружения или получить куки другого пользователя .Чтобы ответить на ваш актуальный вопрос:
Локальные дисплеи соответствуют сокету в
/tmp/.X11-unix
.Удаленные дисплеи соответствуют открытым портам TCP выше 6000; Доступ к отображаемому номеру N на машине M осуществляется путем подключения к TCP-порту 6000 + N на машине M. С самой машины M:
(Остальная часть этого пункта имеет только академический интерес.)
С другой машины вы можете использовать
nmap -p 6000-6099 host_name
для обнаружения открытых портов TCP в обычном диапазоне. В настоящее время редко, когда X-серверы прослушивают TCP-сокет, особенно за пределами петлевого интерфейса.Строго говоря, другое приложение может использовать порт в диапазоне, обычно используемом X-серверами. Вы можете определить, прослушивает ли X-сервер, проверив, в какой программе открыт порт.
Если это показывает что-то неоднозначное
sshd
, нет никакого способа узнать наверняка, X сервер или совпадение.источник
Дисплей является первым аргументом для
Xorg
.ps
Затем вы можетеXorg
отключиться.Вы можете затем
awk
это в любом формате, в котором вам нужно.источник
ps aux |grep X
работал лучше для меняw
показывает всех, кто вошел в систему и их отображение.DISPLAY=:0 netsurf "https://medium.com/"
... или использовать,export DISPLAY=:0
чтобы поделиться переменной var с процессом, а не только с оболочкой[Редактировать: я запустил экземпляр Xnest, чтобы посмотреть, поймает ли это его - нет; он только захватывает оболочки входа в систему («w» означает «кто»). Вернуться к чертежной доске для меня.] [Редактировать: Найдено:
]
источник
ps xeww | grep DISPLAY=:1024
теперь это странно. Я запускаю Chrome-Remote-Desktop на дисплее 20, а.w
не работает, если на сервере x не запущено ни одно приложение (в том числе нет оконного менеджера и рабочего стола). Ноls /tmp/.X11-unix
работает.сделает работу, перечислив все текущие дисплеи. Также вы можете увидеть назначенные дисплеи для конкретного пользователя ($ usr) с:
источник
ps e -u $USER | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u
?В
/tmp
папке также могут быть.X??-lock
файлы с??
указанием номеров сессий.Вам необходимо удалить их, если вы хотите повторно использовать номер сеанса.
Вы можете видеть их, используя
ls -a
как обычно файлы, начинающиеся с a.
, скрытые.источник