在niri下实现腾讯会议(wemeet)屏幕共享的经验分享

2026-04-11 12:461阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

因为经常要开会,所以腾讯会议 (wemeet) 的屏幕共享问题对我来说是一个重大的阻碍,不能让我完全放弃 Windows 转 GNU/Linux。虽然可能在 kde 或者 gnome 桌面下问题不大,但是我还是比较想用 niri,所以一直在折腾。终于在尝试各种各样的方案以后,在AI 的帮助下,实现了 niri 下的腾讯会议屏幕共享,包括两个:

  1. 自己可以正常共享
  2. 能看到别人的共享

这应该算是社区里大家都经常遇到的两个问题,所以分享出来供大家参考

因为不是特别专业,所以就简单按自己的理解总结一下要注意的点。

我的系统是NixOS,niri是25.11版本,wemeet是3.26.10.401版本,显卡是NVIDIA。如果佬们的版本和硬件和我的不同可能不完全适用。

先说说如果完全不配置可能出现的情况是什么,就是wemeet可以正常打开,点击屏幕共享没有调出屏幕选择,然后也看不到别人共享的屏幕(黑屏)。

下面是具体配置步骤:

  1. 第一步,给niri打一个补丁, Support shm sharing by wrvsrx · Pull Request #1791 · niri-wm/niri · GitHub 。据说是解决了shm的问题(虽然我不太了解这是啥),但是提这个pr的佬说他的wemeet在打了这个补丁之后正常工作,我之后的配置也是在这个基础上的,没有试过去掉这个补丁之后是否还能用(

image925×198 39.9 KB

  1. 第二步,将和屏幕相关的 portal 请求,交给 hyprland backend 处理。具体来说是 “org.freedesktop.impl.portal.ScreenCast” = [ “hyprland” ];“org.freedesktop.impl.portal.RemoteDesktop” = [ “hyprland” ];
    这里是参考的这位佬的帖子 niri如何正确运行腾讯会议

安装portal:

xdg.portal.extraPortals = with pkgs; [ xdg-desktop-portal-gnome xdg-desktop-portal-gtk xdg-desktop-portal-hyprland xdg-desktop-portal-wlr ];

配置portal:

niri = { default = lib.mkForce [ "gtk" "gnome" ]; "org.freedesktop.impl.portal.Access" = [ "gtk" ]; "org.freedesktop.impl.portal.Notification" = [ "gtk" ]; "org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ]; "org.freedesktop.impl.portal.ScreenCast" = [ "hyprland" ]; "org.freedesktop.impl.portal.RemoteDesktop" = [ "hyprland" ]; };

同时可能需要同步一下境变量,在niri的配置文件spawn-sh-at-startup.kdl中加上:

spawn-sh-at-startup "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=niri"

到这一步,如果环境加载没问题,那么就已经可以共享自己的屏幕了。具体来说会出现一个选择共享屏幕的窗口,点击就能共享了,(同时还有可能出现一系列的绿色窗口,应该是某种奇怪的bug,但是不影响屏幕共享。)

只有这个没用

image915×662 33.2 KB

点击开始共享后出现了这个窗口才算成功(不过现在只能共享整个屏幕,不能选窗口),之后应该就能正常共享自己的屏幕了

image1273×956 49 KB

不过,到此为止还没有解决无法看到别人共享的问题,可能要么是黑屏,要么是闪退。

所以需要第三步


第二步更新,见

在niri下实现腾讯会议(wemeet)屏幕共享的经验分享 搞七捻三
更新一下,现在我发现在第二步,将和屏幕相关的 portal 请求,可以不走hyprland后端,直接用gnome后端即可,实测可用且可以选择窗口共享 [image] [image] 配置如下 config = { common = { # Use GNOME first with GTK as the global fallback backend. …

  1. 第三步,让wemeet本体走 XWayland,同时保持上面配置好的 portal。前者解决无法看到别人共享的屏幕的问题,后者解决自己共享屏幕的问题。这里主要是 AI 帮我配的,nixos 里面直接这样写

{ pkgs, ... }@args: let # Use the stable package-set build for Wemeet itself so the app keeps the # older 1.4.x PipeWire-era screenshare hook path, while preserving the # current repo-local wrapper strategy around it. wemeetBase = args."pkgs-stable".wemeet; # Keep upstream Wemeet resources and desktop entry, but replace the default # launcher with the hybrid route validated under niri: # XWayland startup + Mesa EGL + Wayland portal/PipeWire screenshare backend. wemeet = pkgs.symlinkJoin { name = "wemeet"; paths = [ wemeetBase ]; nativeBuildInputs = [ pkgs.makeWrapper ]; postBuild = '' rm -f $out/bin/wemeet displayProbe='if [ -z "''${DISPLAY-}" ]; then for x_sock in /tmp/.X11-unix/X*; do if [ -S "$x_sock" ]; then export DISPLAY=":''${x_sock##*/X}" break fi done fi' makeWrapper ${wemeetBase}/bin/wemeet-xwayland $out/bin/wemeet \ --run "$displayProbe" \ --set __EGL_VENDOR_LIBRARY_FILENAMES ${pkgs.mesa}/share/glvnd/egl_vendor.d/50_mesa.json ''; }; in { home.packages = [ wemeet ]; }

里面还配置了优先用 Mesa 的 EGL(应该和 NVIDIA 显卡的渲染问题有关),我的设备不这样配会导致 wemeet 崩溃。

总之最后能看到别人共享的屏幕了,自己也能共享,而且之前的绿色窗口也消失了,算是意外之喜

image1253×1353 131 KB

这套方案我用了几天算是比较稳了,逃离Windows指日可待

网友解答:
--【壹】--:

感谢佬的分享!
nix配置用AI看一下应该很快就能“翻译”出来。

我觉得大体和佬的方案也差不多,wemeet 走 x11或xwayland,然后能正常调用portal就行(niri自己没有屏幕共享的portal所以用gnome的),然后用“ 使用 Fix 了 shm sharing 的 niri”这一点也是一样的

区别可能在我直接用了现在wemeet的官方包,没用 wemeet-wayland-screenshare,不过我到目前还没有遇到啥bug


--【贰】--:

腾讯会议已经支持wayland共享屏幕了, gnome上应该已经能做到开箱即用. niri 这边因为实现缺少一个共享屏幕的协议所以还得hack一下


--【叁】--:

楼主这个方案好像也很有意思,我之后试试,可惜不太会 nix 看不太懂(

好像 L 站卡了一下后面这句话吞了。不敢再编辑,我回答里一堆 github 链接每次都得审批


--【肆】--:

更新一下,现在我发现在第二步,将和屏幕相关的 portal 请求,可以不走hyprland后端,直接用gnome后端即可,实测可用且可以选择窗口共享

image835×628 71.2 KB

image846×627 85.9 KB

配置如下

config = { common = { # Use GNOME first with GTK as the global fallback backend. default = [ "gnome" "gtk" ]; "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; }; niri = lib.mkForce { default = [ "gnome" "gtk" ]; "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; }; hyprland = { default = [ "hyprland" "gnome" "gtk" ]; "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; }; };

(因为使用thunar 所以FileChooser使用了gtk,也可以直接全部gnome)

有意思的是,hyprland必须要用他自己的后端才能正常屏幕共享,使用gnome会失效。niri则可以全部梭哈gnome


--【伍】--:

之前我也得先切好再展示,每次切回去都得先适应一下Windows


--【陆】--:

牛逼,收藏一手先~


--【柒】--:

还真是,平铺式用惯了,回win切窗口发现快捷键没反应


--【捌】--:

似乎gnome、kde的wayland现在的腾讯会议是原生支持的,但我自己没有用过gnome,佬可以自己试试


--【玖】--:

可以,很好

如果不打补丁,疼薰会议能在 wayland 的 gnome 上运行吗?


--【拾】--:

佬太强了!!之前要展示项目突然得屏幕共享,当众从niri切回windows,社死完了 这就去试一下


--【拾壹】--:

啊啊啊啊啊如此宝贵的经验分享我居然还是第一个前排支持! 用了 Niri 快一年里, 每次开会我都要掏出积灰的 Windows 本. 现在终于可以扔了!


--【拾贰】--:

感谢支持!佬可以试试这个方案,如果有问题随时交流


--【拾叁】--:

很不错的方案!我最近也尝试去解决了楼主这个问题,不过我用的是 wemeet-x11 + wayland-screenshare 的(陈旧)路线。这个路线有个好处是,高频切换 screensharing 不容易弄坏(我记得 wemeet wayland 自带的共享有个 bug),然后可以正常录鼠标且没有绿框。

以及我没遇到不能看到他人共享的问题,可能 niri 最近修了吧。

以下是帖子原文,现在还没审核好 :)

原文

在 niri-wm 中,腾讯会议的屏幕共享一直有问题。进行了一些尝试后,我成功解决了这个问题。

解决路线: 不使用现在 Wemeet 自带的 Wayland 端,而是回到(很久以前的)Wemeet-x11 + wemeet-wayland-screenshare 方案。

其实我一直很喜欢这个方案,原因是它可以在 GNOME 下正常显示鼠标。不过很久没用 GNOME 了。

使用 Fix 了 shm sharing 的 niri

共享内存的屏幕共享功能到现在好像还没合入主分支(现在已经有个 PR 了;它提供了一个 patch)。你可以自行 patch 上这个补丁。如果你使用 Arch Linux,可以尝试使用我写的 PKGBUILD。

使用 wemeet-wayland-screenshare

不知道 wemeet-wayland-screenshare 是不是太久没更新了,现在在 wemeet 使用它在共享第一次屏幕后,若关闭共享,第二次就无法正常共享了。我用 AI 修了一下,代码在我的fork。如果你使用 Arch Linux,可以尝试我写的 PKGBUILD。


完成后,就可以正常地使用 WemeetApp(Wayland Screenshare) 这个 .desktop 来运行可以正常屏幕共享的 wemeet 了!

楼主这个方案


--【拾肆】--:

还没有机会尝试过

不知道疼薰会议和浏览器共享屏幕用的是不是一个东西。浏览器那边,用的是 pipewire, 按理说只要装了 Pipewire 和 portal 就能使

问题描述:

因为经常要开会,所以腾讯会议 (wemeet) 的屏幕共享问题对我来说是一个重大的阻碍,不能让我完全放弃 Windows 转 GNU/Linux。虽然可能在 kde 或者 gnome 桌面下问题不大,但是我还是比较想用 niri,所以一直在折腾。终于在尝试各种各样的方案以后,在AI 的帮助下,实现了 niri 下的腾讯会议屏幕共享,包括两个:

  1. 自己可以正常共享
  2. 能看到别人的共享

这应该算是社区里大家都经常遇到的两个问题,所以分享出来供大家参考

因为不是特别专业,所以就简单按自己的理解总结一下要注意的点。

我的系统是NixOS,niri是25.11版本,wemeet是3.26.10.401版本,显卡是NVIDIA。如果佬们的版本和硬件和我的不同可能不完全适用。

先说说如果完全不配置可能出现的情况是什么,就是wemeet可以正常打开,点击屏幕共享没有调出屏幕选择,然后也看不到别人共享的屏幕(黑屏)。

下面是具体配置步骤:

  1. 第一步,给niri打一个补丁, Support shm sharing by wrvsrx · Pull Request #1791 · niri-wm/niri · GitHub 。据说是解决了shm的问题(虽然我不太了解这是啥),但是提这个pr的佬说他的wemeet在打了这个补丁之后正常工作,我之后的配置也是在这个基础上的,没有试过去掉这个补丁之后是否还能用(

image925×198 39.9 KB

  1. 第二步,将和屏幕相关的 portal 请求,交给 hyprland backend 处理。具体来说是 “org.freedesktop.impl.portal.ScreenCast” = [ “hyprland” ];“org.freedesktop.impl.portal.RemoteDesktop” = [ “hyprland” ];
    这里是参考的这位佬的帖子 niri如何正确运行腾讯会议

安装portal:

xdg.portal.extraPortals = with pkgs; [ xdg-desktop-portal-gnome xdg-desktop-portal-gtk xdg-desktop-portal-hyprland xdg-desktop-portal-wlr ];

配置portal:

niri = { default = lib.mkForce [ "gtk" "gnome" ]; "org.freedesktop.impl.portal.Access" = [ "gtk" ]; "org.freedesktop.impl.portal.Notification" = [ "gtk" ]; "org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ]; "org.freedesktop.impl.portal.ScreenCast" = [ "hyprland" ]; "org.freedesktop.impl.portal.RemoteDesktop" = [ "hyprland" ]; };

同时可能需要同步一下境变量,在niri的配置文件spawn-sh-at-startup.kdl中加上:

spawn-sh-at-startup "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=niri"

到这一步,如果环境加载没问题,那么就已经可以共享自己的屏幕了。具体来说会出现一个选择共享屏幕的窗口,点击就能共享了,(同时还有可能出现一系列的绿色窗口,应该是某种奇怪的bug,但是不影响屏幕共享。)

只有这个没用

image915×662 33.2 KB

点击开始共享后出现了这个窗口才算成功(不过现在只能共享整个屏幕,不能选窗口),之后应该就能正常共享自己的屏幕了

image1273×956 49 KB

不过,到此为止还没有解决无法看到别人共享的问题,可能要么是黑屏,要么是闪退。

所以需要第三步


第二步更新,见

在niri下实现腾讯会议(wemeet)屏幕共享的经验分享 搞七捻三
更新一下,现在我发现在第二步,将和屏幕相关的 portal 请求,可以不走hyprland后端,直接用gnome后端即可,实测可用且可以选择窗口共享 [image] [image] 配置如下 config = { common = { # Use GNOME first with GTK as the global fallback backend. …

  1. 第三步,让wemeet本体走 XWayland,同时保持上面配置好的 portal。前者解决无法看到别人共享的屏幕的问题,后者解决自己共享屏幕的问题。这里主要是 AI 帮我配的,nixos 里面直接这样写

{ pkgs, ... }@args: let # Use the stable package-set build for Wemeet itself so the app keeps the # older 1.4.x PipeWire-era screenshare hook path, while preserving the # current repo-local wrapper strategy around it. wemeetBase = args."pkgs-stable".wemeet; # Keep upstream Wemeet resources and desktop entry, but replace the default # launcher with the hybrid route validated under niri: # XWayland startup + Mesa EGL + Wayland portal/PipeWire screenshare backend. wemeet = pkgs.symlinkJoin { name = "wemeet"; paths = [ wemeetBase ]; nativeBuildInputs = [ pkgs.makeWrapper ]; postBuild = '' rm -f $out/bin/wemeet displayProbe='if [ -z "''${DISPLAY-}" ]; then for x_sock in /tmp/.X11-unix/X*; do if [ -S "$x_sock" ]; then export DISPLAY=":''${x_sock##*/X}" break fi done fi' makeWrapper ${wemeetBase}/bin/wemeet-xwayland $out/bin/wemeet \ --run "$displayProbe" \ --set __EGL_VENDOR_LIBRARY_FILENAMES ${pkgs.mesa}/share/glvnd/egl_vendor.d/50_mesa.json ''; }; in { home.packages = [ wemeet ]; }

里面还配置了优先用 Mesa 的 EGL(应该和 NVIDIA 显卡的渲染问题有关),我的设备不这样配会导致 wemeet 崩溃。

总之最后能看到别人共享的屏幕了,自己也能共享,而且之前的绿色窗口也消失了,算是意外之喜

image1253×1353 131 KB

这套方案我用了几天算是比较稳了,逃离Windows指日可待

网友解答:
--【壹】--:

感谢佬的分享!
nix配置用AI看一下应该很快就能“翻译”出来。

我觉得大体和佬的方案也差不多,wemeet 走 x11或xwayland,然后能正常调用portal就行(niri自己没有屏幕共享的portal所以用gnome的),然后用“ 使用 Fix 了 shm sharing 的 niri”这一点也是一样的

区别可能在我直接用了现在wemeet的官方包,没用 wemeet-wayland-screenshare,不过我到目前还没有遇到啥bug


--【贰】--:

腾讯会议已经支持wayland共享屏幕了, gnome上应该已经能做到开箱即用. niri 这边因为实现缺少一个共享屏幕的协议所以还得hack一下


--【叁】--:

楼主这个方案好像也很有意思,我之后试试,可惜不太会 nix 看不太懂(

好像 L 站卡了一下后面这句话吞了。不敢再编辑,我回答里一堆 github 链接每次都得审批


--【肆】--:

更新一下,现在我发现在第二步,将和屏幕相关的 portal 请求,可以不走hyprland后端,直接用gnome后端即可,实测可用且可以选择窗口共享

image835×628 71.2 KB

image846×627 85.9 KB

配置如下

config = { common = { # Use GNOME first with GTK as the global fallback backend. default = [ "gnome" "gtk" ]; "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; }; niri = lib.mkForce { default = [ "gnome" "gtk" ]; "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; }; hyprland = { default = [ "hyprland" "gnome" "gtk" ]; "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; }; };

(因为使用thunar 所以FileChooser使用了gtk,也可以直接全部gnome)

有意思的是,hyprland必须要用他自己的后端才能正常屏幕共享,使用gnome会失效。niri则可以全部梭哈gnome


--【伍】--:

之前我也得先切好再展示,每次切回去都得先适应一下Windows


--【陆】--:

牛逼,收藏一手先~


--【柒】--:

还真是,平铺式用惯了,回win切窗口发现快捷键没反应


--【捌】--:

似乎gnome、kde的wayland现在的腾讯会议是原生支持的,但我自己没有用过gnome,佬可以自己试试


--【玖】--:

可以,很好

如果不打补丁,疼薰会议能在 wayland 的 gnome 上运行吗?


--【拾】--:

佬太强了!!之前要展示项目突然得屏幕共享,当众从niri切回windows,社死完了 这就去试一下


--【拾壹】--:

啊啊啊啊啊如此宝贵的经验分享我居然还是第一个前排支持! 用了 Niri 快一年里, 每次开会我都要掏出积灰的 Windows 本. 现在终于可以扔了!


--【拾贰】--:

感谢支持!佬可以试试这个方案,如果有问题随时交流


--【拾叁】--:

很不错的方案!我最近也尝试去解决了楼主这个问题,不过我用的是 wemeet-x11 + wayland-screenshare 的(陈旧)路线。这个路线有个好处是,高频切换 screensharing 不容易弄坏(我记得 wemeet wayland 自带的共享有个 bug),然后可以正常录鼠标且没有绿框。

以及我没遇到不能看到他人共享的问题,可能 niri 最近修了吧。

以下是帖子原文,现在还没审核好 :)

原文

在 niri-wm 中,腾讯会议的屏幕共享一直有问题。进行了一些尝试后,我成功解决了这个问题。

解决路线: 不使用现在 Wemeet 自带的 Wayland 端,而是回到(很久以前的)Wemeet-x11 + wemeet-wayland-screenshare 方案。

其实我一直很喜欢这个方案,原因是它可以在 GNOME 下正常显示鼠标。不过很久没用 GNOME 了。

使用 Fix 了 shm sharing 的 niri

共享内存的屏幕共享功能到现在好像还没合入主分支(现在已经有个 PR 了;它提供了一个 patch)。你可以自行 patch 上这个补丁。如果你使用 Arch Linux,可以尝试使用我写的 PKGBUILD。

使用 wemeet-wayland-screenshare

不知道 wemeet-wayland-screenshare 是不是太久没更新了,现在在 wemeet 使用它在共享第一次屏幕后,若关闭共享,第二次就无法正常共享了。我用 AI 修了一下,代码在我的fork。如果你使用 Arch Linux,可以尝试我写的 PKGBUILD。


完成后,就可以正常地使用 WemeetApp(Wayland Screenshare) 这个 .desktop 来运行可以正常屏幕共享的 wemeet 了!

楼主这个方案


--【拾肆】--:

还没有机会尝试过

不知道疼薰会议和浏览器共享屏幕用的是不是一个东西。浏览器那边,用的是 pipewire, 按理说只要装了 Pipewire 和 portal 就能使