在niri下实现腾讯会议(wemeet)屏幕共享的经验分享
- 内容介绍
- 文章标签
- 相关推荐
因为经常要开会,所以腾讯会议 (wemeet) 的屏幕共享问题对我来说是一个重大的阻碍,不能让我完全放弃 Windows 转 GNU/Linux。虽然可能在 kde 或者 gnome 桌面下问题不大,但是我还是比较想用 niri,所以一直在折腾。终于在尝试各种各样的方案以后,在AI 的帮助下,实现了 niri 下的腾讯会议屏幕共享,包括两个:
- 自己可以正常共享
- 能看到别人的共享
这应该算是社区里大家都经常遇到的两个问题,所以分享出来供大家参考
因为不是特别专业,所以就简单按自己的理解总结一下要注意的点。
我的系统是NixOS,niri是25.11版本,wemeet是3.26.10.401版本,显卡是NVIDIA。如果佬们的版本和硬件和我的不同可能不完全适用。
先说说如果完全不配置可能出现的情况是什么,就是wemeet可以正常打开,点击屏幕共享没有调出屏幕选择,然后也看不到别人共享的屏幕(黑屏)。
下面是具体配置步骤:
- 第一步,给niri打一个补丁, Support shm sharing by wrvsrx · Pull Request #1791 · niri-wm/niri · GitHub 。据说是解决了shm的问题(虽然我不太了解这是啥),但是提这个pr的佬说他的wemeet在打了这个补丁之后正常工作,我之后的配置也是在这个基础上的,没有试过去掉这个补丁之后是否还能用(
image925×198 39.9 KB
- 第二步,将和屏幕相关的 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. …
- 第三步,让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 下的腾讯会议屏幕共享,包括两个:
- 自己可以正常共享
- 能看到别人的共享
这应该算是社区里大家都经常遇到的两个问题,所以分享出来供大家参考
因为不是特别专业,所以就简单按自己的理解总结一下要注意的点。
我的系统是NixOS,niri是25.11版本,wemeet是3.26.10.401版本,显卡是NVIDIA。如果佬们的版本和硬件和我的不同可能不完全适用。
先说说如果完全不配置可能出现的情况是什么,就是wemeet可以正常打开,点击屏幕共享没有调出屏幕选择,然后也看不到别人共享的屏幕(黑屏)。
下面是具体配置步骤:
- 第一步,给niri打一个补丁, Support shm sharing by wrvsrx · Pull Request #1791 · niri-wm/niri · GitHub 。据说是解决了shm的问题(虽然我不太了解这是啥),但是提这个pr的佬说他的wemeet在打了这个补丁之后正常工作,我之后的配置也是在这个基础上的,没有试过去掉这个补丁之后是否还能用(
image925×198 39.9 KB
- 第二步,将和屏幕相关的 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. …
- 第三步,让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 就能使

