屏幕共享在Ubuntu 22.04中无法正常工作(在所有平台上,如Zoom、Teams、Google Meet、AnyDesk等)。

Ubuntu 22.04有一个bug,就是我们无法在任何平台上分享屏幕。

当你无法分享屏幕时,会是什么情况?对我来说,在Ubuntu 22.04 LTS上,我有分享屏幕按钮,并且可以顺利点击分享屏幕,它会切换到其他人可以看到的分享屏幕视图。但是它并没有分享我的屏幕,只是Teams中显示我的用户图标。然而,如果我离开会议然后再次进入一两次,有时甚至三到五次,屏幕分享就开始正常工作了。我默认使用X11,而不是wayland,因为我的笔记本电脑配备了Nvidia GPU。 - undefined
10个回答

Ubuntu 22.04的问题在于它现在默认使用了一个名为wayland的显示特性,而在21.04之前的版本中,Ubuntu默认使用xorg作为其显示服务器。Wayland默认情况下不支持屏幕共享(至少目前如此!)。
要检查您的Ubuntu正在使用哪个显示系统,请输入以下命令。
echo $XDG_SESSION_TYPE

如果上述命令输出wayland,那么您的系统正在使用wayland。
为了使用屏幕共享功能,我们需要禁用wayland并启用xorg(x11)。要做到这一点,
请打开这个文件。
sudo nano /etc/gdm3/custom.conf

取消注释此行。

WaylandEnable=false

重新启动您的系统。
看哪!您可以共享屏幕。您可以通过重新输入此命令来确认。
echo $XDG_SESSION_TYPE

现在应该显示x11

8救命稻草,谢谢你。自从升级到22.04以来,我就一直有这个问题,我仍然很震惊这个问题几乎没有得到任何点赞。 - gordon_freeman
做了那件事之后,屏幕共享可以工作,但速度非常慢。 - Kyaw Kyaw Soe
5使用DisplayLink的人可能会因为X11兼容性问题而遇到困难(例如通过一个对接站使用两个显示器)。 - rogelio
6使用Ubuntu的最低要求应该是成为一个StackExchange用户,哈哈。这真是糟糕的做法,他们在稳定升级中破坏了功能。 - dakini
1此解决方案禁用了所有滑动手势。 - DBencz
不,不是这样的。一切都会像Ubuntu 20.04一样正常运行。 - Arun Raja
14这让你使用三十年前的技术,更现代的解决方案请参考下一个答案(启用Chrome Pipewire支持)。 - bernstein
3我认为这个回答的作者应该警告人们,降级到Xorg可能会导致其他问题受到影响,比如这个案例 - Camilo Febres
11Wayland怎么可能在LTS版本中带着这么大的问题发布? - nulll
这对我也起作用了。现在使用X11,一切都按照预期工作。我猜他们可能还需要15年来解决这个Wayland的问题 ¯_(ツ)_/¯ - Jorge Campos
1那么,使用X11而不是Wayland没有任何不利之处吗? - Agnishom Chattopadhyay
2然后在重新启动后,我的第二个显示器变成了黑屏。 - Nicolas
1我遇到的问题是关于X11的:触摸屏无法正常工作,任何对话框窗口都没有焦点 —— 这真的很烦人。这个答案不应该被接受。 - Dutch77
这不应该是被接受的答案。正如其他人所说,虽然降级可能确实有助于解决问题,但我觉得降级并不是一个“正确”的解决方案。 - Mike Williamson
3@gordon_freeman 一旦您在登录界面选择了用户,右下角会出现一个类似齿轮的按钮。点击它可以让您选择“Ubuntu on Xorg”或者“Ubuntu”(默认为Wayland)。系统会记住您的偏好设置。 - Tulains Córdova
@DBencz确实,我之前使用了gnome手势改进的扩展https://extensions.gnome.org/extension/4033/x11-gestures/,但是当切换到X11时,它就不再起作用了。我不得不使用https://extensions.gnome.org/extension/4245/gesture-improvements/这个针对X11的手势改进扩展,成功地恢复了手势功能(三指滑动显示所有窗口和水平三指滑动切换桌面),虽然它的自定义性较差,但至少我们恢复了功能。 - undefined
如果我这样做,我的电脑无法启动,有人遇到过这个问题吗?我不得不将WaylandEnable=false设置回去。 - undefined
1这对我在Ubuntu 23.10上可行。谢谢 - undefined

只能在网络浏览器中使用

在浏览器的地址栏中输入 chrome://flags/#enable-webrtc-pipewire-capturer

enter image description here

点击下拉菜单,然后点击启用。

enter image description here

最后重新启动浏览器。
这将使浏览器能够提示屏幕共享访问。

4这对我来说简直就像魔法一样有效。 - MCMZL
3对我来说,它完美地运行,而且无需切换到Xorg。 - Camilo Febres
3实际上,不需要重新启动系统,只需重启Chrome浏览器即可。 - Muhammad Dyas Yaskur
@MuhammadDyasYaskur 谢谢你的建议,我会进行更新。 - Jatin Krishna Habibkar
2这对我来说在使用Chrome、Teams和Ubuntu 22.04的Wayland上不起作用,而且还有其他哪些组件与此相关,谁知道呢。 - Hakaishin
2这在Brave浏览器中对我也起作用。 - sohammondal
这个解决方案比激活X11更好,因为在使用AMD Ryzen的新款笔记本电脑上,激活X11可能会导致其他问题,例如鼠标卡顿。 - newandlost
1这对我没用,我不得不按照被接受的答案建议的那样禁用Wayland,转而使用X11。 - Caumons
对我来说不起作用。我只能分享Chrome的窗口。 - undefined

对于Slack应用内的屏幕录制和屏幕分享:
1. 完全退出Slack应用(使用托盘图标中的“退出”)。 2. 在终端中:
slack --enable-features=WebRTCPipeWireCapturer

看看它是否有效。 (可选)在重新启动后保持更改。
gedit admin:///usr/share/applications/slack.desktop

在文本编辑器中找到一行写着:“”的内容。
Exec=/usr/bin/slack %U

将此行改为:

Exec=/usr/bin/slack --enable-features=WebRTCPipeWireCapturer %U

就这样。在Ubuntu 22.04LTS上进行了测试,还有:
$ slack --version
4.27.156

$ echo $XDG_SESSION_TYPE
wayland

$ dpkg -l | grep -i pipewire
ii  libpipewire-0.3-0:amd64                    0.3.48-1ubuntu1                         amd64        libraries for the PipeWire multimedia server
ii  libpipewire-0.3-common                     0.3.48-1ubuntu1                         all          libraries for the PipeWire multimedia server - common files
ii  libpipewire-0.3-modules:amd64              0.3.48-1ubuntu1                         amd64        libraries for the PipeWire multimedia server - modules
ii  libspa-0.2-modules:amd64                   0.3.48-1ubuntu1                         amd64        libraries for the PipeWire multimedia server Simple Plugin API - modules
ii  pipewire:amd64                             0.3.48-1ubuntu1                         amd64        audio and video processing engine multimedia server
ii  pipewire-bin                               0.3.48-1ubuntu1                         amd64        PipeWire multimedia server - programs
ii  pipewire-media-session                     0.4.1-2ubuntu1                          amd64        example session manager for PipeWire


来源:https://github.com/flathub/com.slack.Slack/issues/101#issuecomment-808430530

Slack(Snap 4.33.90 64-bit)似乎完全忽略了这个选项。当我导出日志进行故障排除时,它并没有显示它作为已配置的内容。通过在Chrome中设置pipewire标志(如上所述),我可以在运行Slack的Chrome标签中共享屏幕。只是电子应用程序无法正常工作。此外,值得一提的是,如果您尝试编辑桌面文件(位于/opt/snap文件夹中),Slack的snap版本会大声抱怨,即使以root身份也不行。 - undefined
@rotten 嗯,谢谢。之前视频捕获不起作用,而现在在4.33.90(electron非snap)上整个过程都会因为一个单独的syslog行[0908/160234.011451:ERROR:elf_dynamic_array_reader.h(64)] tag not found而崩溃,这是来自crashpad的(所以这可能是崩溃处理中的一个错误,与根本原因无关)。 - undefined

由于Wayland默认不支持屏幕共享,但是已经有一种使用Chrome浏览器的实验性方法。
首先,您需要从pipewire媒体会话中导出元数据API。
sudo mkdir -p /etc/pipewire/media-session.d/
sudo cp /usr/share/pipewire/media-session.d/media-session.conf /etc/pipewire/media-session.d/
sudo sed -i 's/#metadata/metadata/g' /etc/pipewire/media-session.d/media-session.conf

在Chrome的实验性功能中启用WebRTC PipeWire支持。
chrome://flags/#enable-webrtc-pipewire-capturer

重新启动浏览器,现在您可以共享屏幕了。

工作了。谢谢! - Alexandre Schmidt

我尝试了global.context.unsafe_mode=true的解决方案,但Google Meet仍然显示黑屏,所以没有进一步测试。
对我有效的是切换到X11/Xorg,我通过以下步骤完成:
- 注销 - 点击右下角的齿轮图标 - 选择"Ubuntu on Xorg" - 登录回来

你的回答可以通过提供更多支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人能够确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

如前所述,这是 Wayland 的一项安全功能。您可以使用 XOrg 或通过以下方式禁用 Wayland 的保存模式:
  1. 按下 Alt + F2
  2. 输入 lg 并按回车键
  3. 通过输入 global.context.unsafe_mode=true 并按回车键来禁用保存模式
这将在您重新启动或注销之前生效。我编写了一个小的 Gnome 扩展,可以根据需要禁用安全模式。请参阅 https://github.com/julianpollmann/zoom-wayland-gnome-extension

那对我没起作用。 - wranvaud
按下 alt-f2 键可以为我打开耳机音量控制。lg 命令不存在。 - undefined
@polyte,这对我很有用。因为在5.15.12.7665版本中,共享功能似乎又出现了问题。注意:看起来你的插件只是对global.context.unsafe_mode的当前值进行逻辑非操作,而不是在开关打开时将其设置为true,关闭时设置为false。这意味着如果在安装你的插件之前手动将其设置为true,你的状态将会颠倒(就像我一样)。我建议在插件中使用开关来确定你将其设置为true还是false,以避免这种情况。我创建了一个更改的PR(注意,未经测试 :))。 - undefined
@rotten 你可能需要按下功能(fn)键。这取决于你的(笔记本)键盘。请参考https://wiki.gnome.org/Projects/GnomeShell/CheatSheet#Developer_tools。 - undefined
这在我的笔记本电脑上不能作为打开文本窗口的快捷方式。无论是alt/control/function还是它们的任何组合都不起作用。没关系,我通常已经打开了十几个甚至更多的窗口。我的机器上也不存在"lg"命令。这可能是一个需要单独安装的软件包。 - undefined
@rotten lg 不是一个可安装的软件包。按下Alt+F2将会弹出GNOME提示对话框,输入lg将打开GNOME调试器。这在普通的shell中是不起作用的。 - undefined

我在附加驱动程序菜单中将图形驱动程序从xorg-server更改为Nvidia专有驱动程序。这对我起作用了。

将Nvidia Nouveau驱动程序替换为专有驱动程序就解决了问题。 - Sergey


还是不行。我用的是5.12版本,但它仍然有问题。只有切换到x11才有效。 - Jorge Campos

我有一台配备Nvidia EVGA Geforce GTX - 1660 Super显卡和Ubuntu 22.04.3 LTS操作系统的电脑,但以上提到的解决方法都对我无效。无论是更改Chrome标志、关闭Wayland的安全模式,还是在登录界面切换到使用Xorg,都没有起作用。
解决方法是进入“附加驱动程序”选项,然后选择“使用来自nvidia-driver-535的NVIDIA驱动程序元包(专有、经过测试)”,而不是之前选择的“使用来自xserver-xorg-video-nouveau的X.Org X服务器--Nouveau显示驱动程序(开源)”。
希望对其他人有所帮助。

我通过访问 chrome://flags/#enable-webrtc-pipewire-capturer 并将值从 Default 更改为 Enabled 来解决了问题。
然后,在我的情况下,Ubuntu 20 中在 /etc/gdm3/ 中搜索 file.conf,它是 custom.conf
sudo nano /etc/gdm3/custom.conf

取消注释这一行 将#WaylandEnable=false更改为WaylandEnable=false 然后重新启动 "取消注释该行将使用Xorg显示管理器而不是Wayland"

请不要在AU上将完全相同的答案复制粘贴到不同的问题中。系统已检测到此完全相同的答案被用于3个略有不同的问题。 - andrew.46
请不要在AU上将完全相同的答案复制粘贴到不同的问题中。系统已经检测到这个完全相同的答案被用于3个略有不同的问题。 - andrew.46
这个答案混合了两个相互矛盾的回答。请不要使用它。 - Jivan Pal