#!/bin/bash # # Autor: Fernando Souza # Sidnei Serra # # Data: 18/09/2023 | 20/09/2023 # Nome: remove-ruidos-pulseaudio.sh # Homepage: # Licença: GPL # Sistema ultilizado: Debian 12 # # Cancelador de ruídos do PulseAudio # # # Como ativar o cancelador de ruído do Pulse Audio quando ele não funciona como deveria? # # Como ativar o Pulse Audio no lugar do Pipewire e ativar "alternativamente" o cancelador # de ruídos do Pulse. # # Como melhorar a qualidade de captação de áudio no Linux ativando o cancelamento de eco # e ruído, e também desativando o auto-ajuste dos níveis de volume. # # # Obs: # # Testar o funcionamento do script primeiro em ambiente de teste só depois de tudo OK # testar na máquina de produção. # # # Problema relatado no Debian 12 mas no Debian 11 funcionava normalmente. # # # Instale o script: # # sudo mv -i remove-ruidos-pulseaudio.sh /usr/local/bin # # # Dê permissões de executável: # # chmod +x /usr/local/bin/remove-ruidos-pulseaudio.sh # # # # https://www.youtube.com/watch?v=jwOvy-Tw2rg # https://twitter.com/velox256 # https://www.youtube.com/@SidneiSerra-hq1zk # https://www.vivaolinux.com.br/~velox256 # https://br.linkedin.com/in/sidnei-serra-3a99492b # https://plus.diolinux.com.br/t/ative-o-cancelamento-de-eco-e-ruido-do-microfone-no-linux/20146 # https://askubuntu.com/questions/279407/how-to-disable-microphone-from-auto-adjusting-its-input-volume/829996#829996 # https://plus.diolinux.com.br/t/ative-o-cancelamento-de-eco-e-ruido-do-microfone-no-linux/20146 # https://diolinux.com.br/tutoriais/cancelamento-de-eco-e-ruido-no-linux.html # https://plus.diolinux.com.br/t/reducao-de-ruidos-de-microfone-em-reunioes-ao-vivo/41909/6 # https://plus.diolinux.com.br/t/cancelamento-do-ruido-no-microfone-fedora-36/45797 # # # Prova do problema # # https://plus.diolinux.com.br/t/microfone-com-ruido-forte-e-retorno-no-manjaro-gnome/43100 # https://youtu.be/a5bM03BMkqM # https://forum.snapcraft.io/t/archived-winesnap-creating-snaps-for-windows-applications/6392 # https://doc.ubuntu-fr.org/yad_yet_another_dialog which pactl || exit # pactl info || exit which pavucontrol || exit which nano || exit sem_ruidos(){ # Verificar se o arquivo existe if [ -e "/etc/pulse/default.pa" ] ; then clear echo "O arquivo /etc/pulse/default.pa existe." echo "" pactl unload-module module-echo-cancel pactl load-module module-echo-cancel aec_method=webrtc source_name=echocancel pactl set-default-source echocancel pactl set-default-sink `pactl info | grep -i "Destino padrão:" | cut -d":" -f2` # su -c 'nano /etc/pulse/default.pa' else clear echo "O arquivo /etc/pulse/default.pa não existe." exit fi } instalar(){ # Opções de como iniciar esse script. opcao=$(yad \ --center \ --title="Metodo para iniciar esse script" \ --width 800 --height 200 \ --text-align="center" \ --list --radiolist \ --column="Selecionado" --column="Opções" --column="Informação" \ False "atalho" "Manual via arquivo .desktop" \ False "autostart" "Iniciar junto com o Gnome, KDE via autostart" \ False "sistema" "Iniciar com o sistema via arquivo /etc/rc.local" \ False "systemd" "Iniciar com o sistema opção voltada para o Systemd" \ 2> /dev/null ) opcao=$(echo "$opcao" | cut -d'|' -f2) if [[ "$opcao" = "atalho" ]] then # ---------------------------------------------------------------------------------------- # Metodo manual # Verificar se o arquivo existe if [ -e "$HOME/.local/share/applications/echocancel.desktop" ] ; then clear echo "O arquivo $HOME/.local/share/applications/echocancel.desktop existe." else clear echo "O arquivo $HOME/.local/share/applications/echocancel.desktop não existe." # yad \ # --center \ # --title='Aviso' \ # --text='\n\nNão foi possível acessar $HOME/.local/share/applications/echocancel.desktop arquivo inexistente!' # --timeout=10 # --no-buttons 2>/dev/null # Crie o arquivo para o menu de aplicativos: echo "[Desktop Entry] Version=1.0 Name=Cancelador de ruídos do PulseAudio Comment=Carregar o módulo echo cancel do PulseAudio. Exec=/usr/local/bin/remove-ruidos-pulseaudio.sh --sem_ruidos Icon=multimedia-volume-control Type=Application Categories=AudioVideo;Audio;" > $HOME/.local/share/applications/echocancel.desktop fi # ---------------------------------------------------------------------------------------- elif [[ "$opcao" = "autostart" ]] then # ---------------------------------------------------------------------------------------- # Metodo automatico # Para ativação quando precisar, basta clicar no ícone na sua listagem de programas. para # ativá-lo sempre que ligara máquina, coloque o arquivo na inicialização do sistema. # # # Opção 1 # # Gnome, KDE: # # # $HOME/.config/autostart/ # # ou # # /etc/xdg/autostart echo "[Desktop Entry] Encoding=UTF-8 Version=0.9.4 Type=Application Name=Cancelador de ruídos do PulseAudio Comment=Carregar o módulo echo cancel do PulseAudio. Exec=/usr/local/bin/remove-ruidos-pulseaudio.sh --sem_ruidos Icon=multimedia-volume-control OnlyShowIn=XFCE; RunHook=0 StartupNotify=false Terminal=false Hidden=false " > $HOME/.config/autostart/echocancel.desktop # ---------------------------------------------------------------------------------------- elif [[ "$opcao" = "sistema" ]] then # ---------------------------------------------------------------------------------------- # Metodo automatico # Opção 2 # # /etc/rc.local # # Verificar se o arquivo existe if [ -e "/etc/rc.local" ] ; then clear echo " O arquivo /etc/rc.local existe. " su -c 'echo "# Cancelador de ruídos do PulseAudio /usr/local/bin/remove-ruidos-pulseaudio.sh --sem_ruidos & " >> /etc/rc.local' else clear echo " O arquivo /etc/rc.local não existe. " fi # ---------------------------------------------------------------------------------------- elif [[ "$opcao" = "systemd" ]] then # ---------------------------------------------------------------------------------------- # Verificar se o diretório /etc/systemd/system/ existe # # -d nos ajuda a saber se o diretório existe, se mudarmos -d para -f é para verificar a existência de arquivos. if [ -d /etc/systemd/system/ ]; then clear # Criando um arquivo Unit para a inicialização do script. su -c 'echo "[Unit] Description=Cancelador de ruídos do PulseAudio [Service] Type=simple RemainAfterExit=yes ExecStart=/usr/local/bin/remove-ruidos-pulseaudio.sh --sem_ruidos # ExecStop= # ExecReload= [Install] # # multi-user.target => Ponto em que o sistema já permite multi-usuários (non-graphical) no sistema. # WantedBy=multi-user.target" > /etc/systemd/system/cancelamento_de_ruido.service' # Para atualizar/carregar o arquivo que voce criou echo " Recarregue a nova definição do serviço... " su -c 'systemctl daemon-reload' # Para habilitar o script na inicialização do sistema. echo " Ativando o serviço... " su -c 'systemctl enable cancelamento_de_ruido.service' # Seu script esta habilitado para iniciar e também os seguintes atributos: # Inicia o serviço. su -c 'systemctl start cancelamento_de_ruido.service' # Mostra detalhes sobre o serviço, como log, se está em execução e etc. systemctl status cancelamento_de_ruido.service # systemctl stop cancelamento_de_ruido.service # systemctl restart cancelamento_de_ruido.service yad \ --center \ --title="Cancelador de ruídos do PulseAudio" \ --width=700 --height=100 \ --text=' # Reinicie o sistema agora. Apos o reinicio execute "systemctl status cancelamento_de_ruido.service" para ver se esta OK o serviço. ' \ --on-top \ --image=gtk-dialog-question \ --window-icon=yad \ 2> /dev/null else clear echo " A pasta /etc/systemd/system/ não existe. " fi # ---------------------------------------------------------------------------------------- # https://plus.diolinux.com.br/t/executar-um-script-na-inicializacao-do-debian-12/56881 # https://blog.remontti.com.br/2478 # https://embarcados.com.br/systemd-adicionando-scripts-na-inicializacao-do-linux/ fi } remover(){ clear rm -Rf $HOME/.local/share/applications/echocancel.desktop rm -Rf $HOME/.config/autostart/echocancel.desktop su -c 'rm -Rf /etc/systemd/system/cancelamento_de_ruido.service' # nano /etc/rc.local # nano /etc/pulse/default.pa # su -c 'rm -Rf /usr/local/bin/remove-ruidos-pulseaudio.sh' # Resetar o pulseaudio: # pulseaudio -k } # Central de Ajuda ajuda(){ clear echo " Para quem usa o PipeWire / PulseAudio # Programas necessários para família Debian: # # gstreamer1.0-pulseaudio # pulseaudio # pulseaudio-utils Adaptar os nomes dos pacotes acima para outras distribuições Linux que não seja de origem Debian. Kernel: `uname -r` Placa de áudio: `lspci | grep -i audio` `pactl info` O script $(basename $0) pode ser usado com as seguintes opções: --sr ou --sem_ruidos => Remove ruídos do PulseAudio; --i => Realiza a instalação do script no sistema (adiciona o filtro no PipeWire); --r => Remove o script e suas configurações do sistema; --h => Mostra essa mensagem de ajuda. " } # ==================================================== case "$1" in --sr | --sem_ruidos) sem_ruidos ;; --i) instalar ;; --r) remover ;; --h) ajuda ;; * ) clear echo " Opção inválida, use $(basename $0) --sr ou --sem_ruidos | --i | --r | --h Para ajuda: $(basename $0) --h " ;; esac exit 0