- O clipscreen é um aplicativo X11 simples que cria um monitor virtual espelhando uma área específica da tela e marca essa área com um retângulo verde
- Em ferramentas de compartilhamento de tela como Google Meet, Microsoft Teams e Jitsi Meet, é possível compartilhar o monitor virtual em vez da tela inteira ou de uma janela individual
- Como basta mover a janela que você quer compartilhar para dentro da borda verde, diminui a necessidade de compartilhar várias janelas separadamente ou alternar o alvo de compartilhamento
- A execução segue o formato
./clipscreen <width>x<height>+<x>+<y>; usando junto com hacksaw ou slop, também é possível fazer seleção interativa de área
- Foi testado apenas em Linux e xorg, e não há garantia de que funcione em outros sistemas
O que o clipscreen faz
- clipscreen é um aplicativo que cria um monitor virtual que replica uma parte da tela
- A área especificada da tela é destacada com um retângulo verde
- O usuário pode compartilhar esse monitor virtual em ferramentas comuns de compartilhamento de tela para videoconferências
- Ex.: Google Meet
- Microsoft Teams
- Jitsi Meet
Como funciona o compartilhamento de tela
- Em vez de compartilhar a tela inteira ou janelas individuais separadamente, compartilha-se o monitor virtual criado pelo clipscreen
- A janela a ser compartilhada deve ser movida para dentro da borda verde
- É uma forma de evitar ficar alternando a janela compartilhada ao lidar com várias janelas
Requisitos de build
- O sistema precisa dos seguintes itens
-
Bibliotecas de desenvolvimento X11
- Biblioteca gráfica Cairo
- Compilador C, por exemplo
gcc
- No Ubuntu 24.04, as bibliotecas necessárias podem ser instaladas com o comando abaixo
apt-get install libx11-dev xserver-xorg-dev xorg-dev libcairo2-dev gcc
- O build é executado com o comando abaixo
make
- O aplicativo foi testado apenas em **Linux e xorg**, e não está claro se funcionará em outros sistemas
Uso
- O executável compilado é executado no formato abaixo
./clipscreen <width>x<height>+<x>+<y>
- Os argumentos especificam a posição e o tamanho do overlay e do monitor virtual
<width>: largura do overlay e do monitor virtual
<height>: altura do overlay e do monitor virtual
<x>: coordenada x do canto superior esquerdo do overlay e do monitor virtual
<y>: coordenada y do canto superior esquerdo do overlay e do monitor virtual
- O exemplo é o seguinte
./clipscreen 800x600+100+100
- Esse comando cria uma janela de overlay 800x600 começando na posição
(100, 100) da tela
Seleção interativa de área e encerramento
- Para selecionar uma área de forma interativa, é possível executar junto com
hacksaw ou slop
./clipscreen $(hacksaw)
./clipscreen $(slop)
- Ferramentas relacionadas
- Para encerrar, pressione Ctrl+C no terminal em que o aplicativo está em execução
1 comentários
Comentários no Hacker News
Então criei uma pequena ferramenta que usa a extensão xrandr para espelhar uma região específica como um monitor virtual, e permite compartilhar esse monitor virtual
Mais detalhes estão no post do blog: https://www.splitbrain.org/blog/2024-10/11-introducing_clips...
Uso assim como ambiente de demonstração: https://gist.github.com/radupotop/d77a47767e2e65a7e7d40d1ea8...
sleep(100)dentro de um loop até receber SIGINTPor causa disso, pode gerar uso alto de CPU sem muito motivo
Se ele encerrar de uma forma que não seja por SIGINT, a saída virtual pode ficar sobrando e a janela de overlay pode desaparecer, o que é um pouco esquisito, mas não é um grande problema. Ainda assim, é melhor não tratar demais o número de linhas de código como medida de qualidade ou elegância
Esse método não é possível do mesmo jeito no Wayland. Em compensação, no Wayland talvez esta ferramenta nem seja necessária. O modo padrão para um processo sem privilégios capturar a tela é o portal de desktop, e pelo menos o KDE oferece várias opções de captura, incluindo captura de um retângulo da tela. Mesmo executando apps X.org, parece que deve funcionar graças ao XWaylandVideoBridge
Não me agrada muito o fato de D-Bus ser usado por toda parte, mas é bom que, ao trocar a implementação de
org.freedesktop.impl.portal.ScreenCast, dê para substituir praticamente o comportamento desejado de captura de tela. Acho melhor do que cada app implementar do seu próprio jeito a seleção do alvo de capturaIsso não quer dizer que o X11 não seja legal e bom para hacks, mas, se você não quiser presumir apenas o uso perfeito, o código fica maior e mais complexo, e com isso mais robusto
Por exemplo, basta executar
./clipscreen 1 2 3 4Se você quiser aprontar alguma coisa, dá para fazer na hora. O ICCCM foi muito criticado no começo dos anos 90, mas do outro lado não existe algo equivalente, e ainda hoje continuam surgindo novas tentativas na área de gerenciadores de janelas
xrandr --setmonitor screenshare 2560/1x1440/1+0+0 nonegeo=$(slop -f '%w/1x%h/1+%x+%y') && xrandr --setmonitor screenshare "$geo" noneAinda assim, é uma bela linha de comando
Assim dá para saber se a janela tem um tamanho adequado para outra pessoa ver no notebook, e a prévia segue o mouse enquanto permite ajustar na hora o nível de zoom e os limites do mouse
Gosto do fato de que a janela de pré-visualização do OBS abre sem a janela principal do OBS ao iniciar; depois disso, não preciso ver nem mexer na janela principal do OBS ou no app, então ela parece quase independente
https://github.com/BlankSourceCode/obs-zoom-to-mouse
Rectangular Region permite compartilhar uma parte selecionada da tela, e New Virtual Output cria imediatamente uma tela virtual que aparece na KDE Display Configuration. Essa tela virtual pode ou não ser posicionada sobreposta a um display físico existente