Учитывая идентификатор процесса XX, я хотел бы иметь список любого идентификатора окна где _NET_WM_PID = XX. Еще лучше был бы самый старый все еще идентификатор активного окна, если это возможно.
Я очень плохо знаком с Linux, но что я пытаюсь сделать, создают сценарий, который взял бы командную строку, и видеть, существует ли, окна уже открывают принадлежность процессу, вызванному с той же самой командной строкой. Если так, просто фокус набора к тому окну, иначе выполните командную строку для получения нового движения процесса. Мое намерение состоит в том, чтобы использовать это в моем рабочем столе человечности, где я сцеплю этот сценарий в свои easystroke команды жеста мыши, так, чтобы, например, каждый раз я жестикулировал для Gmail, я не получаю совершенно новую сессию Gmail, я просто приведен к моему существующему Gmail окно приложения Chrome. Возможно, существует намного более легкий способ пойти обо всем этом, но я еще не нашел свой путь к нему.
Со справкой я выяснил, как находят PID для командной строки с pgrep и как установить фокус на дескриптор окна с wmctrl, но я застреваю при получении от PID до окна ID.
xwininfo и xprop позволяют получить то, что вы хотите, но это немного сложно.
xwininfo позволяет получить все известные окна, а xprop - запросить X об идентификаторе одного окна для вашего параметра _NET_WM_PID.
Пока что хитрый способ сделать это выглядит так:
#!/bin/sh
findpid=$1
known_windows=$(xwininfo -root -children|sed -e 's/^ *//'|grep -E "^0x"|awk '{ print $1 }')
for id in ${known_windows}
do
xp=$(xprop -id $id _NET_WM_PID)
if test $? -eq 0; then
pid=$(xprop -id $id _NET_WM_PID|cut -d'=' -f2|tr -d ' ')
if test "x${pid}" = x${findpid}
then
echo "Windows Id: $id"
fi
fi
done
Результат:
mycroft:~ $ ./find_windows.sh 1919
Windows Id: 0x1800748
Windows Id: 0x181b221
Windows Id: 0x1803ad5
Windows Id: 0x181f681
Windows Id: 0x181f658
Windows Id: 0x180006d
Windows Id: 0x1800003
Windows Id: 0x1800001
Windows Id: 0x180001e
Как вы увидите, один процесс может иметь определенное количество известных окон, даже если вы видите только одно на экране.
Возможно, вам стоит получить исходники этих инструментов, чтобы сделать то, что вы хотите.