Screen sharing on Hyprland (Arch Linux) This article provides a step-by-step guide for setting up screen sharing on the Hyprland compositor in Arch Linux, primarily for use with OBS. It covers installing necessary packages like PipeWire, WirePlumber, and either `xdg-desktop-portal-hyprland` or `xdg-desktop-portal-wlr`, along with configuration and troubleshooting steps. The guide assumes basic Linux knowledge and warns against having conflicting portal implementations installed. Screen sharing on Hyprland Arch Linux Table of contents - Screen sharing on Hyprland Arch Linux screen-sharing-on-hyprland--arch-linux- Introduction introduction Install PipeWire and friends install-pipewire-and-friends Install xdg-desktop-portal and friends install-xdg-desktop-portal-and-friends + Option 1: xdg-desktop-portal-hyprland recommended option--1--xdg-desktop-portal-hyprland--recommended- + Option 2: xdg-desktop-portal-wlr not recommended option--2--xdg-desktop-portal-wlr--not-recommended- Remove other portal implementations remove-other-portal-implementations Edit the configuration file edit-the-configuration-file Restart your session restart-your-session Troubleshooting PipeWire troubleshooting-pipewire Troubleshooting desktop portal troubleshooting-desktop-portal + Portal service wlroots implementation was skipped because of a failed condition check -portal-service--wlroots-implementation--was-skipped-because-of-a-failed-condition-check- + unsupported wl shm format 0x34324742 after trying to share the screen on NVIDIA -unsupported-wl-shm-format-0x34324742---after-trying-to-share-the-screen-on-nvidia- Troubleshooting OBS troubleshooting-obs Troubleshooting your browser troubleshooting-your-browser + Firefox firefox + Chromium chromium Troubleshooting your app troubleshooting-your-app It still doesn't work it-still-doesn-t-work- References references Introduction This guide will go through the setup and troubleshooting steps required to get screen sharing working on OBS with the Hyprland https://github.com/vaxerski/Hyprland compositor. This guide will use the yay AUR helper for AUR package installation, but the commands should be similar for other helpers such as paru . WARNING: This guide demands that the user has a basic understanding on installing packages both official and AUR , using git, compiling from source, and some patience. Install PipeWire and friends First, we need to install pipewire and wireplumber . To do that, run the following command: sudo pacman -S pipewire wireplumber Install xdg-desktop-portal and friends Option 1: xdg-desktop-portal-hyprland recommended We will install the xdg-desktop-portal-hyprland-git https://aur.archlinux.org/packages/xdg-desktop-portal-hyprland-git package from the AUR, which provides additional functionality such as window sharing. With an AUR helper such as yay , you can install it this way: yay -S xdg-desktop-portal-hyprland-git Option 2: xdg-desktop-portal-wlr not recommended This option provides less options than xdg-desktop-portal-wlr , but it will still allow fullscreen sharing. Install it running the following command: sudo pacman -S xdg-desktop-portal-wlr WARNING: The rest of this guide will assume xdg-desktop-portal-hyprland was choosed. If you picked this option, replace any -hyprland mentions for -wlr in the rest of this guide. Remove other portal implementations Make sure you don't have any other xdg-desktop-portal- packages installed except possibly xdg-desktop-portal-gtk for file dialogs , as this could cause problems later. To check if you have any, run the following command: pacman -Q | grep xdg-desktop-portal- then delete all of the listed packages except the -hyprland one we just installed and the -gtk one if you so chose. Also make sure to install the optional dependencies grim and slurp : sudo pacman -S grim slurp Editing the configuration file Open your Hyprland config file usually located at ~/.config/hypr/hyprland.conf with a text editor, and add the following line at the end: exec-once=dbus-update-activation-environment --systemd WAYLAND DISPLAY XDG CURRENT DESKTOP This will make sure that xdg-desktop-portal-hyprland can get the required variables on startup. Restart your session Now log out and then log back in, or reboot your system. Once you're back into Hyprland, try sharing in OBS with the "Screen Capture PipeWire " option. If it works, congratulations You may exit this guide now. If not, follow along: Troubleshooting PipeWire Make sure both pipewire and wireplumber are running. Run the following command: systemctl --user status pipewire wireplumber This should return "active running " for both. If it doesn't, follow the Arch Wiki article https://wiki.archlinux.org/title/PipeWire for troubleshooting. Troubleshooting desktop portal Run the following command to check for errors in xdg-desktop-portal-hyprland : systemctl --user status xdg-desktop-portal-hyprland This should return "active running ". If it doesn't, check the errors it gives you. Here's some workarounds for common errors: Portal service wlroots implementation was skipped because of a failed condition check Make sure you added the required line to the Hyprland configuration. Check for typos. unsupported wl shm format 0x34324742 after trying to share the screen on NVIDIA Install the modified hyprland-nvidia-git https://aur.archlinux.org/packages/hyprland-nvidia-git AUR package: yay -S hyprland-nvidia-git Alternatively, you can modify the source code manually: We'll need to modify the wlroots submodule source code to make it choose a viable format. First, clone the Hyprland https://github.com/vaxerski/Hyprland repo if you haven't already: git clone --recursive https://github.com/vaxerski/Hyprland Then, install all required dependencies for building, as specified in the wiki: sudo pacman -S gdb ninja gcc cmake libxcb xcb-proto xcb-util xcb-util-keysyms libxfixes libx11 libxcomposite xorg-xinput libxrender pixman wayland-protocols cairo pango --needed Open the wlroots/types/output/render.c file, look for the wlr output preferred read format , and replace it with the following: uint32 t wlr output preferred read format struct wlr output output { return DRM FORMAT XRGB8888; } Afterwards, compile and install by running sudo make install , then restart your session. Troubleshooting OBS You can try the wlrobs-hg https://aur.archlinux.org/packages/wlrobs-hg plugin. Troubleshooting your browser If you're trying to share your screen in your browser, first make sure that it supports Wayland and screen sharing on it, else it will not work. Firefox Make sure you're running on Wayland. To do this, go to about:support , look for "Window Protocol", and make sure it is set to "wayland". If it isn't, set the environment variable MOZ ENABLE WAYLAND=1 in an environment file, like /etc/environment , /etc/profile , ~/.bash profile , ~/.zshenv , etc. If it still doesn't work, open about:config and make sure the media.peerconnection.enabled flag is set to true. Chromium To run on Wayland, set the --ozone-platform-hint=auto flag in the chromium flags file ~/.config/chromium-flags.conf for the default package, ~/.config/chrome-flags.conf for Chrome . Also ensure the "WebRTC PipeWire support" flag is enabled by opening chrome://flags/ enable-webrtc-pipewire-capturer and enabling it. Troubleshooting your app Make sure the app you're trying to share the screen with supports Wayland and sharing the screen with it. Notable programs that still don't have full support for this are Discord and Zoom. It still doesn't work Follow the official xdg-desktop-portal-wlr troubleshooting guide https://github.com/emersion/xdg-desktop-portal-wlr/wiki/"It-doesn't-work"-Troubleshooting-Checklist . If it still doesn't work, consider opening an issue in the xdg-desktop-portal-hyprland repo https://github.com/hyprwm/xdg-desktop-portal-hyprland . References