CyberSDF

Reprenez la main sur votre numérique

Enregistrer l’écran sous Wayland avec OBS Studio et PipeWire

plusieurs fenetres abstraites en aplats geometriques qui se recouvrent, vue de face

Une source « Screen Capture (PipeWire) » affichée en noir, et dans le journal d’OBS Studio la ligne warning: [pipewire] Failed to start screencast, denied or cancelled by user. Sous Wayland, OBS Studio ne lit pas l’écran : il le demande au portail xdg-desktop-portal, qui interroge le backend du bureau, puis reçoit les images par PipeWire. L’écran noir vient presque toujours du portail, pas d’OBS. Les versions de référence de cette page sont celles de Debian 13 trixie, avec obs-studio 30.2.3, xdg-desktop-portal 1.20.3 et pipewire 1.4.2.

Sommaire
  1. OBS Studio ne lit pas l’écran sous Wayland, il le demande au portail
  2. La procédure en cinq étapes, de la session au fichier relu
  3. « Failed to start screencast, denied or cancelled by user » accuse l’utilisateur, pas la cause
  4. Un ancien journal ne dit pas ce qu’écrit un journal actuel
  5. Sous wlroots, le portail prend le premier écran si aucun sélecteur n’est installé
  6. Quelle version pour quelle distribution
  7. Questions fréquentes

OBS Studio ne lit pas l’écran sous Wayland, il le demande au portail

Wayland interdit à un client de lire le contenu d’une autre fenêtre. Le Wiki Arch l’écrit ainsi : sous Wayland, le partage d’écran passe par le portail XDG Desktop et PipeWire, et OBS Studio utilise cette méthode depuis sa version 27. Sous X11, le plugin linux-capture, décrit comme le « Linux XShm capture plugin » dans son propre README, lit l’écran directement ; sous Wayland, ce rôle revient au plugin linux-pipewire, qui n’a aucun accès direct à l’écran.

Ce plugin ouvre une connexion D-Bus sur le service org.freedesktop.portal.Desktop, l’objet /org/freedesktop/portal/desktop et l’interface org.freedesktop.portal.ScreenCast. Il lit la propriété AvailableSourceTypes, dont les bits documentés valent 1 pour un écran, 2 pour une fenêtre et 4 pour un écran virtuel, puis demande les deux premiers avec l’option multiple à faux : une seule source, un écran ou une fenêtre.

Si cette propriété vaut zéro, OBS Studio écrit [pipewire] No capture sources available et n’enregistre même pas la source « Screen Capture (PipeWire) » : elle n’apparaît pas dans la liste. Une source absente est donc un diagnostic, pas un caprice de l’interface. Son identifiant interne, visible dans les journaux, est pipewire-screen-capture-source, et les deux anciennes sources séparées, pipewire-desktop-capture-source et pipewire-window-capture-source, sont marquées obsolètes dans le code actuel.

La procédure en cinq étapes, de la session au fichier relu

  1. Vérifier que la session est en Wayland et que le portail répond.

    echo $XDG_SESSION_TYPE
    echo $WAYLAND_DISPLAY
    echo $XDG_CURRENT_DESKTOP
    systemctl --user status xdg-desktop-portal
    busctl --user get-property org.freedesktop.portal.Desktop /org/freedesktop/portal/desktop org.freedesktop.portal.ScreenCast version
    ls /usr/share/xdg-desktop-portal/portals/

    À l’écran : wayland pour la première variable, une valeur commençant par wayland- pour la deuxième, puis le nom du bureau. Le portail doit être active (running). La commande busctl renvoie un entier, par exemple u 4 : à partir de la version 4 de cette interface, OBS Studio sait mémoriser l’autorisation au lieu de la redemander à chaque lancement. Une erreur Unknown interface signifie que le portail installé ne sait pas capturer l’écran. La dernière commande liste les fichiers .portal des backends présents.

  2. Installer OBS Studio et le backend du portail correspondant au bureau. Le paquet de base n’en fournit aucun.

    apt policy obs-studio
    sudo apt install obs-studio
    sudo apt install xdg-desktop-portal-gnome

    Remplacer xdg-desktop-portal-gnome par xdg-desktop-portal-kde sous KDE Plasma, xdg-desktop-portal-wlr sous Sway ou un autre compositeur wlroots, xdg-desktop-portal-hyprland sous Hyprland.

    À l’écran : la version installable, soit 30.2.3+dfsg-3 sous Debian 13 trixie, 32.2.2+ds-1 sous Debian forky ou sid, puis la ligne 0 upgraded, 0 newly installed en fin d’installation. Sur Ubuntu 24.04 LTS, le dépôt universe fournit obs-studio 30.0.2. Le backend installé se contrôle avec dpkg -l | grep xdg-desktop-portal. Si le portail tournait déjà, systemctl --user restart xdg-desktop-portal le recharge ; ses journaux se lisent avec les commandes systemd habituelles.

  3. Ajouter la source dans OBS Studio. Le bouton + du panneau Sources ouvre la liste : choisir « Screen Capture (PipeWire) ». Le portail ouvre alors sa propre boîte de dialogue, qui propose les écrans et les fenêtres disponibles et attend une validation. Le libellé exact dépend du backend, GNOME, KDE ou wlroots.

    À l’écran : la boîte de dialogue du portail, puis l’écran choisi dans l’aperçu d’OBS Studio, et ces quatre lignes dans le journal, dans cet ordre :

    info: User added source 'Screen Capture (PipeWire)' (pipewire-screen-capture-source) to scene 'Scene'
    info: [pipewire] Screencast session created
    info: [pipewire] Asking for monitor and window
    info: [pipewire] source selected, setting up screencast

    Les propriétés de la source contiennent un bouton pour resélectionner l’écran et une case pour afficher ou masquer le curseur.

  4. Régler la sortie puis enregistrer. Dans Réglages, catégorie Sortie, onglet Enregistrement, se trouvent le dossier de destination, le format et l’encodeur. Sous Linux, OBS Studio écrit par défaut dans le dossier personnel de l’utilisateur, comme le rappelle le Wiki Arch. Lancer ensuite un essai de dix secondes, puis l’arrêter.

    À l’écran : le voyant d’enregistrement en rouge, la durée qui s’incrémente dans la barre d’état, puis un fichier au nom horodaté du type 2026-09-19 14-22-05.mkv, dans le dossier affiché par les réglages.

    ls -lt ~/Vidéos | head -n 3
  5. Relire le fichier et contrôler le journal. Chaque lancement écrit un fichier texte horodaté dans ~/.config/obs-studio/logs/, également accessible par le menu Aide, puis Fichiers journaux.

    ls -t ~/.config/obs-studio/logs/*.txt | head -n 1
    grep pipewire ~/.config/obs-studio/logs/*.txt | tail -n 20

    À l’écran : les lignes de l’étape 3, suivies du format négocié, du type info: [pipewire] Size: 1920x1080 et info: [pipewire] Framerate: 60/1. La lecture du fichier doit montrer une image qui bouge et un son présent, sans aplat noir.

« Failed to start screencast, denied or cancelled by user » accuse l’utilisateur, pas la cause

Ce message ne signifie pas qu’une autorisation a été refusée. Dans le code du plugin, il est écrit quand la réponse du portail à la demande de démarrage porte un code non nul : c’est le cas d’une boîte de dialogue fermée, mais aussi celui d’un backend qui échoue à répondre. Le journal qui accompagne l’écran noir est celui-ci :

info: PipeWire initialized
info: [pipewire] Screencast session created
info: [pipewire] Asking for monitor and window
warning: [pipewire] Failed to start screencast, denied or cancelled by user

Le rapport d’anomalie 5794 du dépôt OBS Studio montre le cas sans ambiguïté : un utilisateur d’OBS Studio 27.1.3 sous Arch Linux et KDE Plasma 5.23.90 obtient un écran noir et cette ligne, sans jamais avoir vu la moindre boîte de dialogue. Le refus supposé n’a pas eu lieu, c’est le portail qui n’a pas répondu. L’ordre de vérification qui règle la majorité des cas : confirmer la présence de l’interface org.freedesktop.portal.ScreenCast, vérifier que le backend du bureau est installé, relancer le portail, puis lire ses messages.

systemctl --user restart xdg-desktop-portal
journalctl --user -b -u xdg-desktop-portal -n 40

Deux autres lignes du même fichier ont la même origine, avec un code non nul à une étape antérieure : [pipewire] Failed to create session, denied or cancelled by user et [pipewire] Failed to select source, denied or cancelled by user. Le remède est identique.

Un ancien journal ne dit pas ce qu’écrit un journal actuel

Sur une version antérieure d’OBS Studio, une capture réussie s’écrit [pipewire] desktop selected, setting up screencast ; les versions actuelles écrivent [pipewire] source selected, setting up screencast. Un tutoriel plus ancien qui fait chercher la première phrase conduit donc à conclure à tort à un échec.

Les correctifs suivent aussi les versions. Les notes d’OBS Studio 32.2, publiées le 21 juillet 2026, mentionnent « Fixed an issue where PipeWire could fail on NVIDIA GPUs » ; cette version relève le SDK NVIDIA en version 13 et impose un pilote 570 ou plus récent. OBS Studio 32.1.2, publié le 21 avril 2026, corrige « an issue with PipeWire when capturing a device that does not require a framerate ».

Sous wlroots, le portail prend le premier écran si aucun sélecteur n’est installé

Le backend xdg-desktop-portal-wlr, fourni en version 0.7.1-2 par Debian 13, ne dessine pas de boîte de dialogue : il cherche un sélecteur externe, dans cet ordre, slurp, wmenu, wofi, rofi, bemenu, mew puis fuzzel. Sans aucun de ces programmes, il capture le premier écran trouvé sans rien demander. Ce portail a une seconde condition, souvent oubliée : il a besoin des variables XDG_CURRENT_DESKTOP et WAYLAND_DISPLAY dans la session utilisateur de systemd, sway étant à remplacer par le nom du compositeur.

systemctl --user show-environment | grep -E 'WAYLAND_DISPLAY|XDG_CURRENT_DESKTOP'
systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway

Quelle version pour quelle distribution

OBS Studio et son portail ne sont pas fournis aux mêmes versions selon le dépôt. Les numéros ci-dessous sont ceux des dépôts officiels des distributions ; la colonne PipeWire donne la version du serveur multimédia.

Versions publiées par les distributions, relevées dans les archives des paquets
Distribution obs-studio xdg-desktop-portal pipewire
Debian 12 bookworm 29.0.2+dfsg-1 1.16.0-2 0.3.65
Debian 13 trixie 30.2.3+dfsg-3 1.20.3+ds-1 1.4.2-1
Debian forky et sid 32.2.2+ds-1 1.22.1+ds-1 non relevé
Ubuntu 24.04 LTS 30.0.2+dfsg-3build1, dépôt universe non vérifié non vérifié
Flathub, paquet Flatpak 32.2.2 sans objet sans objet

Les versions d’xdg-desktop-portal et de pipewire fournies par Ubuntu 24.04 LTS n’ont pas pu être vérifiées dans les archives de paquets : il ne faut pas les supposer identiques à celles de Debian. Sous Debian 12 bookworm, le backend GNOME est xdg-desktop-portal-gnome 43.1-2, et obs-studio 29.0.2 y dispose déjà de la source PipeWire. Le paquet Flatpak apporte OBS Studio 32.2.2 sur une distribution plus ancienne, mais il utilise le portail et le serveur PipeWire du système, qu’il ne remplace pas. Pour choisir entre dépôt et Flatpak, la rubrique logiciels détaille les critères qui changent quelque chose, à commencer par les mises à jour et l’accès aux fichiers.

Questions fréquentes

La source « Screen Capture (PipeWire) » n’apparaît pas dans la liste, que vérifier ?

Le portail n’annonce aucune source capturable, et OBS Studio écrit [pipewire] No capture sources available dans son journal. Lancer busctl --user introspect org.freedesktop.portal.Desktop /org/freedesktop/portal/desktop : sans ligne org.freedesktop.portal.ScreenCast, le backend du bureau est absent, ou bien XDG_CURRENT_DESKTOP désigne un autre bureau que celui dont le backend est installé.

Faut-il installer xdg-desktop-portal-gtk pour la capture d’écran ?

Non. La matrice des backends du Wiki Arch indique que xdg-desktop-portal-gtk n’implémente pas le portail ScreenCast : ce paquet sert de repli pour d’autres interfaces, comme les boîtes de dialogue de fichiers. Sous GNOME, le backend qui capture est xdg-desktop-portal-gnome ; sous KDE Plasma, xdg-desktop-portal-kde.

La boîte de dialogue d’autorisation revient-elle à chaque lancement d’OBS Studio ?

Pas si le portail expose l’interface ScreenCast en version 4 ou plus. OBS Studio envoie alors persist_mode à 2, la valeur documentée pour une autorisation qui persiste jusqu’à révocation, et conserve le jeton de restauration dans les propriétés de la source. Ce jeton est à usage unique et remplacé à chaque session. Si l’écran mémorisé a disparu ou si l’autorisation a été retirée, le portail redemande la sélection.

Pourquoi un écran a-t-il été capturé sans qu’aucune sélection soit demandée ?

C’est le comportement de xdg-desktop-portal-wlr sous Sway et les autres compositeurs wlroots : sans slurp, wofi, rofi, wmenu, bemenu, mew ni fuzzel installé, il retombe sur le premier écran détecté. Installer slurp rétablit une sélection explicite, avec un curseur en croix et un clic sur l’écran à capturer.

Sources : OBS Studio, plugins/linux-pipewire/screencast-portal.c, lignes de journal et propriétés du portail, OBS Studio 32.2.2, notes de version du 14 août 2026, OBS Studio 32.2, notes de version du 21 juillet 2026, xdg-desktop-portal, interface org.freedesktop.portal.ScreenCast, ArchWiki PipeWire, WebRTC screen sharing, ArchWiki XDG Desktop Portal, backends et variables de session, ArchWiki OBS Studio, plugin Qt 6 et source PipeWire, Debian Package Tracker, obs-studio, Debian Package Tracker, xdg-desktop-portal, OBS Studio, rapport d’anomalie 5794, busctl(1), commande get-property.