README.md

xwidpid

Утилита для X11 использующая расширение Xres для удобноно получения идентификаторов окон WID через идентификатор процесса PID и наоборот для их сопоставления.

Зачем

Существуют разные механизмы сопоставления PID процесса и его окна или окон например wmctrl -lp, но эти утилиты надеятся на то что окно установит _NET_WM_PID и сообщит тем самым свой PID, к сожалению это происходит не всегда. Например запустив glxgears мы легко получим его PID, но зная только его, мы никак не узнаем его WID тоесть не можем сопоставить пару WID/PID. Прямых путей решения этой пробелмы две, первая использовать LD_PRELOAD для перехвата функции создания окна X11 и принудительная установка значения в PID в _NET_WM_PID это надёжный, но хак. Второй способ предложенный Ja-Ja-Hey-Ho это использовать расширение Xres для X11 и кажется это тоже надёжный способ, более однозначный, но это расширение. Но плюсы явности перевешивают плюсы хака. Есть ещё варианты, но они основываются на косвенных данных и работают через раз (перебор окон с нулевым PID возврата от wmctrl -lp).

Зависимости

apt install libxres xorg

Сборка

sudo apt install libxres-dev libx11-dev pkg-config gcc make
make

Установка и удаление

Глобально

sudo make install
sudo make uninstall

Локально

make PREFIX=$HOME/.local install
make PREFIX=$HOME/.local uninstall

Независимо

make DESTDIR=$HOME/some_you_dir install
make DESTDIR=$HOME/some_you_dir uninstall

Использование

Получить список окон принадлежащих процеcсу

  • xwidpid --pid PID
  • xwidpid -p PID
  • xwidpid PID

Получить идентификатор процесса через идентификатор окна

  • xwidpid --wid WID
  • xwidpid -w WID
  • xwidpid WID

Получить список всех пар PID/WID

  • xwidpid --all
  • xwidpid -a
  • xwidpid

PID процесса является просто числом 12345, а WID окна это тоже простое число, но в шестнадцатеричной записи 0x0x320273c, это позволяет различать ввод и не использовать явно ключи -p/-w/--wid/--pid если не хочется.

Коды возврата

  • 0 всё хорошо
  • 1 не найдена пара PID и WID
  • 2 внутренняя ошибка или плохой аргумент коммандной строки

На заметку

Описание

Утилита для получения WID из PID и PID из WID под X11

Конвейеры
0 успешных
0 с ошибкой