Linux
Antigo iPad como segunda tela
Eu tenho um iPad 3ª geração que há muito tempo me foi dado de presente por um amigo (obrigado Hamdan). Usava-o bastante até que a Apple deixou de oferecer o suporte e passou a implorar para que eu o jogasse fora e gastasse uma fortuna em um iPad novo que, certamente, em alguns anos, a Apple pedirá novamente para jogar fora no mesmo lixão que o antigo deveria estar, mas como sou teimoso, recusei a atender os desejos da Apple. Enquanto este antigo iPad funcionasse bem, eu ainda o usaria. No entanto, não era uma tarefa fácil. Aplicativos como YouTube, Facebook e Twitter deixaram de oferecer suporte para o iOS 9.3.6 há muito tempo, que é a versão "mais recente" suportada por este iPad. Até mesmo navegar na web não é uma tarefa fácil. Então, finalmente desisti e acabei por trancá-lo no guarda-roupas, onde ficou guardado e sem uso por muitos anos. Mas agora é hora de tirá-lo de lá e dar-lhe uma nova vida, desta vez como segundo monitor. Com sua Retina Display com resolução de 2048x1536, é um segundo monitor muito competente. Esta ideia não é nova e já existem soluções para essa tarefa, como Spacedesk para Windows ou espelhamento VNC de um display virtual. Essas soluções até funcionam, mas oferecem uma experiência com baixa taxa de quadros e muito delay, que não atende às minhas expectativas. Fiquei muito frustrado até encontrar a solução que já estava na minha frente. Uma ótima solução que funciona tanto no Linux quanto Windows. No Linux, com Wayland e seus muitos compositores como Gnome, KDE, Sway e o Hyprland, que é o que estou usando agora, e, obviamente, X11. A solução é a dupla Sunshine e Moonlight.
Índice
Sunshine e Moonlight
Sunshine (servidor) e Moonlight (cliente) oferecem uma solução de código aberto para o Nvidia Shield, que é uma plataforma para jogos remotos voltada para placas Nvidia em máquinas Windows. Sunshine e Moonlight ampliam as opções, oferecendo suporte não apenas para placas Nvidia, mas também para GPUs AMD e Intel, além de estender o suporte para outras distribuições baseadas em Linux e o macOS. Sendo uma solução para jogos via transmissão remota, a taxa de quadros é excelente e a latência é muito baixa, oferecendo uma ótima experiência. Então, chega de conversa, vamos começar.
Linux
O passo a passo desse tutorial é baseado no Fedora Linux com Hyprland usando a placa de vídeo AMD RX 6700 XT. Você pode achar que isso é muito específico, mas não desanime. Com algumas adaptações, você certamente poderá seguir este guia com alguns ajustes aqui e ali.
Instalando Sunshine
O Sunshine não é está disponível nos gerenciadores de pacotes das distribuições. Em vez disso, você precisa baixar o pacote manualmente de acordo com a distribuição que está usando. A opção mais genérica, na minha opinião, é usar o Flatpak. Então, vamos baixar a versão mais recente do software em Flatpak do Sunshine a partir deste link e dar vários comandos de Linux para fazê-lo funcionar.
Fedora Copr
É possível instalar usando o Fedora COPR, que são repositórios públicos criados por colaboradores. Um que uso é o matte-schwartz/sunshine que pode ser adicionado a sua distribuição de duas formas:
dnf copr enable matte-schwartz/sunshine
curl --output "/etc/yum.repos.d/_copr:copr.fedorainfracloud.org:matte-schwartz/sunshine.repo" --remote-name "https://copr.fedorainfracloud.org/coprs/matte-schwartz/sunshine/repo/fedora-40/matte-schwartz-sunshine-fedora-40.repo"
Após, basta instalar:
# Fedora
dnf install sunshine -y
# Silverblue
rpm-ostree install sunshine
Criar um serviço para "setcap" no Sunshine
Atenção, apenas se tiver instalado a versão do Flatpak.
O Sunshine compartilha a tela usando uma solução que exige permissões especiais para o arquivo executável, e essa permissão precisa ser aplicada a cada inicialização. Então, vamos criar um serviço systemd para isso. Crie o arquivo /etc/systemd/system/sunshine-setcap.service
com o seguinte conteúdo:
[Unit]
Description=Self-hosted game stream host for Moonlight
[Service]
Type=oneshot
Environment=LANG=en_US.UTF-8
ExecStart=/usr/bin/bash -c '/usr/sbin/setcap cap_sys_admin+p $(readlink -f $(/usr/bin/find /var/lib/flatpak/app -name sunshine | /usr/bin/grep /bin/sunshine)); /usr/bin/touch /var/run/sunshine-setcap-done'
[Install]
WantedBy=multi-user.target
Apenas se tiver instalado a versão Flatpak do Sunshine.
Agora, vamos criar um serviço a nível de usuário para inicializar o Sunhine assim que fizer login. Crie o arquivo ~/.config/systemd/user/sunshine.service
com o seguinte conteúdo:
[Unit]
Description=Self-hosted game stream host for Moonlight
StartLimitIntervalSec=500
StartLimitBurst=5
[Service]
Environment=LANG=en_US.UTF-8
ExecStartPre=/bin/bash -c 'while [ ! -f /var/run/sunshine-setcap-done ]; do echo "Waiting for sunshine-setcap.service to complete..."; sleep 5; done; /usr/bin/sleep 5'
ExecStart=/usr/bin/flatpak run dev.lizardbyte.app.Sunshine
ExecStop=/usr/bin/flatpak kill dev.lizardbyte.app.Sunshine
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=xdg-desktop-autostart.target
Habilite os serviços
sudo systemctl enable sunshine-setcap.service --now
systemctl --user enable sunshine --now
Não esquecer de tornar os serviços a nível de usuário inicializáveis adicionando ao seu autostart
o comando systemctl --user start default.target
. No Hyprland, basta apenas adicionar essa linha no seu ~/.config/hyprland.conf
:
exec-once = systemctl --user start default.target
Firewall
O que o Linux tem em segurança e confiabilidade, falta em configurar automaticamente todas as permissões e regras necessárias para fazer um determinado serviço funcionar. Precisamos abrir portas no Firewall para o Sunshine. Neste caso, as portas TCP 47984
, 47989
, 48010
e as portas UDP de 47998 a 48000
, e 48002
, 48010
. Abrindo essas portas no nosso firewall, tornaremos o serviço Sunshine disponível na rede local. No exemplo, usei o firewalld, a solução padrão para o Fedora e muitas outras distribuições Linux
- no Firewall. Crie o arquivo
/etc/firewalld/services/sunshine.xml
com o seguinte conteúdo:
<service>
<short>Sunshine</short>
<description>Sunshine Screen Streaming and Sharing Service</description>
<port protocol="tcp" port="47984"/>
<port protocol="tcp" port="47989"/>
<port protocol="tcp" port="48010"/>
<port protocol="udp" port="47998"/>
<port protocol="udp" port="47999"/>
<port protocol="udp" port="48000"/>
<port protocol="udp" port="48002"/>
<port protocol="udp" port="48010"/>
</service>
- Recarregue o
firewalld
tornando o serviço disponível.
sudo firewall-cmd reload
- Adicione o recém criado serviço a zona de sua rede logal. Por padrão,
firwalld
configura o adaptador padrão na zonapublic
ou na zonahome
. Você pode confirmar a zona utilizada com o comandosudo firewall-cmd --get-zone-of-interface=enp6s0
assumindo que seu adaptador de rede é oenp6s0
. No meu caso, a zona do adaptador de rede padrão é ohome
. Vamos então criar o serviço para a zonahome
:
sudo firewall-cmd --add-service=sunshine --zone=home
sudo firewall-cmd --runtime-to-permanent
- À partir de agora, o serviço Sunshine estará inicializavel e disponível em sua rede. Você pode verificar instalando o aplicativo Moonlight no seu tablet ou telefone. Seu computador estará disponível como pariável na tela principal do Moonlight. Caso contrário, revise os passos anteriores ou reinicie o computador.
Script para criar a tela virtual
Importante: Este script é voltado para compositor Hyprland. Se você estiver usando outro compositor como Gnome, KDE ou Sway, é preciso adaptar os comandos de acordo com o seu compositor. Além disso, a resolução do exemplo é para o iPad de 3ª geração. Configure a resolução que corresponda com dispositivo que você pretende usar como segundo monitor.
- Crie o arquivo
/home/username/.local/bin/virtual-screen.sh
com o seguinte conteúdo:
RESOLUTION=1024x768
POSITION=auto
SCALE=1
COMMAND=$1
OUTPUT=$(hyprctl monitors | grep HEADLESS | tail -n1 | awk \{print\ \$2\})
if [ "${COMMAND}" = "create" ]; then
hyprctl output create headless
hyprctl keyword monitor "${OUTPUT}","${RESOLUTION}","${POSITION}","${SCALE}"
elif [ "${COMMAND}" = "remove" ]; then
hyprctl output remove "${OUTPUT}"
else
echo "Use [virtual-screen.sh create] or [virtual-screen.sh remove]"
fi
Configuração do Sunshine no Linux
Se você chegou até aqui, você instalou e configurou o Sunshine com sucesso na sua máquina. Agora é hora de configurá-lo. Abra seu navegador e acesse a seguinte URL: http://localhost:47990
. Configure seu nome de usuário e senha digitando-os duas vezes conforme mencionado na página. Recarregue a página com F5, e você deve ser redirecionado para a página principal. Se tudo estiver funcionando como esperado, você deve ver uma página parecida com esta.
Se, em vez disso, você tiver um grande alerta vermelho na sua tela, refaça os passos acima para corrigir o problema.
Com tudo funcionando, siga os seguintes passos:
- No topo da página, clique em
Configuration
, e depois na abaAudio/Video
. - Defina o campo
Display Number
como 1. Se você tiver monitores adicionais conectados ao seu computador, defina este valor como 2 se você tiver dois monitores, se tiver três, defina como 3 e assim por diante. - No topo da página, clique em
Applications
. Aqui precisamos adicionar os comandos para criar a tela virtual a ser compartilhada pelo Sunshine com o iPad ou seu dispositivo.- Clique em adicionar.
- Defina
Application Name
comoSecond Screen
. - Em
command preparations
, clique no botão verde de mais(+)
. - Adicione em
Do Command
# Flatpak-spawn --host apenas se tiver instalado a versão Flatpak do Sunshine
flatpak-spawn --host /home/username/.local/bin/virtual-screen.sh create
- Em
Undo Command
(desfazer), configure como:
# Flatpak-spawn --host apenas se tiver instalado a versão Flatpak do Sunshine
flatpak-spawn --host /home/username/.local/bin/virtual-screen.sh remove
Windows
Windows 95 por shenanigan87
Vamos deixar uma coisa clara, eu não tenho nada contra o Windows, e não acho que o Windows seja um sistema operacional ruim em nenhuma circunstância. Eu só não gosto de usar um sistema operacional pesado e sobrecarregado que fica de olho em tudo o que estou fazendo, consumindo recursos preciosos da minha máquina para tentar me vender coisas que eu não quero e não me permitindo desativar essas coisas para economizar recursos ou personalizar o sistema operacional como eu desejar. Por exemplo, por que eu posso colocar o Menu Iniciar (ou Menu do Windows, não sei) ancorado ao centro da tela ou à esquerda, mas não à direita? Se eu quiser, deveria poder colocar o Menu Iniciar em qualquer lugar que eu quisesse no sistema operacional pelo qual paguei uma fortuna para ter. Mas vamos parar de reclamar do Windows e fazer o trabalho proposto. O processo é basicamente o mesmo que no Linux, com a diferença de que o Windows não é capaz de criar uma nova tela virtual por padrão. Para fazer isso, temos duas maneiras: usar um dongle HDMI Headless, que é simples, mas um pouco "gambiarrento", ou instalar um driver de display virtual, que é um pouco mais complicado e ainda um pouco "gambiarrento", mas não tanta gambiarra quanto conectar e desconectar um dispositivo que finge ser um monitor no seu computador.
Dongle HDMI Headless
A intenção do dongle é enganar o Windows e a placa de vídeo fazendo-os pensar que há um monitor extra conectado no computador. Com isso, não há configuração a ser feita. Basta conectar a alguma saída HDMI do computador e pronto. Seu computador vai pensar que você tem outro monitor conectado e enviará vídeo para ele, podendo compartilhar essa tela com o Sunshine e usá-la como um segundo display. A solução é direta, mas assume que você tem uma saída de vídeo disponível, e isso nem sempre é o caso. Você também precisará alterar a resolução para corresponder à resolução do tablet, e nem todos os EDIDs dos dongles disponibilizam as resoluções pretendidas para esse propósito. Você pode modificar os valores do firmware EDID do seu dongle, mas se a ideia é tornar a configuração simples, alterar o firmware do dongle não é exatamente o que você deseja.
Driver de Display Virtual
Como mencionado, o Windows não oferece uma solução pronta para criar uma tela virtual. Se você não quer usar um dongle porque não tem um ou porque não tem uma saída HDMI disponível, e quer uma configuração mais adequada para a resolução do seu tablet e até suporte a HDR, a resposta é instalar o driver de display virtual
que cria um adaptador de display virtual
emulando o comportamento de conectar um monitor a esse adaptador. Fazemos isso instalando este software: Virtual Display Driver. Então, faça o seguinte:
- Baixe o Driver aqui.
- Descompacte o arquivo e, no
Windows Explorer
, vá para o diretórioIddSampleDriver
. - Abra outra janela do
Windows Explorer
e, no topo do driveC:
, crie o diretório.
C:\IddSampleDriver
- Copie o arquivo
option.txt
da pasta extraída paraC:\IddSampleDriver
ou crie seu próprio arquivo. Este arquivo contém todos os modos disponíveis para seu novo adaptador. Eu criei o meu da seguinte forma:
1
1024, 768, 60
2048,1536, 60
- IMPORTANTE! Clique com o botão direito no arquivo
installCert.bat
e clique emExecutar como Administrador
.- Ignore a preocupante mensagem do Windows se gabando dizendo que "Eu protegi seu computador" clicando em
mais informações
e depois emExecutar assim mesmo
. - Clique em
Sim
na outra mensagem de preocupação sobre segurança.
- Ignore a preocupante mensagem do Windows se gabando dizendo que "Eu protegi seu computador" clicando em
- Abra o
Gerenciador de Dispositivos
digitandogerenciador de dispositivos
na caixa de pesquisa da barra de tarefas. - Clique em qualquer dispositivo e depois no botão
Ação
e no item de menuAdicionar driver legado
.- Você será apresentado a um Assistente. Clique em
Avançar
. - Clique em
Adicionar a partir de uma lista
e emAvançar
. - Selecione
Adaptadores de vídeo
e clique emAvançar
. - Clique em
Com disco
, eProcurar
e vá para o diretório onde você descompactouIddSampleDriver
contendo o arquivo.inf
. - Selecione a única opção
Virtual Display Driver by MTT
e clique emAvançar
eAvançar
.
- Você será apresentado a um Assistente. Clique em
Se tudo correr como esperado, a tela fará efeito visual como uma "vinheta" e abrirá novamente. Isso significa que o driver de display foi instalado com sucesso e está funcionando. O option.txt
em C:\IddSampleDriver
contém todos os modos habilitados. Você pode adicionar ou remover resoluções conforme suas necessidades. No meu caso, 1024x768 e 2048x1536 são as únicas resoluções que pretendo usar.
Para habilitar e desabilitar a segunda tela, você precisará habilitar e desabilitar manualmente as Opções de exibição
com um clique com o botão direito na sua área de trabalho.
Sunshine
Embora o Driver de Display Virtual seja uma configuração um pouco complicada, instalar o Sunshine no Windows é molezinha. Basta baixar a versão mais recente do software no Github e instalá-lo, novamente, ignorando as mensagens de preocupação do Windows.
Configuração do Sunshine no Windows
Aqui configuramos de maneira semelhante ao que fizemos no Linux. Como eu sei que se você está instalando a versão do Windows, você não leu uma palavra da instalação do Linux, vou repetir alguns passos. Mas se você leu (vamos ser honestos, eu sei que você não leu), verá muitas semelhanças, mas elas não são idênticas.
- Vá para
http://localhost:47990
. - Ignore o aviso de risco de segurança e clique em "Ir mesmo assim".
- Configure seu nome de usuário e senha e atualize a página.
- Faça login com as credenciais recém-criadas.
- Clique em
Configuration
,Audio/Video
e no campooutput name
digite o nome correto do seu monitor virtual.
Se você não souber qual é o nome, o Sunshine tem uma ferramenta para isso. Vá para a pasta onde está instalado o Sunshine em C:\\Program Files\\Sunshine\\tools
. Clique com o botão direito, abra no Terminal e digite dxgi-info.exe
. O meu foi nomeado .\\DISPLAY9
.
Só um detalhe: A instalação do Sunshine estará vinculada a esta tela, mesmo que você queira jogar remotamente. Então, você precisará fazer algumas configurações manuais para usar o Sunshine para outros propósitos além de estender a tela.
Instalar Moonlight no iPad antigo
Como mencionado no inicio, a Apple quer que eu jogue fora meu iPad 3ª geração perfeitamente funcional em um aterro sanitário e gaste uma fortuna em um novo, e eles fazem isso ao deixar de oferecer suporte para dispositivos antigos. A receita é simples. Eles param de lançar novas versões do sistema operacional, fazendo com que esses dispositivos fiquem presos a uma versão mais antiga do SO, enquanto deixam de oferecer suporte ao software para o SO que está rodando nele, tornando o sistema desatualizado e inseguro. O tempo passa, e o suporte é retirado programa a programa, tornando o dispositivo inútil. Este iPad não é capaz de rodar aplicativos nativos para nenhuma das principais redes sociais ou clientes de e-mail, mesmo sendo fisicamente capaz de fazê-lo. Isso é obsolescência programada, literalmente, porque seus servidores são programados para tornar esses dispositivos obsoletos. Por causa disso, instalar novos aplicativos nesses dispositivos antigos não é uma tarefa fácil. Se você tem o aplicativo na sua biblioteca e esse ofereceu suporte para a versão do iOS que está rodando no gadget em algum momento no passado, sorte sua, pois a Apple ainda oferece a opção de instalar uma versão mais antiga do aplicativo, que atende às nossas necessidades no caso do Moonlight. Se você não tinha o software na sua biblioteca, sinto muito, mas você está em uma situação ruim, porque a Apple não permite que você adicione software desatualizado à sua biblioteca. Para superar isso, você tem duas opções. A mais fácil é ter um dispositivo iOS mais novo (novamente, a Apple implorando para gastar uma fortuna em um novo dispositivo) e nele, se a versão do iOS que está rodando for suficientemente mais nova, você poderá adicionar o Moonlight à sua biblioteca através deste dispositivo e, em seguida, instalar uma versão mais antiga no seu dispositivo mais antigo. Por sorte minha, minha prima gentilmente me deu um iPhone 6s que serve bem para esse propósito. A outra maneira é usar alguma solução de jailbreak que eu não abordo neste artigo. Já criei muitos problemas com a Apple e não quero criar um novo.
Configurar Moonlight
A partir deste momento, é apenas uma questão de configurar o Moonlight no seu Tablet. Este passo é autoexplicativo, mas, de qualquer forma, vamos fazer juntos.
Abra o Moonlight:
- Um ícone representanto seu computador deve estar disponível com um cadeado no meio. Se não, verifique se o serviço Sunshine está ativo e funcionando. Se estiver, refaça os passos referentes ao Firewall.
Emparelhar seus dispositivos:
- Toque no seu computador. Um número PIN será exibido no seu Tablet.
- Vá para o seu computador, navegue para
http://localhost:47990
, faça login e clique na aba Pin. - Insira o PIN exibido no seu Tablet. O cadeado desaparecerá.
Selecione a Segunda Tela:
- Agora toque no seu computador novamente. Você terá uma opção chamada
Second Screen
(apenas para usuários de Linux). Se não, refaça os passos na configuração do Sunshine. - Se você estiver usando a versão
Windows
, você terá apenas a opçãoDesktop
e está certo. - Toque na Second Screen
Linux
ou DesktopWindows
. Você verá a segunda tela no seu tablet.
- Agora toque no seu computador novamente. Você terá uma opção chamada
Solução de Problemas
- Se você tiver um espelho da tela principal ou receber um erro mencionando que não foi possível iniciar o aplicativo, verifique se você criou corretamente o script para adicionar a tela virtual (Linux), certificando-se de que o script está de acordo com o seu Compositor e a Configuração do Sunshine.
- (Linux) Se você não instalou a versão Flatpak do Sunshine e, em vez disso, instalou o pacote para a sua distro, remova
flatpak-spawn --host
dos comandos na etapa de configuração do Aplicativo.
Desconectar
- Quando terminar de usar a segunda tela, volte deslizando a tela para trás, mantenha o dedo na aplicação
Second Screen
e toque emQuit app
. A tela virtual criada ficará indisponível.
Conclusão
Então, isso completa este tutorial sobre como dar uma nova vida ao seu velho iPad tanto para Linux quanto para Windows. Se você tiver alguma dúvida, envie uma questão na minha página do Github.
keywords: ipad • segunda tela • windows • linux • hyprland • moonlight • sunshine • apple • retina display