ASHPD, acronym of Aperture Science Handheld Portal Device is a Rust & zbus wrapper of the XDG portals DBus interfaces. The library aims to provide an easy way to interact with the various portals defined per the specifications. It provides an alternative to the C library https://github.com/flatpak/libportal
Ask the compositor to pick a color
```rust,no_run use ashpd::desktop::screenshot::Color;
async fn run() -> ashpd::Result<()> { let color = Color::request().send().await?.response()?; println!("({}, {}, {})", color.red(), color.green(), color.blue()); Ok(()) } ```
Start a PipeWire stream from the user's camera
```rust,no_run use ashpd::desktop::camera::Camera;
pub async fn run() -> ashpd::Result<()> { let camera = Camera::new().await?; if camera.ispresent().await? { camera.requestaccess().await?; let remotefd = camera.openpipewireremote().await?; // pass the remote fd to GStreamer for example } Ok(()) } ```
| Feature | Description | Default |
| --- | ----------- | ------- |
| tracing | Record various debug information using the tracing
library | No |
| tokio | Enable tokio runtime on zbus dependency | No |
| async-std | Enable the use of the async-std runtime | Yes |
| gtk4 | Implement From<Color>
for gdk4::RGBA
Provides WindowIdentifier::from_native
that takes a IsA<gtk4::Native>
| No |
| gtk4wayland |Provides WindowIdentifier::from_native
that takes a IsA<gtk4::Native>
with Wayland backend support only | No |
| gtk4x11 |Provides WindowIdentifier::from_native
that takes a IsA<gtk4::Native>
with X11 backend support only | No |
| pipewire | Provides ashpd::desktop::camera::pipewire_streams
that helps you retrieve the various camera streams associated with the retrieved file descriptor| No |
| raw_handle | Provides WindowIdentifier::from_raw_handle
and WindowIdentifier::as_raw_handle
for raw-window-handle crate | No |
| wayland | Provides WindowIdentifier::from_wayland
for wayland-client crate | No |
The library comes with a demo built using the GTK 4 Rust bindings and previews most of the portals. It is meant as a test case for the portals (from a distributor perspective) and as a way for the developers to see which portals exists and how to integrate them into their application using ASHPD.