Após a atualização do
Deepin para a versão 20.2.2 (baseado no Debian 10.8) em um
notebook Megaware 4129 com adaptador
Wi-Fi RTL8192SE embutido, o adaptador Wi-Fi não era exibido na Central de Controle do Deepin (apenas a rede cabeada estava disponível).
É comum em notebooks existirem combinações de teclas de função para habilitar ou desabilitar Wi-Fi, Bluetooth e outras funções, porém, o adaptador estava sendo reconhecido normalmente e estava ativo, conforme o
Gerenciador de Dispositivos do Deepin.
Figura 1: Gerenciador de Dispositivos do Deepin
Caso o adaptador Wi-Fi estivesse desligado devido a teclas de função, o adaptador Wi-Fi seria exibido em laranja no Gerenciador de Dispositivos com o prefixo (Desativar) no nome do adaptador Wi-Fi. Também pude confirmar que o adaptador Wi-Fi ("wlan") não possuía nenhum tipo de trava através do comando "rfkill", que exibia o status "Unblocked" (desbloqueado) para travas do adaptador Wi-Fi via Software ou Hardware (teclas de função).
rfkill
ID TYPE DEVICE SOFT HARD
1 bluetooth hci0 unblocked unblocked
2 wlan phy1 unblocked unblocked
Na saída do Gerenciador de Dispositivos do Deepin, ao selecionar o adaptador Wi-Fi na lista (conforme Figura 1), é exibido o Driver (Módulo) utilizado para prover a interface entre o sistema operacional e o hardware (adaptador Wi-Fi). Ao remover e recarregar o módulo, o adaptador Wi-Fi e ele passou a ser exibido normalmente na Central de Controle e na Barra de tarefas do Deepin.
sudo modprobe -r rtl8192se && modprobe rtl8192se
Porém, notei que, após a reinicialização, novamente o Deepin não reconhecia o adaptador Wi-Fi. Notei também que o LED do Wi-Fi mantinha-se ativo do momento que ligava o computador até a tela de login do Deepin. Após o logon do usuário, o LED do Wi-Fi apagava-se e o adaptador Wi-Fi não era mais reconhecido, porém, ao remover e recarregar o módulo através dos comandos acima, o adaptador Wi-Fi voltava a ser reconhecido normalmente.
Não pude encontrar nenhuma solução definitiva ou pessoas com sintoma similar na Internet, portanto, decidi adotar uma solução de contorno, que é criar um script que realiza a remoção e recarregamento do módulo "rtl8192se" a cada logon de usuário realizado no sistema.
Por padrão, o "modprobe" requer privilégios de superusuário para ser executado, portanto, o script que realiza a monitoração deve ser executado no contexto de superusuário (root) ou devem ser atribuídas permissões para que usuários comuns executem o "modprobe" sem "sudo". Não é recomendado atribuir privilégios para que usuários normais executem o "modprobe" sem "sudo", devido a possibilidade de comprometer a segurança e estabilidade do sistema através do carregamento de módulos nocivos ou desativação não-intencional de módulos essenciais para funcionamento do sistema.
Para executar o script de monitoramento como superusuário (root):
1. No Terminal do Deepin, execute o comando abaixo para editar o Cron do usuário "root".
sudo crontab -e
2. No final do arquivo, adicione a seguinte linha:
@reboot /usr/local/sbin/detect_logon
Dessa forma, estamos configurando o sistema operacional para executar a cada inicialização do sistema o script "/usr/local/sbin/detect_logon".
3. Crie o arquivo "/usr/local/sbin/detect_logon" através do "nano" (ou outro editor de texto de sua preferência) com o seguinte conteúdo:
sudo nano /usr/local/sbin/detect_logon
<file bash detect_logon>
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import os, time
Buffer_list=[]
while True:
users=os.popen("'who | cut -d' ' -f1 | sort | uniq"')
users=users.read()
Current_List=users.split('
')
Current_List=filter(None,Current_List)
if Current_List:
if Current_List != Buffer_list:
if len(Current_List) > len(Buffer_list):
#HERE YOU ADD THE COMMANDS, inside the triple quotes.
# add each command in a new line
# i let you an example for turning the brightness down..
os.system("'/sbin/modprobe -r rtl8192se && /sbin/modprobe rtl8192se"')
Buffer_list=Current_List
time.sleep(0.5)
O script acima, ao ser executado durante a inicialização, irá monitorar as sessões de usuário ativas e executará o comando "modprobe" para remover e recarregar o módulo "rtl8192se".
4. Atribua permissões de execução para o script "detect_logon" através do comando:
sudo chmod +x /usr/local/sbin/detect_logon
5. Reinicie o computador e verifique se o adaptador Wi-Fi está sendo reconhecido normalmente após a reinicialização.
Referências
1. Unix & Linux. Execute root command after a user starts the session. Disponível em: <
https://unix.stackexchange.com/questions/149509/execute-root-command-after-a-user-starts-the-session>. Acesso em: 22 de jul. de 2021.