[{"data":1,"prerenderedAt":298},["ShallowReactive",2],{"blog-screencast-wayland-sway":3},{"id":4,"title":5,"ancienne_url":6,"body":7,"date":286,"description":287,"extension":288,"meta":289,"navigation":290,"path":291,"seo":292,"stem":293,"tags":294,"__hash__":297},"blog\u002Fblog\u002Fscreencast-wayland-sway.md","Screencast \u002F partage d'écran avec Wayland et Sway","\u002Fdivers\u002Fscreencast-avec-wayland-et-sway\u002F",{"type":8,"value":9,"toc":275},"minimark",[10,22,31,40,54,59,70,75,78,85,126,130,133,152,156,165,184,190,194,203,210,214,222,226,252,256,259,268,271],[11,12,13,14,21],"p",{},"En ces temps de confinement, les besoins et envies de partage d'écran sous\nWayland sont d'actualité, et c'est l'occasion de s'y re-pencher. Je tourne avec\nGentoo et ",[15,16,20],"a",{"href":17,"rel":18},"https:\u002F\u002Fswaywm.org\u002F",[19],"nofollow","Sway"," (et c'est génial, rapide et super\nefficace). Bref, j'ai besoin de partager une appli Python \u002F wxPython pour une\ndémo \u002F réunion dans deux semaines.",[11,23,24,25,30],{},"Pour savoir où vous en êtes, il y a une page de test pour le partage d'écran avec\nvotre navigateur : ",[15,26,29],{"href":27,"rel":28},"https:\u002F\u002Fmozilla.github.io\u002Fwebrtc-landing\u002Fgum_test.html",[19],"gum_test.html",".",[11,32,33,34,39],{},"Le navigateur est mon choix par défaut pour la visio sous Linux, parce que j'ai\nrarement envie d'installer les applis dédiées. Si ça marche avec le lien\nci-dessus, ça devrait marcher avec ",[15,35,38],{"href":36,"rel":37},"https:\u002F\u002Fjitsi.org\u002F",[19],"Jitsi"," ou Zoom (dont je\nne souhaite vraiment pas installer l'appli !). Hélas, la réunion sera sous\nGoToMeeting, donc il y a un facteur surprise, mais ça doit être aussi du WebRTC,\nn'est-ce pas :)",[11,41,42,43,48,49,53],{},"La marche à suivre est à peu près tracée\n",[15,44,47],{"href":45,"rel":46},"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fswaywm\u002Fcomments\u002Ffq1qoe\u002Fhow_to_use_xdgdesktopportalwlr_to_share_the_screen\u002F",[19],"ici",".\nEt d'après l'auteur, ça marche, ô joie ! Après cette lueur de joie, quelques\nheures de sueurs, de la réussite et un peu de désillusion, j'ai conclu avec un\ncompromis puisque je n'aurai besoin de la fonctionnalité que quelques instants…\n(Divulgâchage : ça implique ",[50,51,52],"code",{},"Xwayland",".)",[55,56,58],"h2",{"id":57},"le-fond","Le fond",[11,60,61,62,65,66,69],{},"Attention : j'ai eu quelques crashs plus ou moins violents sur la route, dont\n",[50,63,64],{},"sway","… Les instructions ne fonctionneront probablement pas en les copiant\ndirectement car il manque quelques ",[50,67,68],{},"cd"," ou autres.",[71,72,74],"h3",{"id":73},"pipewire-03-git","Pipewire 0.3 (git)",[11,76,77],{},"« PipeWire is a server and user space API to deal with multimedia pipelines. »",[11,79,80,81,84],{},"C'est lui qui va transmettre le flux vidéo entre la capture au niveau Wayland et\nle navigateur… Right ? Gentoo n'a que la version 0.2 dans les repos, et ça ne\nsuffit pas pour compiler ",[50,82,83],{},"xdg-desktop-portal-wlr"," !",[86,87,92],"pre",{"className":88,"code":89,"language":90,"meta":91,"style":91},"language-zsh shiki shiki-themes github-light github-dark-default","git clone https:\u002F\u002Fgithub.com\u002FPipeWire\u002Fpipewire.git\n# [...]\nmeson build -Djack=false -Dvulkan=false -Dpipewire-jack=false --prefix=\u002Fusr\u002F --libdir=\u002Fusr\u002Flib\u002F\nsudo ninja -C build install\nsystemctl --user start pipewire.service\n","zsh","",[50,93,94,102,108,114,120],{"__ignoreMap":91},[95,96,99],"span",{"class":97,"line":98},"line",1,[95,100,101],{},"git clone https:\u002F\u002Fgithub.com\u002FPipeWire\u002Fpipewire.git\n",[95,103,105],{"class":97,"line":104},2,[95,106,107],{},"# [...]\n",[95,109,111],{"class":97,"line":110},3,[95,112,113],{},"meson build -Djack=false -Dvulkan=false -Dpipewire-jack=false --prefix=\u002Fusr\u002F --libdir=\u002Fusr\u002Flib\u002F\n",[95,115,117],{"class":97,"line":116},4,[95,118,119],{},"sudo ninja -C build install\n",[95,121,123],{"class":97,"line":122},5,[95,124,125],{},"systemctl --user start pipewire.service\n",[71,127,129],{"id":128},"xdg-desktop-portal-git","xdg-desktop-portal (git)",[11,131,132],{},"« Desktop integration portal » — vous ouvre les portes du « bureau » par le biais\nde requêtes D-Bus.",[86,134,136],{"className":88,"code":135,"language":90,"meta":91,"style":91},"git clone https:\u002F\u002Fgithub.com\u002Fflatpak\u002Fxdg-desktop-portal.git\n# [...]\nsystemctl --user start xdg-desktop-portal.service\n",[50,137,138,143,147],{"__ignoreMap":91},[95,139,140],{"class":97,"line":98},[95,141,142],{},"git clone https:\u002F\u002Fgithub.com\u002Fflatpak\u002Fxdg-desktop-portal.git\n",[95,144,145],{"class":97,"line":104},[95,146,107],{},[95,148,149],{"class":97,"line":110},[95,150,151],{},"systemctl --user start xdg-desktop-portal.service\n",[71,153,155],{"id":154},"xdg-desktop-portal-wlr-git","xdg-desktop-portal-wlr (git)",[11,157,158,159,162,163,30],{},"« xdg-desktop-portal backend for wlroots » — implémente le portail pour\n",[50,160,161],{},"wlroots",", le compositeur Wayland de ",[50,164,64],{},[86,166,168],{"className":88,"code":167,"language":90,"meta":91,"style":91},"git clone https:\u002F\u002Fgithub.com\u002Femersion\u002Fxdg-desktop-portal-wlr.git\n# [...]\nxdg-desktop-portal-wlr -lTRACE -p BGRx\n",[50,169,170,175,179],{"__ignoreMap":91},[95,171,172],{"class":97,"line":98},[95,173,174],{},"git clone https:\u002F\u002Fgithub.com\u002Femersion\u002Fxdg-desktop-portal-wlr.git\n",[95,176,177],{"class":97,"line":104},[95,178,107],{},[95,180,181],{"class":97,"line":110},[95,182,183],{},"xdg-desktop-portal-wlr -lTRACE -p BGRx\n",[11,185,186,189],{},[50,187,188],{},"-lTRACE"," pour le debug.",[71,191,193],{"id":192},"etcenvironment","\u002Fetc\u002Fenvironment",[86,195,197],{"className":88,"code":196,"language":90,"meta":91,"style":91},"XDG_CURRENT_DESKTOP=sway\n",[50,198,199],{"__ignoreMap":91},[95,200,201],{"class":97,"line":98},[95,202,196],{},[11,204,205,206,209],{},"Est nécessaire pour le lancement du portail. Attention, ça casse potentiellement\nla barre d'icônes ",[50,207,208],{},"libappindicator"," dans Waybar.",[71,211,213],{"id":212},"tester-avec-castpy","Tester avec cast.py",[11,215,216,217,221],{},"Le script est ici (Python) : ",[15,218,219],{"href":219,"rel":220},"https:\u002F\u002Fgitlab.gnome.org\u002Fsnippets\u002F19",[19],". Et là,\nmiracle, si tout va bien, on voit son écran. Il faudra peut-être redémarrer avant\nque ça fonctionne. Pour moi, ça ne marche pas !",[55,223,225],{"id":224},"la-forme","La forme",[11,227,228,229,232,233,236,237,240,241,244,245,248,249,251],{},"Si vous pensiez vous en être tiré, eh bien soit c'est le cas et vous pouvez\ncaster un de vos écrans, soit vous êtes comme moi et maintenant, il faut un\nnavigateur (ou une application tierce) natif Wayland et qui utilise ",[50,230,231],{},"pipewire",".\nEt là, misère. Ce n'est pas le cas de mon fidèle ",[50,234,235],{},"qutebrowser",". Ni de\n",[50,238,239],{},"firefox-bin"," (Wayland mais pas pipewire) ou ",[50,242,243],{},"google-chrome-stable"," (pipewire\nmais Xwayland). En fait il faut un Firefox patché à la Fedora ou un ",[50,246,247],{},"chromium","\ncompilé avec Wayland et pipewire. Comme mon temps de compilation est déjà\nabusivement long pour ",[50,250,235],{}," (3 h pour le qtwebengine), je n'ai pas du tout\nenvie de compiler chromium ou firefox en plus !",[55,253,255],{"id":254},"la-solution-qui-nen-est-pas-vraiment-une","La solution qui n'en est pas vraiment une…",[11,257,258],{},"Parmi tous les tests effectués, je me suis retrouvé à un moment à pouvoir\nsélectionner une fenêtre à caster : celle de Google Chrome. Celui-ci est un des\nrares énergumènes qui tourne sous Xwayland. Du coup, j'essaie : si je lance mon\nappli en mode de compatibilité Xwayland, sera-t-elle elle aussi visible dans ce\nchoix de fenêtres ? Eh oui !",[86,260,262],{"className":88,"code":261,"language":90,"meta":91,"style":91},"GDK_BACKEND=x11 python __main__.py\n",[50,263,264],{"__ignoreMap":91},[95,265,266],{"class":97,"line":98},[95,267,261],{},[11,269,270],{},"Ça marche même avec Firefox pourtant lancé en mode Wayland. Et bien ça ira pour\ncette fois : on peut choisir une application Xwayland dans le protocole WebRTC.\nPeut-être qu'en regardant comment fonctionne le VNC sous Wayland (wayvnc, article\nà suivre ?), je trouverai quelque chose de sympa :)",[272,273,274],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":91,"searchDepth":104,"depth":104,"links":276},[277,284,285],{"id":57,"depth":104,"text":58,"children":278},[279,280,281,282,283],{"id":73,"depth":110,"text":74},{"id":128,"depth":110,"text":129},{"id":154,"depth":110,"text":155},{"id":192,"depth":110,"text":193},{"id":212,"depth":110,"text":213},{"id":224,"depth":104,"text":225},{"id":254,"depth":104,"text":255},"2020-04-12","Partager son écran sous Wayland et Sway pour une visio dans le navigateur : pipewire, xdg-desktop-portal-wlr, et un compromis via Xwayland.","md",{},true,"\u002Fblog\u002Fscreencast-wayland-sway",{"title":5,"description":287},"blog\u002Fscreencast-wayland-sway",[64,295,296],"wayland","linux","RV_fBUzApEUe8_31K1Wi9mM6OwQc3uc1TXnh8FcjgXg",1783955632941]