Linux

Resolvendo um problema de áudio no GNU Radio

Estava a preparar um trabalho com GNU Radio e um dongle RTL-SDR (antes, tinha tentado com um ADALM-Pluto), implementando um popularíssimo esquema (abaixo) para desmodular estações de rádio comercial (FM), e o áudio à saída do meu sistema estava aos soluços…

RTL-SDR_FM-RX

Ainda pensei tratar-se de um erro de cálculo na parametrização das diversas operações de Interpolação e Decimação pela meio da cadeia, mas não era isto. Pensei também tratar-se de uma limitação na frequência de amostragem da minha placa de som; porém alterando o valor desta e procedendo aos devidos ajustes no resto da cadeia, o problema mantinha-se.

Foi então que notei que na janela de Terminal do GNU Radio, dependendo de alguns parâmetros (decimação/interpolação), apareciam sequências de caracteres OOOOO ou aUaUaUaUaU… Uma pesquisa pela Internet induziu-me no sentido de procurar o erro na relação entre o GNU Radio e a placa de som. Os aU referem-se a “audio Underrun“. Portanto, o problema tinha um cheiro a buffer com falta de dados…

Parti então para uma busca minuciosa pelos ficheiros do GNU Radio até descobrir um em particular e com o qual consegui resolver o problema: gr-audio-alsa.conf. No meu sistema (Debian 10 – buster), este ficheiro encontra-se em /etc/gnuradio/conf.d/.

[audio_alsa]
default_input_device = default
default_output_device = default
# period time in seconds
period_time = 0.050
# total buffering = period_time * nperiods
nperiods = 8
verbose = false

Neste ficheiro, após duas iterações de tentativa-erro, resolvi o problema, aumentando o valor das variáveis period_time e nperiods (originalmente estavam iguais a 0.010 e 4, respectivamente).

Resolvido este assunto, deixo aqui o meu apotnmento para a eventualidade de dar jeito a alguém que esteja a passar pelo mesmo azar.

VirtualBox sobre Debian 10 (buster) não encontra dispositivos USB

Linux sobre Uindouze sobre Linux

Sou adepto do Linux desde os tempos do Red Hat 7.1… Mais tarde, adoptei o Debian e nunca mais quis outra coisa. Despedi-me definitivamente do Uindouze na versão 8.1 (e já era tarde quando a Mocosoft abandonou o suporte ao XP).

Coisas da vida profissional, para ensinar a usar GCC a uma turma de adeptos do Uindouze, tive de escrever um pequeno Guia Prático de instalação do Cygwin. Para redigir este Guia com conhecimento de causa, precisei de recorrer ao Uindouze. E para evitar conspurcar o meu querido PC com tal “sistema operativo” (cof cof…), instalei a versão 10 desta coisa, numa máquina virtual, criada para o efeito, recorrendo ao Oracle VirtualBox.

Correu tudo bem (até a instalação do Uindouze), mas quando precisei de ler uns ficheiros de uma pendrive USB, esta não aparecia no Uindouze… Não aparecia porque o Debian não deixava o VirtualBox aceder à referida pen. Mesmo depois de ter instalado o VirtualBox Extension Pack e activado o Controlador USB (neste caso, o controlador USB 2.0 OHCI+EHCI). Sem este Extension Pack, o VirtualBox apenas vê os portos USB como sendo USB 1.1 (OHCI).

Para resolver tal problema, foi necessário adicionar o utilizador ao grupo vboxusers. Para tal e como SuperUser (root):

$ usermod -aG vboxusers emmanuel

Obviamente, no comando acima, substitua-se ‘emmanuel’ pelo nome do utilizador que pretende usar o VirtualBox e aceder aos portos USB.

Finalmente, foi necessário reiniciar o computador para que as alterações produzissem efeito. Bem ao jeito do Uindouze, quem diria? 🙂

Falta de som no Morse Runner em Linux?

Morse Runner é uma excelente aplicação freeware para o treino de escuta/descodificação de telegrafia/CW. É da autoria do colega radioamador Alex Shovkoplyas (VE3NEA) e está disponível para download em http://www.dxatlas.com/MorseRunner/.

Esta aplicação foi desenvolvida para “Uindouze”… No entanto, é possível executá-la em Linux, recorrendo ao emulador Wine (WineHQ). Ainda assim, quem quiser, poderá portar o código fonte desta aplicação para Linux, já que o mesmo está disponível no GitHub.

Lançar o Morse Runner em Linux, com recurso ao Wine, pode levantar um problema (foi o que me aconteceu e não fui o único): o Morse Runner não tem ou fica sem som… Acontece que o som do Wine é “pescado” no pulseaudio que costuma ser a opção de “default” do Wine, quando este é instalado.

O objectivo deste artigo é alterar a confuração do Wine, para que em vez de usar o pulseaudio, passe a usar o Alsa. Para tal, comece por abrir uma janela do Terminal e execute o comando winetricks.

$ winetricks

Em seguida, siga os passos, tal como aparecem nas imagens abaixo:

Depois de clicar em OK na janela ilustrada na imagem acima, sair do winetricks, lançar o Morse Runner e começar a treinar! 🙂

Antes de fechar este artigo, fica a referência de que o conteúdo deste artigo foi baseado no Linux Debian 10 (buster) com o wine-4.0 (Debian 4.0-2) e o Morse Runner 1.67.

73 de CT7AFR.

Touchpad tapping, em Debian Buster (10)

HP Folio 9470m

O portátil é um velhinho HP EliteBook Folio 9470m, recondicionado mas 100% operacional e eficiente. Um dia, ao substituir a versão 9 do Debian pela versão 10, o touchpad deixou de reconhecer os cliques através de tapping (ou double-tapping). Uma busca na Internet, rapidamente retornou a informação necessária para reactivar esta útil funcionalidade.

Curiosamente, descobri na ‘net, muitos relatos que afirmam que o driver libinput funciona melhor que o da Synaptics. Não me dei ao trabalho de fazer um benchmark para confirmar; tinha alguma urgência em repor o touchpad a funcionar como deve ser, para quando não me dá jeito usar um rato externo (e.g. durante viagens).

Assez parlé! Ao trabalho!

Primeiro, deve-se assegurar que o driver da Synaptics (xserver-xorg-input-synaptics) já não se encontra no sistema. Para o remover (através do Terminal):

$ apt remove xserver-xorg-input-synaptics

Instalar (se já não está instalado) o driver libinput:

$ apt install xserver-xorg-input-libput

Criar o directório xorg.conf.d em /etc/X11

$ mkdir /etc/X11/xorg.conf.d

Criar o ficheiro 40-libinput.conf no directório recém criado:

$ nano /etc/X11/xorg.conf.d/40-libinput.conf

Neste ficheiro, inserir o seguinte script:

Section “InputClass”
Identifier “libinput touchpad catchall”
MatchIsTouchpad “on”
MatchDevicePath “/dev/input/event*”
Driver “libinput”
Option “Tapping” “on”
EndSection

CTRL+X e Yes para gravar e sair do editor de texto

O último passo: Reiniciar o Display Manager (no meu caso, o lightdm):

$ systemctl restart lightdm

Et voilà!