Существует ли команда для списка всех открытых дисплеев на машине?

В то время как оба разработаны для содержания файлов, не принадлежащих операционной системе, /opt и /usr/local не предназначаются для содержания того же набора файлов.

/usr/local место состоит в том, чтобы установить файлы, созданные администратором, обычно при помощи make команда (например, ./configure; make; make install). Идея состоит в том, чтобы избежать столкновений с файлами, которые являются частью операционной системы, которая была бы или перезаписана или перезаписала бы локальные иначе (например, /usr/bin/foo часть ОС в то время как /usr/local/bin/foo локальная альтернатива).

Все файлы под /usr совместно используемы между экземплярами ОС, хотя это редко делается с Linux. Это - часть, где FHS немного внутренне противоречив, как /usr определяется, чтобы быть только для чтения, но /usr/local/bin потребности быть чтением-записью для локальной установки программного обеспечения для следования. Стандарт файловой системы SVR4, который был основным источником FHS вдохновения, рекомендует избежать /usr/local и используйте /opt/local вместо этого преодолеть эту проблему.

/usr/local наследие от исходного BSD. В то время, исходный код /usr/bin Команды ОС были в /usr/src/bin и /usr/src/usr.bin, в то время как источник локально разработанных команд был в /usr/local/src, и их двоичные файлы в /usr/local/bin. Не было никакого понятия упаковки (снаружи tarballs).

С другой стороны, /opt каталог для установки несвязанных пакетов (т.е. пакетов не часть распределения Операционной системы, но обеспеченный независимым источником), каждый в его собственном подкаталоге. Они уже создаются целые пакеты, обеспеченные независимым дистрибьютором внешнего программного обеспечения. В отличие от этого, /usr/local материал, эти пакеты следуют конвенциям каталога (или по крайней мере они должны). Например, someapp был бы установлен в /opt/someapp, с одним из его команды того, чтобы быть /opt/someapp/bin/foo, его конфигурационный файл был бы в /etc/opt/someapp/foo.conf, и его файлы журнала в /var/opt/someapp/logs/foo.access.

77
23.07.2011, 04:42
5 ответов

Если Вы хотите 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 дисплеев, с которыми Вы, вероятно, будете когда-либо встречаться:

  • Локальные дисплеи, ни с чем перед :.
  • Дисплеи TCP, с именем хоста перед :.

С ssh -X localhost, можно получить доступ к X-серверу через оба дисплея, но приложения будут использовать другой метод: :NUMBER получает доступ к серверу через локальные сокеты и общую память, тогда как HOSTNAME:NUMBER получает доступ к серверу по TCP, который медленнее и отключает некоторые расширения.

Обратите внимание необходимость в форме авторизации получить доступ к X-серверу, названному cookie и обычно сохраненный негласно в файле ~/.Xauthority. При использовании ssh для доступа к другой учетной записи пользователя, или если распределение помещает cookie в другой файл, можно найти это DISPLAY=:0 не работает в рамках сессии SSH (но ssh -X будет, если это будет включено в сервере; Вы никогда не должны смешивать с XAUTHORITY при выполнении ssh -X). Если это - проблема, необходимо установить XAUTHORITY переменная среды или получает cookie другого пользователя.

Отвечать на Ваш фактический вопрос:

  • Локальные дисплеи соответствуют сокету в /tmp/.X11-unix.

    (cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done)
    
  • Удаленные дисплеи соответствуют открытым портам TCP выше 6000; при доступе к дисплею номер N на машине M сделан путем соединения с портом TCP 6000+N на машине M. От машины M самой:

    netstat -lnt | awk '
      sub(/.*:/,"",$4) && $4 >= 6000 && $4 < 6100 {
        print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000)
      }'
    

    (Остальная часть этого пункта маркированного списка представляет академический интерес только.)

    От другой машины можно использовать nmap -p 6000-6099 host_name зондировать открытые порты TCP в обычном диапазоне. Редко в наше время иметь X-серверы, слушающие на сокете TCP, особенно вне петлевого интерфейса.

    Строго говоря другое приложение могло использовать порт в диапазоне, обычно используемом X-серверами. Можно сказать, слушает ли X-сервер путем проверки, какая программа имеет открытый порт.

    lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
    

    Если это показывает что-то неоднозначное как sshd, нет никакого способа знать наверняка, является ли это X-сервером или совпадением.

82
27.01.2020, 19:31

Дисплей является первым аргументом Xorg. Вы можете ps затем grep Xorg .

[braga@coleman teste_geom]$ ps aux | grep Xorg
root      1584  5.3  1.0 156628 41708 tty1     Rs+  Jul22  22:56 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-a3kSKB/database -nolisten tcp vt1
braga     9110  0.0  0.0 109104   804 pts/1    S+   00:26   0:00 grep --color=auto Xorg

Вы можете затем awk это в то, везде, где формат Вы должны.

16
27.01.2020, 19:31
  • 1
    Это не обнаруживает дисплеи, созданные сервером кроме Xorg, например, Xvnc. –  cjm 23.07.2011, 09:37
  • 2
    ps aux |grep X работавший лучше для меня –  nobar 01.02.2012, 02:00
  • 3
    w шоу все, кто зарегистрирован и их дисплей. –  Plenus Franckly 03.11.2015, 18:48
  • 4
    Обратите внимание, что аргумент Xorg (по крайней мере теперь, в 2016) дополнительный и (по крайней мере, на Fedora) обычно отсутствуют, таким образом, этот метод больше не работает вообще. запись –  BRPocock 29.08.2016, 19:14
# Show all active login shells, with displays
$ w -oush

trunc-us tty1                      23:02  -bash
trunc-us tty7     :0                4days /sbin/upstart --user
trunc-us pts/4    :0                      w -oush

# Capture the Display part
$ w -oush | grep -Eo ' :[0-9]+'

 :0
 :0

# only unique lines
$ w -oush | grep -Eo ' :[0-9]+' | uniq

 :0

# trim off the leading space
$ w -oush | grep -Eo ' :[0-9]+' | uniq | cut -d \  -f 2

[Edit: I ran an Xnest instance to see if this would catch it - it doesn't; it only captures login shells ('w' is short for 'who'). Возвращаемся к чертежной доске]. [Edit: Found it:

$ ls /tmp/.X11-unix

X0 X2

$ ls /tmp/.X11-unix | tr 'X' ':'
:0
:2

]

7
27.01.2020, 19:31

В папке / tmp также могут быть файлы .X ?? - заблокировать с помощью ?? с указанием номеров сеансов.

Вам необходимо удалить их, если вы хотите повторно использовать номер сеанса.

Вы можете увидеть их, используя ls -a , как обычно файлы, начинающиеся с . скрыты.

0
27.01.2020, 19:31
ps e | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u

выполнит задание, перечислив все текущие ДИСПЛЕИ. Также вы можете увидеть назначенные дисплеи для конкретного пользователя ($usr )с помощью:

ps e -u $usr | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u
8
27.01.2020, 19:31

Теги

Похожие вопросы