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
-
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.
-
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.
-
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).
-
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:
- Todas as rotas exigem credencial, inclusive a que injeta cliques no seu Mac.
- O PIN não vira cookie. O que se guarda é um token aleatório sorteado a cada inicialização; reiniciar o servidor invalida todas as sessões anteriores.
- Comparação em tempo constante, para não vazar o PIN por diferença de tempo de resposta.
- Atraso progressivo por tentativa errada, por IP. Com seis dígitos e o atraso, varrer as combinações leva anos.
- Registro de acesso no terminal — um log por IP, mais toda tentativa recusada.
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 é
-
Quem usa Windows ou Linux
É macOS, e não há plano de portar.
-
Quem quer vídeo, animação ou uma segunda tela para trabalhar em movimento
Oito quadros por segundo é leitura, não produção.
-
Quem está em rede corporativa
O transporte sem TLS e as permissões de sistema exigidas provavelmente violam a política de segurança da sua empresa — e devem violar mesmo.
-
Quem não quer abrir o Terminal
Não existe instalador com ícone bonito, e não vai existir.
-
Quem tem um iPad recente e um Mac recente
Use o Sidecar. Ele é melhor em tudo, e é da Apple. Esta ferramenta existe para o aparelho que o Sidecar abandonou.
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á.