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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file xpynfo-0.0.0-py2.py3-none-any.whl.
File metadata
- Download URL: xpynfo-0.0.0-py2.py3-none-any.whl
- Upload date:
- Size: 16.9 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0b46033bd624bf59b61d3bad3ad222580446af4a06e4d138d39b2dec0055d6b
|
|
| MD5 |
ee6335ff7060b09697f43cb5fcd99c46
|
|
| BLAKE2b-256 |
dc3345ce7b7e8efacbcd79b3290b87839f62271b1e03247f402f3f8b64a2b53e
|