Como posso manter o rádio de uma placa wireless desligado por padrão?

11

A placa PCI sem fio da minha estação de trabalho está sempre procurando redes sem fio disponíveis, mas raramente a uso. Posso manter o rádio desligado até que eu precise?

    
por ændrük 31.01.2011 / 18:51

6 respostas

3

Existem pelo menos duas tarefas do Upstart que afetam o estado sem fio padrão:

  • /etc/init/rfkill-restore.conf restaura o estado do bloco flexível de todos os rádios para o que eles estavam no último desligamento, conforme registrado em /var/lib/rfkill/saved-state .
  • /etc/init/network-manager.conf inicia o Network Manager, que por sua vez restaura sua ideia de estado wireless de /var/lib/NetworkManager/NetworkManager.state .

Se você olhar para essas duas configurações de trabalho, descobrirá que elas não têm nenhum relacionamento temporal, o que parece uma falha de design para mim. Eu estou supondo que esta condição de corrida raramente é um problema porque /etc/init/rfkill-restore.conf é muito mais simples e tem menos condições de início.

Todas as soluções para impor um padrão sem fio que eu vi tentam usar /etc/rc.local , incluindo o "moderno" solução que @Lekensteyn e @ rubo77 veio com. Infelizmente, essa solução não funciona para mim em nenhum dos dois laptops que tentei. Isso não é particularmente surpreendente porque /etc/rc.local também tem nenhum relacionamento temporal que eu posso encontrar em /etc/init/rfkill-restore.conf e /etc/init/network-manager.conf . Jogar em um sono demorado em /etc/rc.local antes de emitir um rfkill block wifi é uma solução feia para essa bagunça de condição de corrida, mas funciona se o atraso for longo o suficiente.

Uma solução melhor seria impor nossos estados desejados em /var/lib/rfkill/saved-state e /var/lib/NetworkManager/NetworkManager.state antes que esses dois trabalhos de Upstart tenham permissão para executar. Podemos conseguir isso criando nosso próprio trabalho Upstart. Na verdade, precisaremos de dois arquivos de configuração de trabalho para alcançar o tempo necessário.

Nossa primeira configuração de trabalho faz as modificações reais do arquivo que precisamos. Ele será executado o mais cedo possível e só será executado uma vez. Crie /etc/init/radio-silence.conf com este conteúdo:

# radio-silence - Ensure radio silence on startup
#
# Override default startup behaviour of radios to ensure they are all
# disabled until the user deliberately enables them. This job requires
# radio-silence-wait to delay start of any services that may depend on
# resources manipulated by this job.

description "Disable all radios by default"

start on local-filesystems

pre-start script
  sed -i -re "s/^(.+[[:space:]]+)[01][[:space:]]*\$//" /var/lib/rfkill/saved-state
  sed -i -re "s/^(WirelessEnabled=).*\$/false/" /var/lib/NetworkManager/NetworkManager.state
end script

Como eu prefiro o silêncio total do rádio quando meu laptop começa, eu bloqueio soft todos rádios, não apenas sem fio, mas você pode modificar o primeiro sed acima para limitar o impacto do trabalho a qualquer dispositivos sem fio que você deseja bloquear soft.

Nossa segunda configuração de trabalho é responsável por garantir que nenhum dos trabalhos rfkill-restore e network-manager inicie antes que radio-silence tenha concluído as modificações do arquivo. Crie /etc/init/radio-silence-wait.conf da seguinte forma:

# radio-silence-wait - Helper task for radio-silence
#
# Delays the start of all jobs that may depend on resources manipulated
# by radio-silence job. Avoids the need to modify job configuration of
# those other jobs.

description "Assist radio-silence by delaying jobs it affects"

start on (starting rfkill-restore or starting network-manager)
stop on (started radio-silence or stopped radio-silence)

instance $JOB
normal exit 0 2
task

script
  status radio-silence | grep -q "start/running" && exit 0
  start radio-silence || true
  sleep infinity
end script

Com esta solução, não vejo mais problemas de condição de corrida, embora não tenha abordado a corrida teórica entre rfkill-restore e network-manager .

Para mais detalhes sobre como esses trabalhos funcionam juntos para atingir nosso objetivo temporal, consulte minha pergunta e resposta, " Como faço para criar uma tarefa de início único de execução garantida para concluir antes de começarem duas outras tarefas? "

    
por froage 11.10.2014 / 09:47
7

Solução "Moderna" usando o Network Manager: basta desmarcar a opção Wireless Enabled no applet Network Manager (KDE: Network Management). O comando nmcli nm wifi off é equivalente. Continue lendo se você ativar o Wi-Fi esporadicamente, mas gostaria de reverter para desativado na reinicialização.

O estado sem fio é lembrado no arquivo /var/lib/NetworkManager/NetworkManager.state . Para desativar o Wi-Fi durante a inicialização, verifique se a chave WirelessEnabled permanece em false . Você poderia fazer isso editando o script de inicialização do Network Manager ou usando o truque /etc/rc.local abaixo. O comando que você precisa é:

sed s/^WirelessEnabled=true/WirelessEnabled=false/ -i /var/lib/NetworkManager/NetworkManager.state
rfkill block wifi

Coloque isso antes de exit 0 (conforme descrito abaixo). O comando rfkill block wifi ainda é necessário devido a uma corrida com a inicialização do Network Manager (NM). Depois que o NM for iniciado, as alterações no arquivo de estado não terão efeito.

(resposta antiga que envolve a edição do arquivo /etc/rc.local com uma explicação do comando rfkill )

Um pouco hacky, mas deve funcionar. Uma placa sem fio pode ser desativada usando o comando rfkill . Todos os dispositivos usados pelo rfkill podem ser mostrados usando rfkill list . Exemplo de saída:

0: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: no

Hard blocked depende de uma configuração de hardware, por exemplo um comutador sem fio em um notebook. Soft blocked pode ser controlado pelo SO (Ubuntu).

Como isso funciona? Não tem uma página de manual, a execução de rfkill fornece um texto de ajuda, neste caso:

Usage:  rfkill [options] command
Options:
        --version       show version (0.4)
Commands:
        help
        event
        list [IDENTIFIER]
        block IDENTIFIER
        unblock IDENTIFIER
where IDENTIFIER is the index no. of an rfkill switch or one of:
        <idx> all wifi wlan bluetooth uwb ultrawideband wimax wwan gps fm

Ah, agora chegamos a algum lugar. Você precisa executar rfkill block wifi como root para desativar o dispositivo sem fio. (wlan é um alias de wifi, veja o código-fonte do rfkill ).

Agora, se você quiser desabilitar as funções sem fio no boottime, adicione o comando a /etc/rc.local executando sudo nano /etc/rc.local . Use as teclas de seta / página para cima / baixo para navegar até a linha antes de exit 0 e adicione rfkill block wifi , para que o arquivo termine assim:

# By default, this script does nothing

rfkill block wifi
exit 0

Quando terminar, pressione Ctrl + X , depois pressione Y para salvá-lo e pressione Enter para aceitar o nome do arquivo.

Se você decidir ativar o dispositivo posteriormente, execute: sudo rfkill unblock wifi . Não se esqueça de remover a linha de /etc/rc.local se você decidir usar a placa wireless.

    
por Lekensteyn 31.01.2011 / 21:42
1

A maneira mais fácil de desativar a placa sem fio é clicar com o botão direito do mouse no indicador do NetworkManager (pequeno ícone no canto superior direito do painel) e desmarcar a Enable Wireless . Isso desativa ( ifconfig wlan0 down ) a interface e não faz mais digitalizações.

    
por user4124 31.01.2011 / 19:20
1

Observação: se você usa tlp , leia a resposta inteira.

Todas as respostas a esta pergunta são bem antigas e não funcionam em versões mais recentes do Ubuntu que usam o systemd. resposta de froage funcionou para mim em 14.04 mas não funciona em 16.04.

O Systemd usa systemd-rfkill.service para salvar o estado da opção rfkill durante o desligamento e restaurá-lo em cada inicialização.

Você tem que passar um parâmetro de linha de comando do kernel para restaurar o estado do switch rfkill em cada inicialização.

  1. abra /etc/default/grub com seu editor de texto preferido.
  2. adicione systemd.restore_state=1 como um parâmetro para GRUB_CMDLINE_LINUX . Essa linha deve agora ler GRUB_CMDLINE_LINUX="systemd.restore_state=1" . Você também pode adicioná-lo a GRUB_CMDLINE_LINUX_DEFAULT . Qualquer um deles funciona. Veja esta questão para mais detalhes.

Isso garantirá que o estado do rfkill seja restaurado em cada inicialização. Certifique-se de desligar o bluetooth e o Wi-Fi antes de reiniciar.

Problemas com tlp :

Atualização: esses problemas estavam presentes em tlp 0.8-1 , disponível em 16.04 repositórios. Depois de atualizar para tlp 0.9-1 usando o linrunner ppa, os problemas ALL foram solucionados.

Resposta original:

tlp masks / desativa systemd-rfkill.service para "evita conflitos e assegura a operação adequada das opções de comutação de dispositivos de rádio do TLP" . ( Source-1 , Source-2 )

Isso significa que passar o parâmetro do kernel não funcionará para você.

Aqui está um pequeno trecho (em torno da linha nº 195) do arquivo de configuração padrão do tlp ( /etc/default/tlp ).

# Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown
# on system startup: 0=disable, 1=enable.
# Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below
#   are ignored when this is enabled!
RESTORE_DEVICE_STATE_ON_STARTUP=0

# Radio devices to disable on startup: bluetooth, wifi, wwan.
# Separate multiple devices with spaces.
#DEVICES_TO_DISABLE_ON_STARTUP="bluetooth wifi wwan"

# Radio devices to enable on startup: bluetooth, wifi, wwan.
# Separate multiple devices with spaces.
#DEVICES_TO_ENABLE_ON_STARTUP="wifi"
  • Como você pode ver, a opção RESTORE_DEVICE_STATE_ON_STARTUP é desativado por padrão. Mas ativar essa opção não ajuda.

    Mesmo depois de ativar a opção para RESTORE_DEVICE_STATE_ON_STARTUP , desative o wifi e o bluetooth (usando rfkill block all ) e mantenha reiniciando, de alguma forma, o WiFi é ativado em cada segunda ou terceira inicialização. Lá não há garantia de que na próxima inicialização o WiFi será desativado. Surpreendentemente tlp consegue manter o Bluetooth desativado em cada inicialização.

  • O mesmo vale para a segunda opção no snippet, DEVICES_TO_DISABLE_ON_STARTUP , que também é desabilitada por padrão.       A ativação também não funciona. Network Manger mostra que o Wi-Fi está desativado, mas rfkill list não mostra nenhum bloqueio de software WiFi.

    % bl0ck_qu0te%
  • Da mesma forma, as outras opções fornecidas tlp-rdw não funcionam como esperado.

Solução para tlp usuários:

Atualização: atualize para tlp 0.9-1 usando o linrunner ppa.

Resposta original:

  1. Ativar DEVICES_TO_DISABLE_ON_STARTUP e configurá-lo para desativar o Bluetooth e o WiFi pode funcionar para você. ( Funcionou para essa pessoa )

  2. Esta questão aqui no askubuntu. É semelhante a uma resposta mais antiga a essa pergunta. Mas por favor note que eu não tentei isso sozinho. Pode ou não funcionar.

Outras fontes: systemd-rfkill , tlp-configuration

por Manoj Sawai 10.02.2017 / 22:05
0

Pessoalmente eu uso Jupiter o miniaplicativo de gerenciamento de energia para desativar o wireless no meu laptop, pois é controlado por um botão especial. Eu não acho que está no repo principal que eu tive que adicionar um ppa de Andrew em Webupd8 para obtê-lo.

Espero que isso ajude.

    
por Allan 31.01.2011 / 19:06
0

Você pode adicionar

ifconfig wlan0 down

para /etc/rc.local , mas primeiro,

garanta que, se você estiver usando o NetworkManager (eu tenho a versão 0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3), você vai ao menu " Editar conexões " - > Na guia " Sem fio ", clique na conexão, clique em " Editar " e verifique se, na guia " Sem fio ", " A caixa de seleção Conectar automaticamente "NÃO está marcada.

    
por waltinator 13.10.2011 / 22:32