xpynfo
This is a simple CLI tool to dump X window info in a tree format.
Current version is a proof-of-concept. The API will potentially change drastically.
Features
Uses the anytree package to tidy output
Uses the xcffib package for X interaction via XCB Python bindings
Provides access to
XListProperties info with properties filled out via xcb_get_property calls
System Dependencies
The core features depend on libxcb. The xcffib docs also mention libxcb-render. I suspect the full list of xcb components is actually necessary, but I haven’t checked from a fresh install yet.
Here’s a good way to discover dependencies in the RPM world. You should be able to replace dnf with yum on older systems.
$ sudo dnf install -y dnf-utils --allowerasing
# For a full XCB install, use this as the first line instead
# UNLISTED_DEPS=($(eval "echo 'xcb-'{'proto','util-*'}{'','-devel'}"));
$ UNLISTED_DEPS=($(eval "echo xcb-util-renderutil{,-devel}")); \
DEPS=($(\
repoquery --requires --resolve python2-xcffib \
| awk -F':' '\
/^[^:]*:[^:]*$/{ \
gsub("-[0-9]+$", "", $1); \
print $1; \
}' \
| sort -u \
)); \
FULL_DEPS=( "${UNLISTED_DEPS[@]}" "${DEPS[@]}" "${DEPS[@]/%/-devel}" )
eval sudo dnf install \
--skip-broken \
$(printf "'%s' " "${FULL_DEPS[@]}")
Package xcb-util-renderutil-0.3.9-10.fc28.x86_64 is already installed, skipping.
Package xcb-util-renderutil-devel-0.3.9-10.fc28.x86_64 is already installed, skipping.
Package libxcb-1.13-1.fc28.x86_64 is already installed, skipping.
Package libxcb-1.13-1.fc28.i686 is already installed, skipping.
Package python2-2.7.15-1.fc28.x86_64 is already installed, skipping.
Package python2-cffi-1.11.2-1.fc28.x86_64 is already installed, skipping.
Package python2-six-1.11.0-3.fc28.noarch is already installed, skipping.
Package libxcb-devel-1.13-1.fc28.x86_64 is already installed, skipping.
Package python2-devel-2.7.15-1.fc28.x86_64 is already installed, skipping.
No match for argument: python2-cffi-devel
No match for argument: python2-six-devel
Dependencies resolved.
Nothing to do.
Complete!
# Or, for an even simpler full install,
$ sudo dnf install 'libxcb*' 'xcb*'
I have no idea how to do this in other ecosystems. It should be possible in the Debian world or the Arch world with some tweaking.
Installation
$ pip install --user xpynfo
Usage
$ export PATH=~/.local/bin:$PATH
$ which xpynfo
~/.local/bin/xpynfo
$ xpynfo --version
xpynfo <version>
$ xpynfo --help
< dumps all the help >
$ xpynfo \
--recurse \
--use-names \
--style AsciiStyle \
--max-depth 1 \
--properties \
$(xprop | awk '/WM_CLIENT_LEADER/{ print strtonum($NF); }')
# Note: you have to click a window to populate xprop
106954753: Sublime Text
| Properties:
| WM_CLASS: ['sublime_text', 'Sublime_text']
| WM_CLIENT_LEADER: 106954753
| WM_CLIENT_MACHINE: gxc-fedora-28.wotw
| WM_COMMAND: sublime_text
| WM_ICON_NAME: sublime_text
| WM_LOCALE_NAME: en_US.UTF-8
| WM_NAME: Sublime Text
| WM_NORMAL_HINTS: <WM_SIZE_HINTS>
| WM_PROTOCOLS: ['WM_DELETE_WINDOW', 'WM_TAKE_FOCUS', '_NET_WM_PING']
| _NET_WM_ICON_NAME: sublime_text
| _NET_WM_NAME: Sublime Text
| _NET_WM_PID: 637
| _NET_WM_USER_TIME_WINDOW: 106954754
+-- 106954754
(Very Basic) Documentation
usage: xpynfo [-h] [-V] [-r] [-d MAX_DEPTH] [-a] [-g] [-p] [-n]
[-s {AsciiStyle,ContRoundStyle,ContStyle,DoubleStyle}]
[window_id]
A tool to examine various pieces of X info. Without options the command simply
prints the window id.
positional arguments:
window_id Specify the window ID; default is the screen's root
window
optional arguments:
-h, --help show this help message and exit
-V, --version Displays the package version and exits
Scope Control:
Options to control the scope of the calls xpynfo makes
-r, --recurse Also query children of the given ID recursively
-d MAX_DEPTH, --max-depth MAX_DEPTH
Limit the depth of recursion
X Calls:
Options to add X information
-a, --attributes Add XWindowAttributes info to output
-g, --geometry Add XGetGeometry info to output
-p, --properties Add XListProperties combined with parsed XGetProperty
info to output
Style:
Options to tweak output look
-n, --use-names Add _NET_WM_NAME or WM_NAME (when available) to output
-s {AsciiStyle,ContRoundStyle,ContStyle,DoubleStyle}, --style {AsciiStyle,ContRoundStyle,ContStyle,DoubleStyle}
Set the anytree rendering style
Metadata
Release files for xpynfo 0.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| xpynfo-0.0.0-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Release files / xpynfo-0.0.0-py2.py3-none-any.whl
| Download URL | xpynfo-0.0.0-py2.py3-none-any.whl |
|---|---|
| Size | 16.9 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
c0b46033bd624bf59b61d3bad3ad222580446af4a06e4d138d39b2dec0055d6b
|
|
BLAKE2b-256 checksum How to use checksums |
dc3345ce7b7e8efacbcd79b3290b87839f62271b1e03247f402f3f8b64a2b53e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for xpynfo 0.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.