Х-сервер. Как узнать, к какому номеру экрана было подключено приложение?

Поскольку вы используете bash, вы также можете использовать преимущества массивов вместо циклического перебора переменных без кавычек. Я не уверен, какой ввод вы предоставляете из signallist, но ваша команда printfнаходится вне этого цикла. Это означает, что он может проходить через несколько сигналов, но будет обеспечивать вывод только один раз для каждого mac-адреса. Попробуйте переместить его в петлю списка сигналов

.
#!/bin/bash

echo    "# All connected wifi devices, with IP address,"
echo    "# hostname (if available), and MAC address."
printf  "# %-20s %-30s %-20s %-20s\n" "IP address" "Lease name" "MAC address" "Signal"

leasefile=/var/lib/misc/dnsmasq.leases

for interface in $(iw dev | grep Interface | cut -f 2 -s -d" "); do
  maclist=( $(iw dev "$interface" station dump | grep Station | cut -f 2 -s -d" ") )
  signallist=( $(iw dev "$interface" station dump | awk '/signal:/{print $2}') )

  for mac in "${maclist[@]}"; do
    for signal in "${signallist[@]}"; do
      ip="UNKN"
      host=""
      ip=$(cut -f 2,3,4 -s -d" " "$leasefile" | grep $mac | cut -f 2 -s -d" ")
      host=$(cut -f 2,3,4 -s -d" " "$leasefile" | grep $mac | cut -f 3 -s -d" ")
      printf "  %-20s %-30s %-20s %-20s\n" "$ip" "$host" "$mac" "$signal"
     done
  done
done

Кроме того, я процитировал ваши переменные, удалил UUOC и изменил все обратные кавычки на $().

0
28.09.2020, 00:13
1 ответ

Приложение X11 подключено к дисплею , а не к экрану .

«Номер экрана» (0изDISPLAY=:1.0)указывает только номер экрана по умолчанию, который будет возвращен DefaultScreen(3)и другими удобными функциями и макросами Xlib.

Приложение, подключенное к дисплею, может использовать любой экран этого дисплея через Xlib, например. XCreateWindow(dpy, RootWindow(dpy, 7),...)для создания окна на экране 7.(1)

При этом большинство серверов X11 в настоящее время имеют один экран . Абстракции X11 «дисплей» и «экран» не означают того, что люди могут интуитивно понимать под ними (физический монитор, графический процессор и т. д. ).

Если имеется несколько физических мониторов, они управляются через xrandr как часть одной и той же абстракции корневого окна , экрана и дисплея . Это имеет очевидное преимущество, заключающееся в том, что вы можете перемещать окно с одного монитора на другой и отображать большое окно на нескольких мониторах.

(1)Если вас интересует, как определить процесс или удаленный клиент, создавший окно X11, задайте отдельный вопрос. Короткий ответ заключается в том, что вы не можете сделать это обычным и надежным способом, кроме модификации или отладки сервера X11.

-1
18.03.2021, 23:01

Теги

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