Skip to main content

aioxlib

Human-friendly asyncio interface to the X11 protocol

aioxlib is a pure-Python library that talks the X11 wire protocol over asyncio.
It aims to make working with X displays, windows, graphics contexts, events, and images feel natural in modern async Python code—without blocking the event loop.

Inspired by the style of linuxpy (also by the same author), it provides a clean, high-level API while still exposing the underlying protocol details when you need them.

Features

  • Fully asynchronous connection to the X server (Unix socket or TCP)
  • High-level objects: Display, Screen, Window, GC, resources
  • Event stream via async for event in display.events()
  • Window creation, mapping, attributes, WM properties (WM_NAME, WM_PROTOCOLS, …)
  • Graphics Context (GC) drawing: rectangles, text (put_text), images
  • MIT-SHM support for high-performance image transfer
  • Atom interning, extensions querying, fonts listing
  • Python ≥ 3.12, GPLv3
  • No external dependencies
  • Code in a single file

Installation

From within your favorite python environment:

pip install aioxlib

Quick start

import asyncio
import aioxlib


async def main():
    display = await aioxlib.get_display()
    async with display:
        screen = display.default_screen()
        wnd = await screen.create_window(width=640, height=480)
        await wnd.map()
        await wnd.set_name("Hello from aioxlib")

        # Handle window close
        protocols = await display.get_atom("WM_PROTOCOLS")
        delete = await display.get_atom("WM_DELETE_WINDOW")
        await wnd.set_wm_protocols([delete])

        async for event in display.events():
            if (
                event["code"] == aioxlib.Event.ClientMessage
                and event["type"] == protocols
                and event["data"][0] == delete
            ):
                break


asyncio.run(main())

Examples

The examples/ directory contains several demos:

File Description
basic.py Minimal window + close handling
text.py Draw text on expose
grid.py Fill a grid of rectangles
point.py Points API
segments.py Line segments
3d.py Simulate 3d rendering
shm.py MIT-SHM image transfer
video.py Live video from a V4L2 camera
video_shm.py Video + shared-memory path

Run any of them with:

python examples/basic.py

API overview

display = await aioxlib.get_display()          # or get_display(":0")
async with display:
    screen = display.default_screen()

    wnd = await screen.create_window(...)      # or display.create_window(...)
    await wnd.map()
    await wnd.set_name("…")
    await wnd.set_wm_protocols([...])

    gc = await wnd.create_gc(foreground=…, background=…)
    await gc.poly_fill_rectangles([...])
    await gc.put_text(x, y, "text")
    await wnd.draw_image(gc, x, y, w, h, depth, data)

    async for event in display.events():
        ...

Events are plain dicts with a "code" field matching aioxlib.Event.*.

Requirements

  • Python ≥ 3.12
  • An X11 server (Xorg, Xwayland, …)
  • $DISPLAY set (or pass the display string explicitly)

License

GPLv3 or later — see LICENSE.

Author

José Tiago Macara Coutinho
https://codeberg.org/tiagocoutinho


Early beta (v0.0.2). Feedback and contributions welcome!

Release files for aioxlib 0.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aioxlib 0.0.6
File Size Uploaded
aioxlib-0.0.6.tar.gz 55.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aioxlib 0.0.6
File Interpreter ABI Platform
aioxlib-0.0.6-py3-none-any.whl Python 3 none any Details

Total release size: 84.9 kB

Release files / aioxlib-0.0.6.tar.gz

Download URL aioxlib-0.0.6.tar.gz
Size 55.4 kB
Tags Source
SHA-256 checksum
How to use checksums
ec727b79a4953ecb5cb374baea7267753de14761c17e94b04ff41974228eaf8c
BLAKE2b-256 checksum
How to use checksums
271e2a8ea92c9b5f5993853ee871c41d9b05ba057d1bc953144a3051e2074a13
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.13

Release files / aioxlib-0.0.6-py3-none-any.whl

Download URL aioxlib-0.0.6-py3-none-any.whl
Size 29.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3bdee60df0bbb354397400f4e1b4063b42aacbc3a5f6b2532407337660712676
BLAKE2b-256 checksum
How to use checksums
51d7799280abcbc751c8480f90ed79ff246085d5f0eb419e669b0f9c7f59b65e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.13

Release history Release notifications | RSS feed

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.8

2 release files

0.0.7

2 release files

This release

0.0.6 This release

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page