В то время как оба разработаны для содержания файлов, не принадлежащих операционной системе, /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
.
Если Вы хотите 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
переменная среды или получает 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-сервером или совпадением.
Дисплей является первым аргументом 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
это в то, везде, где формат Вы должны.
# 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
]
В папке / tmp
также могут быть файлы .X ?? - заблокировать
с помощью ??
с указанием номеров сеансов.
Вам необходимо удалить их, если вы хотите повторно использовать номер сеанса.
Вы можете увидеть их, используя ls -a
, как обычно файлы, начинающиеся с .
скрыты.
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