terça-feira, 25 de novembro de 2025

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 modules
  • USB dongles and embedded PCIe modems
  • Serial, QMI, MBIM, Qualcomm, Sierra, Huawei, Fibocom, Quectel…


Contudo as vezes você está rodando uma instalação que não precisa disto, por exemplo, dentro de uma máquina virtual. Você pode desativar o ModemManager no Ubuntu sem problemas, caso não precise dele.

A maneira mais comun de desativá-lo é utilizando os comandos:

$ sudo systemctl stop ModemManager
$ sudo systemctl disable ModemManager


Instalar o pyenv no Ubuntu

 O pyenv é uma ferramenta popular de linha de comando que permite instalar, gerenciar e alternar entre várias versões do Python no mesmo sistema sem depender de ambientes virtuais.


O que o pyenv resolve

Seu sistema operacional (linux ou Mac) geralmente vem com uma versão padrão do Python. Contudo ele vem com uma versão específica instalada. Por exemplo, você pode precisar do Python 3.8 para um projeto, do 3.12 para outro e talvez também do PyPy ou Miniconda.

Instalar várias versões do Python manualmente é trabalhoso. Além disto, alterar a versão global do Python geralmente quebra as ferramentas do sistema.

O pyenv resolve tudo isso permitindo que você:

  • Instale várias versões: pyenv install 3.12.1
  • Defina a versão global: pyenv global 3.10.0
  • Defina uma versão local (por projeto): pyenv local 3.9.18
  • Use automaticamente a versão correta com base no arquivo .python-version


Instalação passo a passo do PyENV no Ubuntu

As instruções a seguir irão ajudar na instalação do PyENV no Ubuntu. Estes passos foram testados no Ubuntu 22 e 24.

1) Atualizar pacotes do sistema: Comece atualizando a lista de pacotes do sistema para garantir o acesso às versões mais recentes dos softwares:

sudo apt update


2) Instalar dependências necessárias: O PyENV pode exigir certas dependências para funcionar de forma otimizada. Você pode instalar esses pacotes usando o seguinte comando:

sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev


3) Instalando o PyENV: Use o comando abaixo para fazer o download e executar o script de instalação do PyENV:

curl https://pyenv.run | bash


Nota: pode ser que você precise instalar git no seu computador

sudo apt install git


4) Configurando o ambiente: Você precisa alterar .bashrc como mostrado abaixo. Estas instruções irão aparecer ao final do script acima.

echo -e 'export PYENV_ROOT="$HOME/.pyenv"\nexport PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'eval "$(pyenv init --path)"\neval "$(pyenv init -)"' >> ~/.bashrc





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.





terça-feira, 7 de janeiro de 2025

Apt mostra que acesso a IP é proibido

Ao tentar atualizar os pacotes instalados no ubuntu, a mensagem de erro mostrada abaixo foi gerada pelo apt. Nenhuma alteração havia sido feita no servidor que pudesse ter causado o problema.


root@server:/etc# apt -y upgrade

Lendo listas de pacotes... Pronto

Construindo árvore de dependências... Pronto

Lendo informação de estado... Pronto

Calculando atualização... Pronto

Os pacotes a seguir serão atualizados:

  apparmor apt apt-utils base-files language-pack-en language-pack-en-base language-pack-gnome-en

  language-pack-gnome-en-base language-pack-gnome-pt language-pack-gnome-pt-base language-pack-pt

  language-pack-pt-base libapparmor1 libapt-pkg6.0 libmm-glib0 libpcap0.8 modemmanager python-apt-common python3-apt

  python3-distupgrade python3-update-manager ubuntu-advantage-tools ubuntu-desktop ubuntu-desktop-minimal

  ubuntu-drivers-common ubuntu-minimal ubuntu-pro-client ubuntu-pro-client-l10n ubuntu-release-upgrader-core

  ubuntu-release-upgrader-gtk ubuntu-standard update-manager update-manager-core

33 pacotes atualizados, 0 pacotes novos instalados, 0 a serem removidos e 0 não atualizados.

É preciso baixar 13,3 MB de arquivos.

Depois desta operação, 303 kB adicionais de espaço em disco serão usados.

Err:1 http://br.archive.ubuntu.com/ubuntu jammy-updates/main amd64 base-files amd64 12ubuntu4.7

  403  Forbidden [IP: 208.91.112.55 80]

Err:2 http://br.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libapt-pkg6.0 amd64 2.4.13

  403  Forbidden [IP: 208.91.112.55 80]



A primeira providencia foi verificar a conectividade com o site. O dns resolvia o endereço corretamente e o endereço respondia a ping.

Depois de um tempo, a conclusão foi que algo estava corrompido no meu repositório apt local. 

A sulução é simples. Bastou remover as listas do repositório, usando

sudo rm -fr /var/lib/apt/lists/*


e fazendo a atualização novamente

sudo apt -y update

sudo apt -y upgrade



quinta-feira, 26 de setembro de 2024

Forçar o apt a utilizar somente IPv4

 Neste post mostramos como configurar o apt-get para usar somente IPv4 (ou IPv6).

Os passos mostrados aqui foram testados no Ubuntu.


Opção de linha de comando

Se você quiser forçar o apt-get a usar IPv4 ou IPv6 somente uma vez, você pode usar um parametro no comando apt-get. Este recurso está disponível após a versão 0.9.7.9~exp1 do apt-get.

Para verificar se sua versão do apt-get é mais recente, execute:

sudo apt-get --version


Se a versão for igual ou superior, você pode forçar o IPv4 com:

sudo apt-get -o Acquire::ForceIPv4=true update


ou forçar o IPv6 com:

sudo apt-get -o Acquire::ForceIPv6=true update


Isso atualizará os repositórios, resolvendo as URLs em /etc/apt/sources.list para IPv4  (ou IPv6) somente.


Opção persistente alterando a configuração

Para tornar a configuração, crie o arquivo 99force-ipv4 em /etc/apt/apt.conf.d/. Você precisa ser `root` para editá-lo. Coloque o seguinte conteúdo no arqivo:

Acquire::ForceIPv4 "true";


Salve o arquivo e pronto. 

Se quiser forçar o IPv6, altere o nome do arquivo de 99force-ipv4 para 99force-ipv4 e o método para ForceIPv6 nas configurações.


quinta-feira, 1 de agosto de 2024

Habilitar SSH no raspberry diretamente no cartão SD (... e definir o IP da rede cabeada)

Se você utiliza o Raspberry Pi Imager, você pode configurar o acesso ao raspberry via "Edit settings" conforme mostrado abaixo:


Na primeira aba, você pode configurar a conexão do raspberry a sua rede WiFi e o usuário padrão.


Já na próxima aba, habilite o SSH.



Contudo isto não configura o endereço IP da rede cabeada. Felizmente, isso é fácil de fazer. Com o cartão SD ainda conectado, abra a partição de inicialização (bootfs) e edite o arquivo "cmdline.txt" neste diretório utilizando um editor de texto. Você deve colocar no final do texto existem ip=x.x.x.x, onde x.x.x.x é o endereço que você deseja (veja um exemplo abaixo):



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...