Pular para o conteúdo Ir para a navegação
NSP Intelligence Consulting Agendar 30 minutos

Segunda Tela: um iPad antigo como monitor auxiliar do Mac

A Segunda Tela transmite uma região da tela de um Mac para o navegador de um iPad antigo, sem instalar aplicativo no aparelho. É ferramenta técnica: exige macOS, as Ferramentas de Linha de Comando do Xcode e permissões de Gravação de Tela e Acessibilidade, e o transporte é HTTP sem TLS.

Escrita em Python nativo, com auxiliares em Swift compilados na sua máquina. Alvo original: o Safari do iOS 9.3.5, num iPad mini de primeira geração — um aparelho que nenhuma solução comercial atende mais.

Requisitos e limites

Tudo o que pode dar errado, antes do botão de download.

Sistema
macOS. Não há versão para Windows nem para Linux.
Dependências
Ferramentas de Linha de Comando do Xcode, que trazem python3 e swiftc. Sem swiftc, o modo de tela inteira ainda funciona — você perde a captura de janela específica e o controle por toque.
Permissões
Gravação de Tela e Acessibilidade, concedidas ao app que roda o script (Terminal ou iTerm). São por máquina e por app: não viajam no pacote. Sem a de Gravação de Tela, o servidor sobe e responde “could not create image from display”.
No aparelho
Qualquer navegador. Nada para instalar. Desligue o bloqueio automático da tela do iPad — no iOS 9 não há como manter a tela acesa por JavaScript.
Rede
Mac e aparelho na mesma rede local. O endereço aparece no terminal ao iniciar.
Velocidade
8,3 quadros por segundo no melhor caso, medido. Serve para ler documento, painel e chat. Não serve para vídeo, animação ou arrastar janela.
Segurança
HTTP puro, sem TLS. Quem controla a rede consegue ler o tráfego.
O que vem no pacote
Apenas código-fonte, cerca de 48 KB. Nunca binário compilado — e a razão está explicada abaixo. Pendente de confirmação: tamanho final a confirmar

Instalação em 4 passos

  1. Baixe e descompacte o .zip

    Na primeira vez, o macOS bloqueia arquivos vindos da internet. Contorne clicando com o botão direito em instalar.command e escolhendo Abrir, ou rodando o comando de remoção de quarentena dentro da pasta.

  2. Duplo clique em instalar.command

    Ele confere o sistema, compila os auxiliares em Swift na sua máquina e diagnostica as duas permissões, dizendo qual falta.

  3. Conceda as permissões que ele apontar

    Ajustes do Sistema → Privacidade e Segurança → Gravação de Tela, e o mesmo em Acessibilidade, habilitando o Terminal (ou o iTerm).

  4. Duplo clique em iniciar.command

    O terminal imprime o endereço e o PIN. No iPad, abra o endereço no navegador e digite o PIN — ou abra o endereço direto, que já vem com a chave.

Dica que muda a experiência: no iPad, com a página aberta, use Compartilhar → Adicionar à Tela de Início. Abrindo pelo ícone, a página roda em tela cheia, sem a barra do navegador.

Por que o pacote leva só código-fonte, nunca binário. Um binário baixado da internet chega com o atributo de quarentena, e o Gatekeeper o bloqueia por não ter assinatura da Apple. Compilado no destino pelo instalador, ele não passa por isso — o que dispensa conta de desenvolvedor e notarização. É decisão de projeto, não descuido de empacotamento.

Por que o monitor virtual é mais rápido que o espelhamento

Por padrão, o aparelho espelha algo que já existe: uma janela ou a tela do Mac. Com a opção de tela virtual, ele vira um monitor de verdade: aparece em Ajustes → Telas, você arrasta janelas para ele, e o macOS o trata como qualquer monitor externo. Ele nasce quando o servidor inicia e some quando o servidor encerra.

O resultado contraria a intuição — estender é mais rápido que espelhar:

Fonte Tempo de captura Taxa sustentada
Tela principal, Retina de 3420 px 163 ms 6,1 quadros por segundo
Monitor virtual, 1024 px nativos 120 ms 8,3 quadros por segundo

Medições feitas por mim, no ambiente descrito no README que acompanha o download; o método de medição está lá. São números do meu teste, não benchmark de mercado. Pendente de confirmação: método no README a confirmar

O motivo é direto: o monitor virtual já nasce na resolução do aparelho. Não há Retina para capturar nem redução de imagem para fazer. Espelhar a tela principal significa capturar 3420 px e jogar fora quase tudo, a cada quadro. Por baixo, o auxiliar em Swift usa as classes privadas de monitor virtual do próprio sistema — as mesmas que Sidecar e AirPlay usam internamente. Não exige extensão de kernel, DriverKit, conta de desenvolvedor nem assinatura.

E o número honesto continua sendo 8,3. Oito quadros por segundo servem para ler documento, painel e chat. Não servem para vídeo nem para arrastar janela.

Aviso de segurança

Sem eufemismo: o servidor escuta em todas as interfaces de rede, serve a sua tela e aceita cliques. Se não houvesse autenticação, qualquer pessoa na mesma rede veria tudo e controlaria o seu computador.

Por isso o PIN vem ligado por padrão, e o que está protegido é isto:

O que ele não protege: é HTTP puro, sem TLS. Quem controla a rede consegue ler o tráfego. Isso é proposital — o Safari 9, que é o alvo do projeto, tropeça em TLS moderno. Serve para rede doméstica. Não use em rede corporativa nem em rede pública, e confira se o firewall do macOS está ligado.

Para quem isto não é

Download

Gratuito. Código-fonte, sem cadastro, sem e-mail, sem telemetria.

Pendente de confirmação: arquivo ainda não publicado no domínio Pendente de confirmação: versão e data do pacote Pendente de confirmação: licença de uso do código

O download ainda não está no ar. Faltam três coisas, e nenhuma delas é enfeite: o arquivo hospedado neste domínio com caminho e tamanho conferidos, a versão datada do pacote — sem ela ninguém sabe se o que baixou está atualizado — e a licença que diz o que você pode fazer com o código. Publicar o botão antes disso seria oferecer um arquivo que não existe numa página que se apresenta como rigorosa.

Não há repositório público: o código é distribuído neste arquivo. O README que vem dentro traz as opções de linha de comando, o método das medições e as duas restrições não documentadas da API de monitor virtual que eu encontrei por medição.

Quem fez isto

Sou o Anderson Pires, e este é o tipo de coisa que eu faço quando um problema me irrita: um iPad de primeira geração parado na gaveta, uma tela a menos na mesa, e nenhuma solução comercial que atenda um aparelho de 2012.

Esta ferramenta é a amostra do trabalho. O resto é feito do mesmo jeito — inclusive a parte paga, que é governança de portfólio e projetos em Microsoft 365. Se você quiser saber quem conduz cada engajamento, está tudo escrito lá, com o que dá para conferir e o que não dá.

Perguntas frequentes

Preciso de conta de desenvolvedor da Apple?

Não. É justamente por isso que o pacote leva só código-fonte: compilado na sua máquina, o auxiliar em Swift não precisa de assinatura nem de notarização.

Funciona com iPhone?

Funciona. No modo de tela virtual automática, cada aparelho ganha uma tela na proporção da área útil do navegador dele — um iPad 4:3 e um telefone ultralargo não dividem a mesma tela, que é o que produziria tarja preta em um dos dois.

Dá para usar mais de um aparelho ao mesmo tempo?

Dá. Cada vista recebe a sua tela estendida, na proporção do aparelho.

O toque funciona?

Funciona, se o compilador Swift estiver disponível. O clique cai na tela estendida certa, e não na principal. Sem ele, você perde o toque e a captura de janela específica.

Consome muita CPU?

Depende da taxa. Dá para reduzir com a opção de quadros por segundo e com a captura de uma região só, em vez da tela inteira. As opções estão no README.

Vai virar aplicativo na App Store?

Não. É uma ferramenta pessoal publicada porque pode ser útil a outra pessoa, e o valor comercial dela é próximo de zero — o que está assumido aqui em vez de disfarçado.

O próximo passo

Se você chegou aqui por curiosidade técnica e faz gestão de portfólio no dia a dia, o que eu faço de verdade está em serviços — e a versão gratuita disso é o Raio-X de Governança de PPM, 15 perguntas em cerca de quatro minutos.

Pendente de confirmação: landing dedicada em preparação Esta ferramenta vai ganhar uma página própria, com a história do projeto, as funcionalidades em detalhe e um canal direto para quem quiser conversar sobre ela. A copy dessa página ainda não existe; quando existir, esta aqui aponta para lá.