Winpodx - ferramenta para executar apps do Windows como janelas nativas no Linux
(github.com/kernalix7)Uso Linux como sistema principal há mais de 5 anos, e sempre me incomodou o fato de programas dependentes de Windows, como Office (Outlook com Exchange, MS Project) e sites de governo/serviços financeiros, às vezes me puxarem de volta para o Windows. O Wine resolve muita coisa, mas desmorona nas partes profundamente integradas ao ecossistema da Microsoft.
Por isso eu criei isto. Ao clicar no ícone de um app do Windows no menu de aplicativos do Linux, ele abre como se fosse uma janela nativa do Linux. Não é RDP em tela cheia; cada app aparece como uma janela Linux independente.
Como funciona
Em segundo plano, ele roda um contêiner Windows (dockur/windows) sobre o Podman e usa o FreeRDP RemoteApp para exibir cada app do Windows como se fosse uma janela nativa do Linux. Dentro do guest, ele sobe um agente HTTP autenticado por bearer token para processar o canal de comandos host→guest (sem abrir janela do PowerShell).
- Clique no ícone do app e ele executa na hora (primeira execução com configuração zero)
- Agrupamento na barra de tarefas, associação de arquivos e alt-tab funcionam normalmente
- Descobre automaticamente apps instalados no guest (Registry App Paths, Start Menu, UWP/MSIX, Chocolatey, Scoop)
- Suspende automaticamente o contêiner quando está ocioso e faz rotação automática da senha RDP a cada 7 dias
- Escalonamento HiDPI automático em múltiplos DEs (GNOME, KDE, Sway, Hyprland, Cinnamon)
- Python + Qt6 (não usa Electron, focado em stdlib)
Diferenças em relação a ferramentas da mesma categoria
winapps, winboat e LinOffice também usam a combinação dockur + FreeRDP. O diferencial do winpodx:
- Primeira execução com configuração zero (outras ferramentas exigem configuração manual ou instalador com GUI)
- Suporte explícito a caminho de instalação air-gapped (
--source,--image-tar,--skip-deps) - Auto-configuração mais profunda (suspensão automática, rotação de senha, HiDPI em múltiplos DEs)
Reimplementando o RDPWrap em Rust (rdprrap)
Durante o desenvolvimento, houve uma side quest que consumiu muito mais fins de semana do que eu esperava.
O Windows Desktop limita a uma sessão RDP por usuário, então, ao abrir um segundo app, ele toma a sessão do primeiro. A solução padrão, RDPWrap, está sem manutenção há anos e é distribuída apenas como binário opaco em C++.
Então eu reimplementei tudo do zero em Rust (rdprrap, MIT). Ele vem incluído no winpodx e é instalado automaticamente, com suporte a até 10 sessões RDP independentes.
Limitações
- São necessários alguns GB de RAM para o contêiner
- Ainda não há passthrough de GPU (para tarefas sensíveis a desempenho e jogos, recomenda-se Wine + DXVK)
- Ainda existem comportamentos específicos por app no RAIL que não foram totalmente ajustados
- Beta (
v0.3.0)
Instalação
Distribuições suportadas: openSUSE, Fedora, Debian/Ubuntu, RHEL/Alma/Rocky 9 e 10. AUR em breve.
curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bash
Ou você pode baixar pacotes RPM/deb pré-compilados na GitHub Release. Para openSUSE/Fedora, via OBS:
sudo zypper addrepo https://download.opensuse.org/repositories/home:/…
sudo zypper install winpodx
GitHub: https://github.com/kernalix7/winpodx
Como ainda está em beta, issues são bem-vindas.
Ainda não há comentários.