Posso usar o v4l2loopback para criar um dispositivo de vídeo fictício, o Xephyr para criar um servidor X aninhado em sua própria janela e um pipeline gst para vincular os dois para que o conteúdo da janela do Xephyr apareça como minha webcam. Isso fornece uma sandbox agradável onde apenas os aplicativos que desejo compartilhar são tornados visíveis, e significa que posso alternar de volta para a videoconferência sem que os outros participantes percam a visão da área de trabalho aninhada.
No entanto, isso aparece como minha webcam, não como um compartilhamento de tela, e então eu perco alguns aspectos desejáveis do verdadeiro compartilhamento de tela. Por exemplo, isso significa que cada outro usuário tem que "fixar" meu feed para que ele não perca o foco quando outra pessoa fala. Então, estou procurando uma maneira de enganar meu navegador para obter sua entrada de compartilhamento de tela de um servidor X diferente daquele em que ele está sendo executado, ou de um dispositivo de vídeo.
Caso seja importante, este é o Firefox sendo executado em um ambiente Cinnamon.
No Firefox moderno (e se você tiver o Wayland, necessariamente sempre), o compartilhamento de tela é feito pelo Firefox solicitando uma
pipewire
lista de compartilhamento de tela e fluxos, e então obtendo os dados de lá.O próprio Pipewire passa pela
xdg-desktop-portal
interface do para pedir ao seu gerenciador de tela um backend de captura. Há várias implementações desses portais específicos (para gtk, kde, wlroots,…) e eles (a maioria deles) implementam a interface ScreenCast .Até onde eu entendo, só pode haver uma implementação ativa para cada interface (como reprodução de som, exibição de um diálogo de seleção de arquivo, captura de tela, captura de vídeo,…) da seleção de interfaces que a API do xdg-desktop-portal oferece. Você pode, no entanto, selecionar a que quiser!
Dessa forma, você poderia executar, digamos, seu portal gtk genérico padrão no seu X11 "principal" e um portal kde no seu Xephyr, e iniciar o portal KDE usando isso
$DESKTOP
.Sinceramente, não tenho certeza se vale a pena o esforço, e tenho certeza de que quando você realmente tentar, encontrará mais obstáculos. Mas, em princípio, desde que eles tenham nomes DBUS diferentes, você pode ter quantos portais com suporte a screencast quiser, e selecionar aquele que você gostaria que seu navegador usasse iniciando-o com um ambiente modificado , que o aponta para um portals.conf
$XDG_CONFIG_HOME
personalizado .