2024-02-20 21:16:07 +01:00
---
2024-03-17 13:44:39 +01:00
weight: 6
2024-02-20 21:16:07 +01:00
title: xdg-desktop-portal-hyprland
---
2024-02-19 17:52:58 +01:00
2024-07-30 16:07:06 +02:00
An XDG Desktop Portal is a program that lets other applications communicate with
the compositor through D-Bus.
A portal implements certain functionalities, such as opening file pickers or
screen sharing.
[xdg-desktop-portal-hyprland ](https://github.com/hyprwm/xdg-desktop-portal-hyprland )
is Hyprland's xdg-desktop-portal implementation. It allows for screensharing,
global shortcuts, etc.
{{< callout type = "info" > }}
Throughout this document, `xdg-desktop-portal-hyprland` will be referred to as
XDPH.
{{< / callout > }}
{{< callout > }}
XDPH doesn't implement a file picker. For that, it is recommended to install
`xdg-desktop-portal-gtk` alongside XDPH.
{{< / callout > }}
## Installing
{{< tabs items = "Arch Linux,NixOS,Gentoo,Manual" > }}
{{< tab " Arch Linux " > }}
2024-11-06 21:55:14 +01:00
```sh
2024-07-30 16:07:06 +02:00
pacman -S xdg-desktop-portal-hyprland
```
or, for -git:
2024-11-06 21:55:14 +01:00
```sh
2024-07-30 16:07:06 +02:00
yay -S xdg-desktop-portal-hyprland-git
```
{{< / tab > }}
{{< tab " NixOS " > }}
On NixOS, XDPH is already enabled by the
[NixOS module for Hyprland ](../../Nix/Hyprland-on-NixOS ), through
`programs.hyprland.enable = true;` .
{{< / tab > }}
{{< tab " Gentoo " > }}
## Unmask dependencies
2024-11-06 21:55:14 +01:00
```plain {filename="/etc/portage/profile/package.unmask"}
2024-07-30 16:07:06 +02:00
dev-qt/qtbase
dev-qt/qtwayland
dev-qt/qtdeclarative
dev-qt/qtshadertools
```
## Apply necessary useflags
2024-11-06 21:55:14 +01:00
```plain {filename="/etc/portage/package.use"}
2024-07-30 16:07:06 +02:00
dev-qt/qtbase opengl egl eglfs gles2-only
dev-qt/qtdeclarative opengl
sys-apps/xdg-desktop-portal screencast
```
## Unmask dependencies and xdph
2024-11-06 21:55:14 +01:00
```plain {filename="/etc/portage/package.accept_keywords"}
2024-07-30 16:07:06 +02:00
gui-libs/xdg-desktop-portal-hyprland
dev-qt/qtbase
dev-qt/qtwayland
dev-qt/qtdeclarative
dev-qt/qtshadertools
```
btw those are the useflags that I have tested, you could also test others.
## Installation
```sh
eselect repository enable guru
emaint sync -r guru
emerge --ask --verbose gui-libs/xdg-desktop-portal-hyprland
```
{{< / tab > }}
{{< tab " Manual " > }}
See
2024-10-10 17:02:08 +02:00
[The GitHub repo's readme ](https://github.com/hyprwm/xdg-desktop-portal-hyprland ).
2024-07-30 16:07:06 +02:00
{{< / tab > }}
{{< / tabs > }}
## Usage
XDPH is automatically started by D-Bus, once Hyprland starts.
To check if everything is OK is, try to screenshare anything, or opening OBS and
select the PipeWire source. If XDPH is running, a Qt menu will pop up asking you
what to share.
XDPH will work on other wlroots compositors, but features available only on
Hyprland will not work (e.g. window sharing).
For a nuclear option, you can use this script and `exec-once` it:
```sh
#!/usr/bin/env bash
sleep 1
killall -e xdg-desktop-portal-hyprland
killall xdg-desktop-portal
/usr/lib/xdg-desktop-portal-hyprland &
sleep 2
/usr/lib/xdg-desktop-portal &
```
Adjust the paths if they're incorrect.
## Share picker doesn't use the system theme
Try one or both:
```sh
dbus-update-activation-environment --systemd --all
systemctl --user import-environment QT_QPA_PLATFORMTHEME
```
If it works, add it to your config in `exec-once` .
## Using the KDE file picker with XDPH
XDPH does not implement a file picker and uses the GTK one as a fallback by
default (see `/usr/share/xdg-desktop-portal/hyprland-portals.conf` ). If you want
to use the KDE file picker but let XDPH handle everything else, create a file
`~/.config/xdg-desktop-portal/hyprland-portals.conf` with the following content:
2024-11-06 21:55:14 +01:00
```ini {filename="~/.config/xdg-desktop-portal/hyprland-portals.conf"}
2024-07-30 16:07:06 +02:00
[preferred]
default = hyprland;gtk
org.freedesktop.impl.portal.FileChooser = kde
```
You can read more about this in the
[xdg-desktop-portal documentation in the Arch Wiki ](https://wiki.archlinux.org/title/XDG_Desktop_Portal ).
Note that some applications like Firefox may require additional configuration to
use the KDE file picker.
## Debugging
If you get long app launch times, or screensharing does not work, consult the
logs.
`systemctl --user status xdg-desktop-portal-hyprland`
If you see a crash, it's likely you are missing either `qt6-wayland` or
`qt5-wayland` .
2024-02-19 17:52:58 +01:00
2024-11-06 19:34:37 +01:00
If the portal does not autostart, does not function when manually started,
2024-09-30 13:48:16 +02:00
and does not produce any error logs, it's very likely your [XDG env variables ](../../Configuring/Environment-variables/#xdg-specifications )
2024-09-30 02:01:15 +02:00
are messed up
2024-02-19 17:52:58 +01:00
## Configuration
2024-05-02 21:14:19 +02:00
Example:
2024-07-30 16:07:06 +02:00
2024-05-02 21:14:19 +02:00
```ini
screencopy {
max_fps = 60
}
```
Config file `~/.config/hypr/xdph.conf` allows for these variables:
### category screencopy
2024-07-30 16:07:06 +02:00
| variable | description | type | default value |
| -------- | --------------------------------------------------------- | ---- | ------------- |
2024-12-13 22:12:53 +01:00
| max_fps | Maximum fps of a screensharing session. 0 means no limit. | int | 120 |
| allow_token_by_default | If enabled, will tick the "Allow restore token" box by default | bool | false |
| custom_picker_binary | If non-empty, will use that **binary** as your share picker. Please note that it has to conform to the stdout selection layout of `hyprland-share-picker` . | bool | false |