quinta-feira, 15 de maio de 2025

Como usar o Windsurf com VSCode via conexão SSH

A combinação Vscode com Windsurf é muito boa pois permite autocorreção de alta qualidade do seu código. Contudo, estou acessando uma VM remotamente via SSH e o Windsurf não consegue fazer login. Se acesso diremente a GUI da VM, o Vscode abre e o Windsurf loga normalmente, excluindo assim algum problema de configuração ou instalação dos dois.

Note que ao solicitar o login do Windsurf, aparece na tela da console SSH a seguinte mensagem de erro: "X11 connection rejected because of wrong authentication.".

Esse erro geralmente significa que há um problema com a autenticação de encaminhamento do X11.

O que fazer então?

1. Verifique seu arquivo .Xauthority

Execute ls -al ~/.Xauthority para ver se o arquivo existe. Se estiver ausente ou tiver permissões incorretas, você pode regenerá-lo executando: xauth generate $DISPLAY. Se for isto, faça a correção e reinicie a sessão SSH.

2. Garanta que o encaminhamento (forwarding) está habilitado tanto no servidor como no cliente.

- No servidor, você precisa conferir no arquivo /etc/ssh/sshd_config se as linha abaixo existem:

X11Forwarding yes
X11UseLocalhost yes

Faça a correção se necessário e reinicie o serviço SSH com o comando sudo systemctl restart sshd.

- No cliente, abra o arquivo /etc/ssh/ssh_config e confira as seguinte linhas:

ForwardX11 yes
ForwardX11Trusted yes

3. Garanta que exista a variável de ambiente XAUTHORITY. Você pode usar o comando `env` para listar todas. Se não existir, abra o arquivo ~/.bashrc com um editor de textos e acrescente a seguinte linha ao final do arquivo.

export XAUTHORITY=$HOME/.Xauthority


No meu caso, faltavam as configurações de ForwardX11Trusted e XAUTHORITY.
Acrescentando as duas opções, o Windsurf foi capaz de abrir a tela de login corretamente.

Permitir que o shell em WSL possa acessar uma VM do Hyper-V

Se você tentar acessar uma VM do Hyper-V utilizando a console do WSL no Windows, você verá que não irá funcionar, mesmo que o Powershell você consiga pingar a VM. O WSL 2 roda em uma máquina virtual leve e tem seu próprio endereço IP interno. Para acessar serviços rodando no WSL a partir da VM (ou vice-versa), você precisa garantir que as duas faixas de IP conversem entre si. 

Por exemplo, minha VM é um Ubuntu e o IP retornado pelo comando `ip address` é mostrado abaixo:


Se tento acessar via shell do WSL, o ping não funciona


Para resolver isto entre o command prompt do Windows ou no powershell e entre com o comando `ipconfig`. Você verá um conjunto de adaptadores de rede com diversos endereços. No meu caso, a informação importante estava no final da lista, como mostrado abaixo. O primeiro adaptador é do Hyper-V e o segundo é para o WSL.



São necessários dois comandos para liberar o acesso à estas redes. Você precisa entrar comandos abaixo no PowerShell em modo administrador para ter as permissões de liberação.

Set-NetIPInterface -ifAlias "vEthernet (Default Switch)" -Forwarding enable
Set-NetIPInterface -ifAlias "vEthernet (WSL (Hyper-V firewall))" -Forwarding enable


Estes dois comandos não retornam nenhum informação indicando que eles funcionaram (veja abaixo).


Contudo, você verá que o ping no WSL irá começar a responder.





Desabilitar ModemManager no Ubuntu

 ModemManager provides a unified, high-level interface to control all kinds of modems: 4G/5G modems (LTE/NR) 3G modems NB-IoT / Cat-M1 modul...