Respostas:
Existem pelo menos dois trabalhos iniciados 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 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 idéia de estado sem fio /var/lib/NetworkManager/NetworkManager.state
.Se você observar essas duas configurações de trabalho, descobrirá que elas não têm relacionamento temporal , o que me parece uma falha de design. Acho que essa 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 de conexão sem fio que eu já tentei usar /etc/rc.local
, incluindo a solução "moderna" que @Lekensteyn e @ rubo77 criaram. 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 não tem nenhuma relação temporal que eu possa encontrar com qualquer um de /etc/init/rfkill-restore.conf
e /etc/init/network-manager.conf
. Lançar um sono prolongado /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 antes/var/lib/rfkill/saved-state
e /var/lib/NetworkManager/NetworkManager.state
antes desses dois trabalhos iniciados. Podemos conseguir isso criando nosso próprio trabalho Upstart. De fato, precisaremos de dois arquivos de configuração de tarefas para atingir o tempo necessário.
Nossa primeira configuração de trabalho faz as modificações reais de arquivo necessárias. Ele será executado o mais cedo possível e será executado apenas 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:]]*\$/\11/" /var/lib/rfkill/saved-state
sed -i -re "s/^(WirelessEnabled=).*\$/\1false/" /var/lib/NetworkManager/NetworkManager.state
end script
Como eu prefiro o silêncio total do rádio quando meu laptop é iniciado, bloqueio suavemente todos os rádios, não apenas os sem fio, mas você pode modificar o primeiro sed
acima para limitar o impacto desse trabalho aos dispositivos sem fio que deseja bloquear.
Nossa segunda configuração de trabalho é responsável por garantir que nenhum dos trabalhos rfkill-restore
e network-manager
seja iniciado antes de radio-silence
concluir as modificações no arquivo. Crie da /etc/init/radio-silence-wait.conf
seguinte maneira:
# 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 estou mais vendo problemas de condição de corrida, embora não tenha abordado a corrida teórica entre rfkill-restore
e network-manager
.
Para obter mais detalhes sobre como esses trabalhos funcionam juntos para alcançar nosso objetivo temporal, consulte minha pergunta e resposta: "Como crio um trabalho Upstart de execução única que deve ser concluído antes que outros dois trabalhos comecem?"
Solução "moderna" usando o Network Manager: basta desmarcar a opção Wireless Enabled no miniaplicativo Network Manager (KDE: Network Management). O comando nmcli nm wifi off
é equivalente. Continue lendo se você ativar esporadicamente o Wi-Fi, mas desejar revertê-lo para desativado na reinicialização.
O estado sem fio é lembrado no arquivo /var/lib/NetworkManager/NetworkManager.state
. Para desativar Wi-Fi durante a inicialização, certifique-se de que a chave WirelessEnabled
estadias false
. Você pode fazer isso editando o script init do Network Manager ou usando o /etc/rc.local
truque abaixo. O comando que você precisa é:
sed s/^WirelessEnabled=true/WirelessEnabled=false/ -i /var/lib/NetworkManager/NetworkManager.state
rfkill block wifi
Coloque isso antes exit 0
(como descrito abaixo). O rfkill block wifi
comando ainda é necessário devido a uma corrida com a inicialização do Network Manager (NM). Depois que o NM é iniciado, as alterações no arquivo de estado não têm efeito.
(resposta antiga que envolve a edição de arquivo /etc/rc.local
com uma explicação do rfkill
comando)
Um pouco hacky, mas deve funcionar. Uma placa sem fio pode ser desativada usando o rfkill
comando Todos os dispositivos usados pelo rfkill podem ser mostrados usando rfkill list
. Saída de amostra:
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
Hard blocked
depende de uma configuração de hardware, por exemplo, um switch sem fio em um notebook. Soft blocked
pode ser controlado pelo sistema operacional (Ubuntu).
Como funciona? Ele não possui uma página de manual, a execução 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 apelido de wifi, consulte o código fonte do rfkill ).
Agora, se você deseja desativar as funções sem fio em tempo de inicialização, adicione o comando ao /etc/rc.local executando sudo nano /etc/rc.local
. Use as teclas de seta / teclas acima / abaixo da página para navegar até a linha anterior exit 0
e adicionar 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, pressione Ypara salvar e pressione Enterpara aceitar o nome do arquivo.
Se você decidir ativar o dispositivo mais tarde, execute: sudo rfkill unblock wifi
. Não esqueça de remover a linha do /etc/rc.local se você decidir usar a placa sem fio.
/etc/rc.local
pois o script é executado com permissões de root. É muito improvável que você possa desativar o wifi sem permissões de root. Se eu tentar rfkill block wifi
ou rfkill unblock wifi
receber, "Não é possível abrir o dispositivo de controle RFKILL: permissão negada".
$ rfkill block wifi
faz com que o miniaplicativo do NetworkManager exiba "A conexão sem fio está desativada" e $ iwconfig
a exibição Tx-Power=off
. $ rfkill unblock wifi
desfaz esse efeito.
/etc/rc.local
. Use isso:/bin/sleep 10 && rfkill block wifi
/var/lib/NetworkManager/NetworkManager.state
arquivo que persiste nas configurações, WirelessEnabled=false
é um deles. Vou postar na sua pergunta ..
A maneira mais fácil de desativar sua placa de rede sem fio é clicar com o botão direito do mouse no indicador NetworkManager (pequeno ícone no canto superior direito do painel) e desmarcar a Enable Wireless
. Isso desativa ( ifconfig wlan0 down
) a interface e não executa mais a verificação.
tlp
, leia a resposta completa.Todas as respostas para esta pergunta são bem antigas agora e não funcionam em versões mais recentes do Ubuntu que usam systemd. A resposta de froage funcionou para mim em 14.04, mas não em 16.04.
O Systemd usa systemd-rfkill.service
para salvar o estado do comutador rfkill durante o desligamento e restaurá-lo a cada inicialização.
Você precisa passar um parâmetro de linha de comando do kernel para restaurar o estado do switch rfkill em cada inicialização.
/etc/default/grub
com o seu editor de texto preferido.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ê pode adicioná-lo GRUB_CMDLINE_LINUX_DEFAULT
também. Qualquer um deles funciona. Veja esta pergunta para mais detalhes.Isso garantirá que o estado rfkill seja restaurado em cada inicialização. Certifique-se de desligar o bluetooth e o wifi antes de reiniciar.
tlp
:tlp 0.8-1
quais estão disponíveis nos repositórios 16.04. Após a atualização para o tlp 0.9-1
uso do linrunner ppa, TODOS os isssues foram resolvidos.Resposta original:
tlp
mascara / desativa systemd-rfkill.service
para "evitar conflitos e garantir o funcionamento adequado das opções de comutação de dispositivos de rádio do TLP" . ( Fonte-1 , Fonte-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 para RESTORE_DEVICE_STATE_ON_STARTUP
está desativada por padrão. Mas ativar essa opção não ajuda.
Mesmo depois de ativar a opção RESTORE_DEVICE_STATE_ON_STARTUP
, desativar o wifi e o bluetooth (usando rfkill block all
) e continuar reiniciando, de alguma forma o WiFi é ativado a cada 2 ou 3 de inicialização. Não há garantia de que, na próxima inicialização, o WiFi seja 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 é desativada por padrão. Ativá-lo também não funciona. Network Manger
mostra que o Wi-Fi está desativado, mas rfkill list
não mostra nenhum bloco flexível no Wi-Fi.
Nota: Eu li a linha
"Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below are ignored when this is enabled!"
.Desativei
RESTORE_DEVICE_STATE_ON_STARTUP
antes de ativarDEVICES_TO_DISABLE_ON_STARTUP
para evitar conflitos.
tlp-rdw
não funcionam conforme o esperado.tlp
usuários:tlp 0.9-1
usar o linrunner ppa.Resposta original:
Ativá DEVICES_TO_DISABLE_ON_STARTUP
-lo e configurá-lo para desativar o Bluetooth e o Wi-Fi pode funcionar para você. ( Funcionou para esta pessoa )
Esta pergunta aqui no askubuntu. É semelhante a uma resposta mais antiga para esta pergunta. Mas observe que eu mesmo não tentei. Isto pode ou não funcionar.
Outras fontes: systemd-rfkill , tlp-configuration
GRUB_CMDLINE_LINUX
e GRUB_CMDLINE_LINUX_DEFAULT
mais o sudo update-grub
comando (não mencionado) e não consegui fazê-lo funcionar no Pop_OS! 19.10 (que é baseado no Ubuntu 19.10). De acordo com systemctl status systemd-rfkill
, esse serviço já está sendo executado em toda inicialização e, como o valor padrão é 1
, não deve ser necessário esse esforço. Com base nas informações em man systemd-rfkill
, lembrar o estado do rádio "na inicialização antecipada" deve ser o comportamento padrão, o que me leva a acreditar que esse componente está de alguma forma quebrado.
Pessoalmente, uso o applet de gerenciamento de energia Jupiter para desativar o wireless no meu laptop, pois ele é controlado por um botão especial. Eu não acho que no repositório principal eu precisei adicionar um ppa de Andrew no Webupd8 para obtê-lo.
Espero que isto ajude.
Você poderia adicionar
ifconfig wlan0 down
para /etc/rc.local
, mas primeiro,
certifique-se de que, se você estiver usando o NetworkManager (tenho a versão 0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3), vá ao menu " Editar conexões " -> 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.
rfkill
.