A handy, pretty-printing X window metadata CLI
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for xpynfo-0.0.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c0b46033bd624bf59b61d3bad3ad222580446af4a06e4d138d39b2dec0055d6b |
|
MD5 | ee6335ff7060b09697f43cb5fcd99c46 |
|
BLAKE2b-256 | dc3345ce7b7e8efacbcd79b3290b87839f62271b1e03247f402f3f8b64a2b53e |