Hide navigation sidebar
Hide table of contents sidebar
Skip to content
Back to top
View this page
Toggle table of contents sidebar

# Building & Running

Normally, XDG Desktop Portal runs as a user session service, initialized on demand through D-Bus activation. It usually starts with the session though, as many desktop environments try to talk to XDG Desktop Portal on startup. XDG Desktop Portal initializes specific backends through D-Bus activation as well.

## Building

To build XDG Desktop Portal, first make sure you have the build dependencies installed through your distribution’s package manager. With them installed, run:

    meson setup . _build
    meson compile -C _build

Some distributions install portal configuration files in `/usr`, while Meson defaults to the prefix `/usr/local`. If the portal configuration files in your distribution are in `/usr/share/xdg-desktop-portal/portals`, re-configure Meson using `meson setup --reconfigure . _build --prefix /usr` and compile again.

## Running

XDG Desktop Portal needs to own the D-Bus name and replace the user session service that might already be running. To do so, run:

    _build/src/xdg-desktop-portal --replace

If you are developing inside a `toolbox` container, you must use `flatpak-spawn` from `flatpak-xdg-utils` to run the service:

    flatpak-spawn --host _build/src/xdg-desktop-portal --replace

You may need to restart backends after replacing XDG Desktop Portal (please replace `[name]` with the backend name, e.g. `gnome` or `kde` or `wlr`):

    systemctl --user restart xdg-desktop-portal-[name].service

## Testing

To execute the test suite present in XDG Desktop Portal, run:

    meson test -C _build

Enable the pre-commit hooks to catch issues early:

    git config --local core.hooksPath .githooks/

When a branch is pushed to github, CI will also run tests in a few more configurations.

## Documentation

These instructions are for Fedora, where you will need these packages:

    sudo dnf install json-glib-devel fuse3-devel gdk-pixbuf2-devel pipewire-devel python3-sphinx flatpak-devel python3-furo python-sphinxext-opengraph python-sphinx-copybutton

Then you can build the website with:

    meson setup . _build -Ddocumentation=enabled
    ninja -C _build

Then just load the build website into a browser of your choice from `_build/doc/html/index.html`