VOX com Timeout-Timer

Novo desafio - conseguir aproveitar um rádio antigo para comunicações digitais e que não dispõe de Rig Control para PTT, no meu caso o ASTRO B da Cubic Communications…

O som vem de uma placa USB com o IC CM108, simulado pelo gerador de 1KHz e o botão de pressão que estão ali apenas para testar o projecto.

Desenhei o circuito com ajuda da APP iCircuit para Mac OS X e depois montei tudo numa breadboard e funcionou conforme o esperado.

O circuito é composto por um OP-AMP pré-amplificador onde depois o sinal é retificado para fazer o sistema VOX. Em seguida o sinal é invertido e controlado por um temporizador com o 555 que desliga a PTT caso o sinal seja contínuo e por mais de cerca de 3 minutos.

O segundo OP-AMP serve de buffer pois a ligação "Radio Mic" vai ao microfone evitando assim accionar o sistema VOX.

Incluí alguns potenciómetros para controlar os níveis e penso agora utilizar este rádio para comunicações digitais em HF - packet, Ardop e VARA, com apenas um raspberry pi e uma placa de som!

Download do projecto para o iCircuit.

Referências:
https://eindhoven.space/radio-experiments/packet-radio/vara-ardop/raspberry-pi4-trifecta-tnc-bank-image-companion-documentation/

Como atribuir nomes a devices HidRaw (parte 3)

Este artigo conclui o tema sobre a atribuição de nomes a devices, referidos na parte 1 e parte 2, quando os fabricantes não atribuiem um número de série e 2 ou mais dispositivos parecem-nos iguais e impossíveis de identificar…
Os dispositivos HidRaw permitem aceder a interfaces USB e bluetooth sem alteração de dados ou protocolo. Significa em inglês original - Raw Access to USB and Bluetooth Human Interface Devices.

Por vezes os nossos projectos necessitam de chamar estes devices para comunicarem… dou como exemplo a utilização do controlo de PTT pelas placas de som CM108 e CM119, descrito no artigo packet/APRS iGate, BBS, node e DX cluster com Raspberry Pi (parte 2), onde o direwolf usa o pino 13 do GPIO para pôr o rádio em transmissão, através do comando "PTT CM108 3 /dev/hidraw3".

Como consegue imaginar, ao reiniciar o sistema operativo, estes devices mudam a ordem à medida que o kernel as lê e lhes atribui um número… este é o problema que aqui resolvo, a atribuição de um nome ou symlink a um device hidraw para que, independentemente da ordem atribuída pelo kernel, saibamos sempre como comunicar com ele!
Note, este procedimento só é válido (à semelhança dos procedimentos descritos nos artigos anteriores) se e só se o nosso device USB se encontrar sempre ligado à mesma porta USB, seja directamente à board ou através de um HUB USB!

Identificar o device

Antes de ligar o seu dispositivo USB, execute o comando,

e obtém, por exemplo

crw------- 1 root root 243, 3 Mar 14 22:44 /dev/hidraw0
crw------- 1 root root 243, 4 Mar 15 09:25 /dev/hidraw1
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw2

Agora ligue o seu dispositivo e execute o comando novamente… apareceu um novo device. Este é o nosso device, aquele que vamos configurar,

crw------- 1 root root 243, 3 Mar 14 22:44 /dev/hidraw0
crw------- 1 root root 243, 4 Mar 15 09:25 /dev/hidraw1
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw2
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw3

Agora que sabemos que ao nosso device lhe foi atribuido o número 3, como /dev/hidraw3, fazemos

de modo a obtermos toda a informação deste device,

De onde retiramos algumas das variáveis que nos permitem agora identificar o nosso dispositivo, uma vez mais, sempre que este se encontre ligado à mesma porta USB.

Criar o nome ou symlink

Escrevemos ACTION=="add", pois só queremos adicionar este dispositivo quando ele é ligado.
Apenas queremos identificar dispositivos hidraw, então escrevemos SUBSYSTEM=="hidraw", ver linha 9.
Se tiver vários dispositivos iguais repare na linha 32 que identifica pelo kernel a porta USB a que este dispositivo está ligado como, KERNELS=="1-1.2.1.1"
Comum aos nossos vários dispositivos, se existirem 2 ou mais, é o id do fabricante e o id do producto, respectivamente verificados nas linhas 38, ATTRS{idVendor}=="0d8c" e 57, ATTRS{idProduct}=="0012"
Agora é só atribuir-lhe um nome alternativo, com a instrução SYMLINK+="", que no meu caso se trata de uma placa de som CM108 que pretendo, como disse, controlar o PTT através do GPIO…

Construímos a linha a colocar no nosso ficheiro udev rules descrito nos artigos anteriores em /etc/udev/rules.d/99-hamlib.rules, na continuação das instruções que já escrevi…

Na janela terminal escreva, como sudo ou root,

Avance até à última linha, substitua as variáveis ao seu dispositivo e escreva, neste meu exemplo, e para cada uma das suas placas de som onde pretende controlar o PTT,

ACTION=="add", SUBSYSTEM=="hidraw", KERNELS=="1-1.2.1.1", ATTRS{idVendor}=="0d8c", ATTRS{idProduct}=="0012", SYMLINK+="hidHFpacket"

Cada vez que escreve no ficheiro rules aplique as configurações, com sudo ou root, o comando,

Agora, no direwolf o comando passará a ser,

PTT CM108 3 /dev/hidHFpacket

O nosso dispositivo é agora reconhecido pelo nome "hidHFpacket". Verifique, escrevendo no terminal,

crw------- 1 root root 243, 3 Mar 14 22:44 /dev/hidraw0
crw------- 1 root root 243, 4 Mar 15 09:25 /dev/hidraw1
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw2
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw3
lrwxrwxrwx 1 root root       7 Mar 14 22:44 /dev/hidHFpacket -> hidraw3

Quer ver agora todos os symlinks criados nestes artigos? Substitua as palavras de acordo com o nome que atribuiu e escreva,

Referências:
https://docs.kernel.org/hid/hidraw.html
https://github.com/nasa/IDF/wiki/Differentiating-Identical-Devices
http://reactivated.net/writing_udev_rules.html
https://github.com/nasa/IDF/wiki/Device-Permissions

Como atribuir nomes a placas de som em linux (parte 2)

No post anterior tratámos da atribuição de nomes a devices série ttyUSB para identificar a ligação a rádios ou portas série.
Neste post vamos atribuir nomes a devices de audio, muito útil quando queremos configurar devices de som e nos aparecem listas de 30 e mais periféricos de som a configurar no software, por exemplo, para modos digitais como JS8Call, FT8, SSTV, ou direwolf em AX.25 e tudo nos parece uma confusão…

Confusão maior porque de cada vez que reiniciamos o computador ou o raspberry pi estes devices de som arrancam por ordem aleatória!

O método descrito tem uma condição - os devices de som USB têm de estar ligados sempre na mesma porta USB, seja directamente ou através de um HUB USB, isto se utilizarmos devices com o mesmo idVendor, idProduct e número de série.

Pode parecer estranho o porquê deste artigo! Mas neste projecto eu tenho a saída de audio do raspberry para os auscultadores, a saída do monitor, os 2 rádios Icom, um FT-817, e 5 placas de som alsa para AX.25 através do modem por software direwolf ligadas cada uma a seu rádio! De cada vez que reinicio o raspberry é uma trapalhada acertar todos os devices pela ordem com que foram configurados inicialmente! Já faz sentido?

Em linux existem diferentes camadas para a utilização de som: alsa e pulse audio. Há software que utiliza alsa outros que utilizam pulse audio…
Este é um artigo prático, consulte as referências bibliográfica para compreender a teoria por detrás dos devices de som em linux.

Atribuir nomes aos devices Alsa e Pulse Audio

Aqui o objectivo é, conhecer a identificação de cada um dos devices de som dos nossos Icom ou outro equipamento, adicioná-los ao ficheiro anterior /etc/udev/rules.d/99-hamlib.rules com um nome ou symlink que o designará mais facilmente…

Ligue à vez, a ficha USB do IC-7300, siga o procedimento abaixo descrito, desligue esta ficha e ligue agora a USB do IC-9700…

Para saber o id do device de som abra uma janela terminal e escreva,

ou, sem querer causar mais ruído, pode também conhecer o id de cada periférico fazendo, "udevadm monitor --subsystem=sound", desligando e voltando a ligar cada uma das fichas USB…

Bom, o primeiro comando devolverá uma série de linhas, das quais apenas nos interessa identificar algo semelhante a,

(para o IC-7300)
name: <alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo>
sysfs.path = "/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.3/1-1.2.3.4/1-1.2.3.4:1.0/sound/card2"

(para o IC-9700)
name: <alsa_input.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo.2>
sysfs.path = "/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.2/1-1.2.2.4/1-1.2.2.4:1.0/sound/card3"

Agora, no output gerado para o IC-7300, pegamos apenas na expressão,
"/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.3/1-1.2.3.4/1-1.2.3.4:1.0/sound/card"

e construímos o código a escrever no ficheiro 99-hamlib.rules
Note que, este é o resultado do meu exemplo… deverá substituir esta expressão de acordo com o resultado que obteve! Estes valores identificam a porta USB a que o device se encontra ligado e o próprio device.

Na janela terminal escreva como sudo ou root,

e, a seguir às regras da primeira parte do artigo, relativas aos devices ttyUSB adapte e copie o seguinte código,

# ALSA devices
# IC-7300 Sound Card
SUBSYSTEM!="sound", GOTO="ic7300_alsa_naming_end"
ACTION!="add", GOTO="ic7300_alsa_naming_end"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.3/1-1.2.3.4/1-1.2.3.4:1.0/sound/card?", ATTR{id}="IC-7300"
LABEL="ic7300_alsa_naming_end"

# IC-9700 Sound Card
SUBSYSTEM!="sound", GOTO="ic9700_alsa_naming_end"
ACTION!="add", GOTO="ic9700_alsa_naming_end"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.2/1-1.2.2.4/1-1.2.2.4:1.0/sound/card?", ATTR{id}="IC-9700"
LABEL="ic9700_alsa_naming_end"

# PulseAudio devices
# IC-7300  pulseaudio device
SUBSYSTEM!="sound", GOTO="ic7300_pa_naming_end"
ACTION!="change", GOTO="ic7300_pa_naming_end"
KERNEL!="card*", GOTO="ic7300_pa_naming_end"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.3/1-1.2.3.4/1-1.2.3.4:1.0/sound/card?", ENV{SOUND_DESCRIPTION}="IC-7300"
LABEL="ic7300_pa_naming_end"

# IC-9700 pulseaudio device
SUBSYSTEM!="sound", GOTO="ic9700_pa_naming_end"
ACTION!="change", GOTO="ic9700_pa_naming_end"
KERNEL!="card*", GOTO="ic9700_pa_naming_end"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.2/1-1.2.2.4/1-1.2.2.4:1.0/sound/card?", ENV{SOUND_DESCRIPTION}="IC-9700"
LABEL="ic9700_pa_naming_end"

Não se esqueça de ligar as fichas dos rádios sempre nos mesmos portos de ligação USB! Caso contrário este procedimento não servirá para nada!

Placas de som Alsa ligadas ao direwolf

Se for também o seu caso, proceda como anteriormente descrito, e ao meu ficheiro 99-hamlib.rules acrescentei ainda,

# CM108 ALSA devices for direwolf
# DEVPATH can be obtained by looking at `udevadm monitor --subsystem=sound` while pluging in the sound card.
# Do one card at a time, the "?" char on card should stay as it matches any card number that may pop on that USB port.
SUBSYSTEM!="sound", GOTO="alsa_naming_end"
ACTION!="add", GOTO="alsa_naming_end"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4.1/1-1.2.4.1:1.0/sound/card?", ATTR{id}="UHFpacket"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4.2/1-1.2.4.2:1.0/sound/card?", ATTR{id}="VHFpacket"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4.3/1-1.2.4.3:1.0/sound/card?", ATTR{id}="VHFpacketSat"
DEVPATH=="/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1.1/1-1.2.1.1:1.0/sound/card?", ATTR{id}="HFpacket"
LABEL="alsa_naming_end"

Desligue e volte a ligar estas placas de som e escreva no terminal, substituindo nomes ou wildcards... exemplo,

Artigo relacionado - Solução de problemas com a placa de som CM108

Outros comando utilizados para melhor compreender este projecto

Continua...

Referências:
https://x8x.net/2019/04/04/icom-ic-9700-and-ic-7300-coexisting-in-linux/
https://gist.github.com/Aishou/f39c2f970c6db20e1845925c5cc0890e
https://www.florian-wolters.de/posts/static-sound-device-names-ic9700-ic7300/
https://blog.habets.se/2021/12/Linux-Sound-devices-are-a-mess.html

Como atribuir nomes a devices e a placas de som em linux

Em linux, ou no projecto descrito nestes posts, quando tentamos ligar 2 ou mais rádios deixamos de saber que periféricos foram atribuidos a cada ligação USB, porta ou placa de som, seja para fazer modos digitais JS8Call, FT8, SSTV, AX.25 ou para controlar remotamente os rádios…

Qual a solução?

Para as portas série é relativemente fácil.
Quando listamos as portas ttyUSB* aparecem-me 3. Uma relativa ao IC-7300 e 2 do IC-9700.

crw-rw----+ 1 pi-star dialout 188, 0 Mar 9 18:01 /dev/ttyUSB0
crw-rw----+ 1 pi-star dialout 188, 1 Mar 9 17:39 /dev/ttyUSB1
crw-rw----+ 1 pi-star dialout 188, 2 Mar 9 17:39 /dev/ttyUSB2

Mas não sabemos a que rádio foi atribuído o ttyUSB0, ou o 1 ou o 2!
Para resolver este problema vamos dar nomes a cada ttyUSB, para que cada rádio seja reconhecido pelo sistema, independentemente da ordem de ligação dos rádios ao computador, ou raspberry pi…

Atribuir nomes a devices

1. Listamos os devices USB para conhecer as variáveis idVendor e idProduct.
Escreva na janela terminal,

Bus 001 Device 010: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP2102/CP2109 UART Bridge Controller [CP210x family]
Bus 001 Device 025: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP2102/CP2109 UART Bridge Controller [CP210x family]
Bus 001 Device 024: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP2102/CP2109 UART Bridge Controller [CP210x family]

Entre outros dispositivos identifique algo idêntico a,
Bus 001 Device 076: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP2102/CP2109 UART Bridge Controller [CP210x family]

Percebemos que para qualquer um dos rádios o idVendor="10c4" e o idProduct="ea60".

2. Agora pretende-se conhecer o serial number de cada rádio.
Numa janela terminal como sudo ou root escreva,

iSerial 3 IC-7300 06002344
iSerial 3 IC-9700 13005928 B
iSerial 3 IC-9700 13005928 A

Conhecendo estes valores, criamos uma regra para lhe atribuir um nome, ou melhor um symlink.

Crie então um ficheiro, escrevendo na janela terminal com sudo ou root e substitua os valores que obteve pelos que aqui mostro,

# IC-7300
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", ATTRS{serial}=="IC-7300 06002344", SYMLINK+="ic7300"
# IC-9700
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", ATTRS{serial}=="IC-9700 13005928 A", SYMLINK+="ic9700a"
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", ATTRS{serial}=="IC-9700 13005928 B", SYMLINK+="ic9700b"

…e agora, se a aplicação o permitir podemos definir nas suas configurações, no separador de ligação aos rádios, por ic7300 ou ic9700a ou b em vez de ttyUSB...

Desligue e volte a ligar os cabos USB aos rádios e escreva no terminal,

e obtém agora os nomes dos rádios e os devices ttyUSB correspondentes,

lrwxrwxrwx 1 root root 7 Mar  9 17:35 /dev/ic7300 -> ttyUSB0
lrwxrwxrwx 1 root root 7 Mar  9 19:07 /dev/ic9700a -> ttyUSB1
lrwxrwxrwx 1 root root 7 Mar  9 19:07 /dev/ic9700b -> ttyUSB2

Continua...

NanoVNA Saver on the Raspberry Pi

NanoVNA console

Como utilizo o raspberry pi no meu shack como computador de comunicações, programação e para aplicações de eletrónica lembrei-me de procurar se existia alguma aplicação para ler os dados de um NanoVNC.

Aqui deixo o método para a instalação deste projecto…

Abra o terminal e na linha de comandos copie e cole cada uma das seguintes linhas,

Para testar e iniciar o programa, digite: python3 nanovna-saver.py

Se correu tudo bem, mova agora a pasta de instalação para outra directoria, no meu projecto pi-star, descrito ao longo deste blog fica como,

Agora adicione um atalho ao menu.
Crie um novo ficheiro fazendo,

E copie e cole o seguinte conteúdo corrigindo algum caminho de acordo com a sua instalação,

Grave e saia, CTRL+s seguido de CTRL+x

Ligue o cabo USB entre o raspberry pi e o NanoVNA. Ligue o seu NanoVNA e, na janela do NanoVNA, secção "Serial port control" deve aparecer de imediato uma porta /dev/ttyACM0 (S-A-A-2).
Prima o botão Connect to device e faça as suas medidas!…

Pode encontrar o modelo que experimentei aqui,
https://www.passion-radio.com/meter/saa2n-1076.html#/217-version-4_screen_10_1cm_with_n

Actualização automática de programas escritos por John, G8BPQ

Este script para linux implementa algumas melhorias em relação ao post anterior e permite-lhe actualizar diversos programas que se encontrem na sua pasta local e disponíveis para download, por exemplo, na sua versão beta de G8BPQ. Guarda uma cópia das versões anteriores, na pasta versions, caso necessitemos de fazer o restauro e pára o linbpq. Se o linbpq estiver configurado como serviço deverá reiniciar logo após ser parado.

Neste exemplo utilizo um raspberry pi 4, que corre em simultâneo uma versão do pi-star MMDVM modificada e que utilizo como computador para modos digitais e IoT...

Copie e cole o código seguinte na pasta onde tem instalado os diversos programas BPQ. No meu caso em /usr/local/bin/linbpq/

Cole o seguinte código, ou faça o seu download se está a utilizar a página traduzida e leia atentamente as instruções comentadas no início do ficheiro.

Grave e saia. Se editou com o "nano" faça CTRL+s e em seguida CTRL+x, tudo em minúsculas.
Atribua permissões de execução ao ficheiro,

e, execute-o

Adiciona a seguinte linha em /etc/crontab, modificando o user e localização do seu script.

Para melhor compreender este assunto, consulte o meu post anterior...

Referências:
https://packet-radio.net/update-linbpq-with-up2bpq/

Instalar o Telegram no raspberry pi

Ou, para quem seguiu este projecto até aqui, a forma mais simples de instalar o telegram-desktop versão 1.5.11 desde a fonte, apenas com as livrarias em falta na distribuição debian buster onde temos vindo a trabalhar.

Porquê o Telegram?
É multi-plataforma, open source e um dos mais seguros software de chat e transferência de dados P2P! Algo que estava em falta neste projecto e permite a partilha de links, ideias, chat entre amigos e outros rádio amadores... Vamos a isso.

Actualize o seu sistema,

Para evitar adicionar mais lixo é boa prática instalar tudo a partir de directorias temporárias, que são limpas cada vez que reinicia o seu raspberry pi. Faça o seguinte,

A seguir descarregue as livrarias e programa, linha a linha,

E instale pela seguinte ordem de modo a evitar falhas nas dependências,

Se receber alguma mensagem de erro durante a instalação verifique a dependência, faça o download dessa dependência em https://packages.debian.org/buster/telegram-desktop para a versão armhf e recomece a instalação no pacote que lhe deu o erro...

Ao concluir com êxito a instalação, o Telegram pode ser chamado a partir do menu Internet > Telegram Desktop

Preencha o seu número de telefone móvel, confirme o código e eis a lista de contactos e mensagens que existe na sua aplicação mobile.

Se pretender que o Telegram seja iniciado e fique minimizado na barra de menus, abra o ficheiro ~/.config/lxsession/LXDE-pi/autostart e adicione a linha,

Configuração do exim4 para envio de e-mails

Muitas aplicações linux necessitam de enviar notificações por e-mail. Por exemplo o cron jobs utiliza o e-mail para enviar relatórios e alertas… no meu caso interessa-me que os diversos scripts descritos ao longo destes posts me enviem e-mails no caso de excedidas as características técnicas do raspberry pi, se tenho mensagens na BBS para mim, ou se houve actualizações de software…

Decidi-me pelo exim4 Mail Transport Agent pela simplicidade de configuração, espaço em disco e a necessidade de recursos mínimos de CPU.

O meu raspberry pi corre a versão Debian Buster e para instalar o exim4 deve fazer o seguinte,

Definir o nome da sua máquina descrito no artigo - Configurar correctamente o nome de uma máquina linux

Actualizar o seu sistema e instalar o exim4

Configurar o exim4

Siga os passos seguintes, responda às questões do instalador adaptando as respostas às suas configurações,

- a primeira janela pergunta-lhe qual o tipo de servidor que pretende. Para o que pretendo, seleccionei "mail sent by smarthost; no local mail"
- a próxima, pergunta-lhe pelo nome do servidor de e-mail. Escreva o nome que utilizou no hostname
- a seguir, quais são os endereços IP que podem utilizar o servidor. Responda com "127.0.0.1 ; ::1"
- próxima, outros destinos para os quais correio é aceite. No meu caso utilizei as configurações de hosts para o meu endereço de IP público (endereço fixo): "ct1ebq.oitaven.pt; localhost.localdomain; localhost;" ou deixe em branco
- nome de domínio visível para utilizadores locais, uma vez mais no meu caso "ct1ebq.oitaven.pt"
- endereço IP ou host name para o envio de correio. No meu caso "mail.opensolutions.pt::587". Aqui, por exemplo, poderia ser o servidor de envio do gmail, ao qual responderia "smtp.gmail.com::587"
- mantenha o pedido de nomes DNS mínimas (Dial-on-Demand)? Responda "No"
- dividir a configurações em diversos ficheiros? Seleccione "Yes"

O resultado do meu ficheiro de configuração foi,

Agora tem de configurar os detalhes da conta de envio de correio. Edite o ficheiro /etc/exim4/passwd.client e adicione esta linha no final, de acordo com as suas configurações

Proteja este ficheiro,

Os restantes ficheiros de configurações encontram-se em /etc/exim4
Não os altere. Sempre que faça alterações a qualquer configuração de correr o comando sudo update-exim4.conf e reiniciar o exim4.

Notas:

Acabei por fazer pequenas alterações aqui e ali. Deixo-as também para minha referência,

Editei o ficheiro /etc/exim4/exim4.conf.localmacros

O ficheiro /etc/exim4/exim4.conf deve conter as linhas seguintes, para a minha configuração,

Foram estas linhas que permitiram o meu servidor de e-mail aceitar e-mails sem erros.

Alguns processos, como referi no início, poderão enviar e-mails para o root ou outros utilizadores do sistema: pi ou pi-star.
Edite o ficheiro /etc/aliases e modifique de acordo com as suas configurações. O meu ficou assim,

Basicamente, todos os e-mails enviados são re-encaminhados para root, que por sua vez re-encaminha para o user pi-star, tendo como final destinatário ct1ebq.
Corra o seguinte comando para aplicar as alterações,

Pode ainda criar configurações mais complexas que resolvam users e nome de máquina em e-mails verdadeiros. Edite o ficheiro /etc/email-addresses

sudo nano /etc/email-addresses

E acrescente as linhas que pretender. Eis um pequeno exemplo,

Vamos testar

Aplique as suas configurações e reinicie o exim4,

Envie um e-mail a partir da linha de comandos linux,

"-v" dá-lhe os detalhes da comunicação e indica-lhe algum erro que possa ter de corrigir.
Mais 2 exemplos, para o envio de um pequeno texto,

Não esqueça de fazer cópias de segurança depois do exim4 bem configurado e testado!

Referências:
(alguns dos links que segui)
https://www.exim.org/docs.html
https://www.digitalocean.com/community/tutorials/how-to-install-the-send-only-mail-server-exim-on-ubuntu-12-04
https://raspinotes.wordpress.com/2019/03/10/send-email-from-raspberrypi-with-exim4/
http://www.manu-j.com/blog/wordpress-exim4-ubuntu-gmail-smtp/75/
https://askubuntu.com/questions/167043/how-do-i-configure-exim4-to-send-mail-through-a-password-protected-ssl-smtp-mail
https://linuxcommando.blogspot.com/2014/04/how-to-setup-exim4-on-debian-to-use.html
https://www.vultr.com/docs/setup-exim-to-send-email-using-gmail-in-debian

Configurar correctamente o nome de uma máquina linux

Quando temos um servidor linux, um computador desktop, ou mesmo um raspberry pi há serviços que gostariamos de correr que dependem de uma boa configuração do nome da máquina.

No meu caso o que me levou a esta necessidade foi a instalação do serviço para envio de e-mails de alerta e notificação, o exim4 a correr no raspberry pi.

A instalação do exim4, se pretendermos enviar e-mails como cliente para servidores como o gmail ou servidores de correio muito exigentes em termos de filtragem do que é ou não é spam obriga-nos a uma configuração bem feita.

Em qualquer distribuição linux o nome da nossa máquina é configurado em 2 ficheiros: /etc/hosts e /etc/hostname, idependentemente de existirem ferramentas para os editar e configurar automaticamente…

Deixo aqui o exemplo da configuração de ambos os ficheiros,

hostname, deve conter apenas uma linha com o nome da máquina. Faça,

e na primeira linha escreva o nome que quer dar à sua máquina. Geralmente o nome define a função deste computador ou servidor. No meu caso, escrevi: ct1ebq

Para ver o resultado, após o reboot da máquina faça,

O que no meu caso devolve,

 Static hostname: ct1ebq
       Icon name: computer
      Machine ID: 18634e1464184094bc66dcacfba0bf43
         Boot ID: ac42129fd59b46528ae6c13fd83ca8d6
Operating System: Raspbian GNU/Linux 10 (buster)
          Kernel: Linux 5.4.72-v7l+
    Architecture: arm

Agora o ficheiro hosts.

Este ficheiro permite o computador resolver nomes sem consultar qualquer servidor de DNS. Resolve os nomes em endereços IP do próprio computador, de computadores da rede de intranet ou da Internet.

Recordem que o que me levou a uma correcta configuração do nome da máquina foi a necessidade de autenticação num servidor de e-mail na Internet.
Tive então de utilizar um domínio que já tenho: oitaven.pt e indicar que o nome da minha pequena máquina é um subdomínio de oitaven.pt

Não esquecer que, para toda a Internet, o nome da minha máquina só será reconhecido depois de configurar no servidor de DNS um A HOST com a variável "ct1ebq".

Edite o ficheiro hosts,

O ficheiro ficou então assim,

89.115.0.209 ct1ebq.oitaven.pt
127.0.0.1 localhost.localdomain localhost

::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 ct1ebq

O nome do meu raspberry pi é ct1ebq e traduz o endereço 89.115.0.209 como subdomínio de oitaven.pt

A configuração do ficheiro /etc/hosts tem efeito imediato e é consultado cada vez que o sistema operativo ou qualquer aplicação solicita a resolução de nomes, por exemplo um browser.
Pode ser alterado a qualquer momento sem reiniciar o computador.

Actualização automática do linbpq

Requisitos:
- linbpq instalado em qualquer distribuição linux, incluso em raspberry pi
- linbpq a correr como serviço, descrito no final deste post

Encontrei esta ideia em https://packet-radio.net/update-linbpq-with-up2bpq/ mas, falhava sob determinadas circunstâncias e fui melhorando ao longo do tempo…
Por exemplo, o script original não via 2 updates no mesmo dia, por vezes necessário para corrigir problemas detectados pelos utilizadores, no lançamento de uma nova versão beta.

Este script corrige este problema ao utilizar o timestamp, com horas e minutos. Irá guardar também todas as versões actualizadas, caso pretendamos voltar atrás, e fazer um downgrade, por uma qualquer funcionalidade perdida.

Recordo que no meu caso, tenho o linbpq instalado num raspberry pi no directório /usr/local/bin/linbpq/.
Corrija os caminhos do script de acordo com o seu local de instalação.

Para criar o script faça,

Copie e cole este script no seu editor de texto

A seguir dê-lhe permissões de execução

E, corra-o, por exemplo a partir do directório onde se encontra,

De modo a actualizar automaticamente, insira a seguinte linha no crontab, fazendo sudo nano /etc/crontab

Praticamente todos os exemplos neste blog dizem respeito a projectos a correr sob pi-star. Altere o utilizador "pi-star" para "pi" se correr sob raspberry pi ou o seu utilizador de login!
Veja ainda o meu post mais recente sobre este assunto.

Referências:
https://packet-radio.net/update-linbpq-with-up2bpq/