Português (Brasil) · English · Español
Ferramenta Native AOT (pixelpointer) para quem apresenta, grava ou ensina:
amplia a tela com o mouse, desenha e destaca por cima e volta ao trabalho com
um toque, acionada por atalhos globais no Linux (X11 e Wayland), no
Windows e no macOS. Um único pacote, sem .NET instalado.
Para quem é: palestrantes, professores, criadores de vídeos e equipes que fazem demonstrações ao vivo e querem o fluxo do ZoomIt (Sysinternals/PowerToys) em qualquer sistema operacional, inclusive em desktops Wayland como GNOME e KDE. O PixelPointer é um projeto independente, não é um produto da Microsoft e não usa o código, a marca ou os ícones do ZoomIt.
Pacotes para linux-x64, linux-arm64 (glibc 2.34+: Ubuntu 22.04, Debian 12,
RHEL/Rocky 9 ou mais novos), win-x64, win-arm64, osx-arm64 e osx-x64.
Os instaladores conferem o SHA-256 com o SHA256SUMS da release, não se
autoelevam e não alteram perfis nem o PATH:
Para testar uma preview, escolha a versão marcada Pre-release em Releases e siga o guia de pacotes preview, com comandos para Linux/Wayland e Windows. Os instaladores abaixo são da versão estável; previews usam pacotes portáteis e não são distribuídas por Homebrew/winget.
# Linux e macOS: aplicativo em ~/.local/lib/pixelpointer, comando em ~/.local/bin
curl -fsSL https://github.com/lzocateli/PixelPointer/releases/latest/download/install.sh | sh# Windows (PowerShell 5.1+): instala em %LOCALAPPDATA%\Programs\pixelpointer
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor 3072
& ([scriptblock]::Create((Invoke-RestMethod https://github.com/lzocateli/PixelPointer/releases/latest/download/install.ps1)))No Windows, se o diretório não estiver no PATH, o install.ps1 sugere duas
opções; use apenas uma. A recomendada grava o PATH do usuário no registro,
mas só vale para processos novos: no mesmo PowerShell, pixelpointer continua
"não reconhecido" até abrir outro terminal ou atualizar a sessão:
$env:Path = [Environment]::GetEnvironmentVariable('Path', 'Machine') + ';' + [Environment]::GetEnvironmentVariable('Path', 'User')A alternativa pelo perfil grava $PROFILE.CurrentUserAllHosts (profile.ps1),
que o Windows PowerShell só carrega quando a política de execução permite
scripts. Com a política padrão Restricted, todo terminal novo mostra
"profile.ps1 não pode ser carregado porque a execução de scripts foi
desabilitada". Se já gravou o PATH no registro, remova do perfil a linha
$env:PATH = ...pixelpointer...; o perfil é desnecessário. Para manter o perfil,
permita scripts locais somente para o seu usuário, ciente de que isso relaxa a
política (uma política imposta por GPO prevalece; confira com
Get-ExecutionPolicy -List):
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned# Homebrew (macOS e Linux)
brew install lzocateli/tap/pixelpointer
# winget (Windows), após a moderação da versão no microsoft/winget-pkgs
winget install lzocateli.PixelPointer
# Debian/Ubuntu (amd64 ou arm64), a partir do asset da release
curl -fsSLO https://github.com/lzocateli/PixelPointer/releases/latest/download/pixelpointer-linux-x64.deb
sudo apt install ./pixelpointer-linux-x64.debCada pacote traz o SBOM SPDX e atestações de proveniência:
gh attestation verify <arquivo> --repo lzocateli/PixelPointer
(verificação).
O PixelPointer não consulta a rede por padrão. Em instalações feitas por
install.sh ou install.ps1 no diretório do usuário, pixelpointer update install
baixa a release estável mais recente, confere o SHA-256 e a proveniência Sigstore
no próprio aplicativo, executa a versão nova (--version e selftest) e só então
troca os arquivos, preservando a versão anterior em falha. Com o daemon em
execução, a troca ocorre quando ele encerra. Verificação e instalação automáticas
são opcionais e começam desativadas (pixelpointer update auto-check on,
pixelpointer update auto-install on ou o submenu Atualizações da tray).
.deb, Homebrew, winget, instalações globais e cópias portáteis apenas avisam e
indicam o comando do respectivo canal. Instalações anteriores a este recurso
precisam reexecutar o instalador uma vez. Detalhes e limitações no
guia de uso.
Para a remoção manual, encerre primeiro o daemon com pixelpointer quit. Os modos
--uninstall e -Uninstall dos instaladores tentam encerrá-lo automaticamente.
Depois, remova o PixelPointer pelo mesmo método usado para instalá-lo:
| Instalação | Comando ou ação |
|---|---|
install.sh (Linux/macOS, prefixo padrão) |
sh install.sh --uninstall; para instalação global, encerre o daemon e remova a integração desktop como usuário antes de executar sudo sh install.sh --uninstall --global |
install.sh --prefix <dir> |
Remova <dir>/bin/pixelpointer e <dir>/lib/pixelpointer; substitua <dir> pelo prefixo usado na instalação |
install.sh --global |
Remova /usr/local/bin/pixelpointer e /usr/local/lib/pixelpointer com sudo; antes, remova a entrada desktop no Linux pelo próprio binário |
install.ps1 |
PowerShell: install.ps1 -Uninstall |
.deb |
sudo apt remove pixelpointer |
| Homebrew | brew uninstall lzocateli/tap/pixelpointer |
| winget | winget uninstall lzocateli.PixelPointer |
Para instalações de usuário feitas por install.sh ou install.ps1, execute o
instalador da release com a opção explícita de limpeza completa:
# Linux
curl -fsSL https://github.com/lzocateli/PixelPointer/releases/latest/download/install.sh | sh -s -- --uninstall --purge# Windows PowerShell 5.1+
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor 3072
& ([scriptblock]::Create((Invoke-RestMethod https://github.com/lzocateli/PixelPointer/releases/latest/download/install.ps1))) -Uninstall -PurgeO purge apaga configurações, cache e todos os arquivos da pasta Screenshots;
no Linux também remove da Lixeira somente itens com pixelpointer no nome. No
Windows, a Lixeira é preservada. O script encerra o daemon se estiver ativo. A
operação é permanente: confira a pasta de capturas antes de executá-la. O purge
exige uma instalação de usuário sem elevação e um recibo válido; se a instalação
for anterior ao recibo, execute o instalador uma vez antes. No macOS, use
--uninstall sem --purge, pois as capturas podem estar em uma pasta escolhida
pelo usuário. Para instalações globais, .deb, Homebrew ou winget, use o método
correspondente da tabela.
Se adicionou manualmente a linha de inicialização ao perfil do PowerShell, remova
essa linha do $PROFILE.CurrentUserAllHosts. A integração desktop Linux deve ser
removida antes do executável com pixelpointer uninstall-desktop-file, usando o
mesmo XDG_DATA_HOME; o comando preserva arquivos modificados. A desinstalação
padrão não apaga capturas PNG ou GIF; a limpeza opcional pode removê-las. Ela não
remove anexos do VS Code nem caches de build e testes do .NET. Detalhes e limites
por método estão no
guia de uso.
pixelpointer install-desktop-file # Linux: registra o app id usado pelos portais
pixelpointer grant # Linux: autoriza captura pelo portal (uma vez)
pixelpointer daemon # Ctrl+1 zoom, Ctrl+2 desenho, Ctrl+3 timer, Ctrl+4 Live Zoom, Ctrl+5 gravação, Ctrl+6 recorteO comando daemon permanece em primeiro plano: mantém os atalhos e o IPC
ativos, mas não libera o terminal automaticamente. Isso é esperado, não um
travamento; Ctrl+C encerra o processo. No Linux, para liberar o prompt:
pixelpointer daemon &O & coloca o processo em segundo plano, mas ele ainda pode escrever no terminal
e encerrar quando a janela do terminal for fechada. Para usar sem terminal no
Linux, execute pixelpointer install-desktop-file e abra PixelPointer pelo
menu de aplicativos. Encerre por Sair na tray ou por pixelpointer quit.
Essa integração não configura início automático com a sessão.
No Windows (PowerShell), inicie o daemon em um processo separado, sem janela:
Start-Process pixelpointer -ArgumentList daemon -WindowStyle Hidden
pixelpointer statusO prompt é liberado na hora e o daemon continua ativo mesmo após fechar o
PowerShell. Encerre por Sair na tray ou por pixelpointer quit. Nessa forma
as mensagens do daemon não aparecem; para diagnosticar conflitos de atalho,
execute pixelpointer daemon em primeiro plano.
| Atalho ou tecla | Ação |
|---|---|
| Ctrl+1 | Zoom: congela a tela ampliada; o mouse percorre a imagem |
| Ctrl+2 | Desenho sem zoom |
| Ctrl+3 | Timer de intervalo (10 min; setas ou roda ajustam e reiniciam) |
| Ctrl+4 | Live Zoom: amplia a tela ao vivo seguindo o cursor, sem congelar; repita para sair (Windows em tela cheia; macOS e X11 como lupa em janela; Wayland best effort quando o portal oferece cursor metadata; GNOME desabilitado) |
| Ctrl+5 | Inicia ou salva GIF (até 5 min); X11/Windows: monitor sob o cursor ao iniciar; Wayland: monitor autorizado no portal |
| Ctrl+6 | Recorte: X11/Windows abrem no monitor sob o cursor; arraste para copiar; com Shift ao soltar, salva PNG |
pixelpointer status |
Consulta se o daemon está em execução |
pixelpointer quit |
Encerra o daemon e a sobreposição ativa |
| Roda do mouse / setas | Mais ou menos zoom |
| Clique e arraste | Desenhar (caneta com pressão é suportada) |
| Shift + arrastar | Linha reta |
| Ctrl + arrastar | Retângulo |
| Ctrl+Shift + arrastar | Seta |
| Tab + arrastar | Elipse |
| R G B Y O P | Vermelho, verde, azul, amarelo, laranja, rosa |
| Shift + R G B Y O P | Marca-texto translúcido na cor |
| X / Shift+X | Desfoque / desfoque forte (retângulo e elipse preenchidos) |
| T | Texto no ponteiro (Enter quebra a linha, Esc ou clique termina) |
| Ctrl+roda | Espessura da caneta |
| Ctrl+Z / E | Desfazer / apagar tudo |
| W / K | Quadro branco / quadro preto |
| Ctrl+S | Salvar PNG |
| Ctrl+C | Copiar a imagem para a área de transferência |
| Esc ou botão direito | Sair |
No Wayland, o primeiro daemon pede a confirmação dos atalhos ao desktop.
Sem o portal de atalhos, use um atalho do próprio desktop chamando
pixelpointer zoom ou pixelpointer draw. Detalhes, permissões por sistema e
solução de problemas: guia de uso. Esc fecha somente a
sobreposição; o menu da tray oferece Sair quando disponível, e
pixelpointer quit encerra o daemon. O aplicativo não inicia automaticamente
com a sessão. O desenho ao vivo requer compositor X11; no Wayland usa captura
congelada.
Ctrl+S respeita a pasta de capturas do usuário: Imagens/Screenshots no Windows,
preferência de captura ou Área de Trabalho no macOS e PICTURES/Screenshots
conforme XDG no Linux. Não sobrescreve arquivos e informa o destino na
sobreposição. Detalhes e exportação com alfa:
onde o Ctrl+S salva.
| Camada | Tecnologia |
|---|---|
| Janela, entrada e caneta | SDL3 (Wayland nativo, X11, Win32, Cocoa) |
| Desenho e zoom | SkiaSharp |
| Captura e atalhos no Wayland | Portais XDG (Screenshot, GlobalShortcuts) via D-Bus |
| Captura e atalhos no X11, Windows e macOS | XGetImage/XGrabKey, GDI/RegisterHotKey, screencapture |
| Distribuição | .NET 10 Native AOT, ~19 MB com as bibliotecas nativas |
-
.NET 10 (SDK do
global.json) com Native AOT; testes com xUnit v3 sobre Microsoft Testing Platform:dotnet test --solution PixelPointer.slnx. -
Valide como no CI (PowerShell 7 e Docker ou Podman;
-Aotpublica e executa oselftestdo binário nativolinux-x64):pwsh ./tools/scripts/Invoke-Validation.ps1 -Aot
-
Pacotes de release, smoke em distribuições limpas e testes dos instaladores: processo de release.
-
No Windows e no macOS:
pwsh ./tools/scripts/Invoke-Validation.ps1 -Native -Aot. -
Instale o hook de detecção de secrets:
pwsh ./tools/scripts/install-gitleaks-hook.ps1. -
Leia CONTRIBUTING, a convenção de commits e a política de segurança.
Contribuições por fork e pull request são bem-vindas. Comece por bugs, melhorias ou dúvidas e aguarde o alinhamento de escopo antes de implementar.
- Guia de contribuição e governança.
- Suporte e código de conduta.
- Relatos privados de vulnerabilidade.
- Histórico de versões.
A infraestrutura gerenciada (workflows gw-*, .githooks/, tools/scripts/ci/,
templates e políticas em .github/) foi gerada pelo Altivy.Groundwork;
.groundwork/manifest.json lista esses arquivos e groundwork status confere sua
integridade. Os workflows e scripts de build, publicação e distribuição
(ci.yml, publish.yml, post-release.yml, winget.yml, tools/scripts/*.ps1,
install/) e os documentos de governança foram adaptados do DotnetScope e
pertencem ao projeto.
MIT. Componentes redistribuídos (SDL3, SkiaSharp/Skia, Tmds.DBus): THIRD-PARTY-NOTICES.md.