Как я могу оставить радио беспроводной карты выключенным по умолчанию?

Беспроводная карта PCI моего настольного компьютера всегда сканирует доступные беспроводные сети, но я использую ее редко. Могу ли я оставить радио выключенным, пока оно мне не понадобится?

11
задан 2 July 2014 в 04:20

6 ответов

Существует по крайней мере два Новомодных задания, которые влияют на беспроводное состояние по умолчанию:

  • /etc/init/rfkill-restore.conf восстанавливает мягкое состояние блока для всех радио к тому, в чем они были наконец завершением работы, как зарегистрировано /var/lib/rfkill/saved-state.
  • /etc/init/network-manager.conf запускает Администратора сети, который в свою очередь восстанавливает его идею беспроводного состояния от /var/lib/NetworkManager/NetworkManager.state.

При рассмотрении тех двух конфигураций задания, Вы найдете, что у них нет временных отношений, которые походят на недостаток дизайна мне. Я предполагаю, что это состояние состязания редко является проблемой потому что /etc/init/rfkill-restore.conf намного более просто и имеет, меньше запускают условия.

Все решения осуществления беспроводной связи - от значения по умолчанию, которое я видел попытку использовать /etc/rc.local, включая "современное" решение, которое предложили @Lekensteyn и @rubo77. К сожалению, то решение не работает на меня ни на одном из двух ноутбуков, которые я попробовал. Это не особенно удивительно потому что /etc/rc.local также не имеет никаких временных отношений, из которых я могу найти к любому из /etc/init/rfkill-restore.conf и /etc/init/network-manager.conf. Добавление длинного сна в /etc/rc.local до издания rfkill block wifi ужасное обходное решение для этой путаницы состояния состязания, но она работает, если задержка является достаточно длительной.

Лучшее решение состояло бы в том, чтобы мы наложили наши требуемые состояния в /var/lib/rfkill/saved-state и /var/lib/NetworkManager/NetworkManager.state прежде чем тем двум Новомодным заданиям даже разрешают работать. Мы можем достигнуть этого путем создания нашего собственного Новомодного задания. На самом деле нам будут нужны два конфигурационных файла задания для достижения синхронизации, в которой мы нуждаемся.

Наша первая конфигурация задания делает фактические модификации файла, в которых мы нуждаемся. Это будет работать как можно раньше и будет только работать однажды. Создать /etc/init/radio-silence.conf с этим содержанием:

# 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

Поскольку я предпочитаю общую радио-тишину, когда мой ноутбук запускается, я мягкий блок все радио, не только беспроводная связь, но и можно изменить первое sed в вышеупомянутом для ограничения влияния этого задания на то, какой бы ни беспроводные устройства Вы желаете к мягкому блоку.

Наша конфигурация второй работы не ответственна за обеспечение этого ни один из rfkill-restore и network-manager задания запустятся прежде radio-silence завершил модификации файла. Создать /etc/init/radio-silence-wait.conf следующим образом:

# 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

С этим решением я больше не вижу проблем состояния состязания, хотя я не обратился к теоретической гонке между rfkill-restore и network-manager.

Для большего количества детали о том, как эти задания сотрудничают для достижения нашей временной цели, обратитесь к моему вопросу и ответу, "Как я создаю Новомодное задание единственного выполнения, которое, как гарантируют, будет завершаться, прежде чем два других задания начнутся?"

4
ответ дан 2 July 2014 в 04:20

Самый простой способ отключить беспроводную карту - щелкнуть правой кнопкой мыши индикатор NetworkManager (маленький значок в правом верхнем углу панели) и снять флажок Enable Wireless. Это разрушает (ifconfig wlan0 down) интерфейс и больше не выполняет сканирование.

0
ответ дан 2 July 2014 в 04:20

Лично я использую Jupiter апплет управления питанием, чтобы отключить беспроводную связь на моем ноутбуке, так как она управляется специальной кнопкой. Я не думаю, что в основном репо я должен был добавить ppa от Эндрю в Webupd8 , чтобы получить его.

Надеюсь, это поможет.

0
ответ дан 2 July 2014 в 04:20

Вы можете добавить

ifconfig wlan0 down

к /etc/rc.local, но сначала

убедитесь, что, если вы используете NetworkManager (у меня версия 0.8. 4 ~ git.20110319t175609.d14809b-0ubuntu3), вы переходите в меню « Редактировать соединения » -> « Беспроводная », нажмите на соединение, нажмите « Редактировать [ 118] ", и убедитесь, что на вкладке" Wireless "флажок" Автоматически подключаться "НЕ установлен.

0
ответ дан 2 July 2014 в 04:20

«Современное» решение с использованием Network Manager: просто снимите флажок Wireless Enabled в апплете Network Manager (KDE: Управление сетью). Команда nmcli nm wifi off эквивалентна. Продолжайте чтение, если вы время от времени включаете Wi-Fi, но хотите перезагрузить его при перезагрузке.

Состояние беспроводной связи запоминается в файле /var/lib/NetworkManager/NetworkManager.state. Чтобы отключить Wi-Fi при загрузке, убедитесь, что ключ WirelessEnabled остается на false. Вы можете сделать это, отредактировав сценарий инициализации Network Manager или воспользовавшись уловкой /etc/rc.local ниже. Вам нужна команда:

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

Поставьте это перед exit 0 (как описано ниже). Команда rfkill block wifi все еще необходима из-за гонки с запуском Network Manager (NM). После запуска NM изменения в файле состояния не действуют.


(старый ответ, который включает редактирование файла /etc/rc.local с объяснением команды rfkill)

Немного хакерски, но это должно сработать. Беспроводная карта может быть отключена с помощью команды rfkill. Все устройства, используемые rfkill, могут быть показаны с помощью rfkill list. Пример вывода:

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

Hard blocked зависит от аппаратной настройки, например, беспроводной переключатель на ноутбуке. Soft blocked может управляться ОС (Ubuntu).

Как это работает? У него нет man-страницы, в этом случае команда rfkill предоставляет текст справки:

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

Ах, теперь мы кое-что получили. Вам нужно запустить rfkill block wifi от имени пользователя root, чтобы отключить беспроводное устройство. (wlan - это псевдоним wifi, см. исходный код из rfkill ).

Теперь, если вы хотите отключить беспроводные функции во время загрузки, добавьте команду в /etc/rc.local, выполнив sudo nano /etc/rc.local. С помощью клавиш со стрелками / клавиш вверх / вниз страницы перейдите к строке перед exit 0 и добавьте rfkill block wifi, чтобы конец файла был таким:

# By default, this script does nothing

rfkill block wifi
exit 0

Когда закончите, нажмите Ctrl + X , затем нажмите Y , чтобы сохранить его, и нажмите Enter , чтобы принять имя файла.

Если вы решите активировать устройство позже, запустите: sudo rfkill unblock wifi. Не забудьте удалить строку из /etc/rc.local, если вы решите использовать беспроводную карту.

0
ответ дан 2 July 2014 в 04:20

Примечание. Если вы используете tlp, прочитайте весь ответ.

Все ответы на этот вопрос уже устарели и не работают в новых версиях Ubuntu, использующих systemd. Ответ Froage работал для меня 14.04, но не работает 16.04.

Systemd использует systemd-rfkill.service для сохранения состояния переключателя rfkill во время выключения и восстановления его при каждой загрузке.

Вы должны передавать параметр командной строки ядра для восстановления состояния переключателя rfkill при каждой загрузке.

  1. откройте /etc/default/grub в предпочитаемом вами текстовом редакторе.
  2. добавить systemd.restore_state=1 в качестве параметра к GRUB_CMDLINE_LINUX. Эта строка должна теперь читать GRUB_CMDLINE_LINUX="systemd.restore_state=1". Вы также можете добавить его в GRUB_CMDLINE_LINUX_DEFAULT. Любой из них работает. См. Этот вопрос для более подробной информации.

Это обеспечит восстановление состояния rfkill при каждой загрузке. Обязательно выключите Bluetooth и Wi-Fi перед перезапуском.


Проблемы с tlp:

Обновление: эти проблемы присутствовали в tlp 0.8-1 который доступен в 16.04 репозиториях. После обновления до tlp 0.9-1 с использованием linrunner ppa, ВСЕ были решены.

Первоначальный ответ:

tlp маскирует / отключает systemd-rfkill.service - ", чтобы избежать конфликтов и обеспечить правильную работу опций переключения радиоустройств TLP ". ( Source-1 , Source-2 )

Это означает, что передача параметра ядра не будет работать для вас.

Вот небольшой фрагмент (около строки 195) из стандартного файла конфигурации 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"
  • Как видите, опция RESTORE_DEVICE_STATE_ON_STARTUP по умолчанию отключена. Но включение этой опции не помогает.

    Даже после того, как вы включите опцию RESTORE_DEVICE_STATE_ON_STARTUP, отключите Wi-Fi и Bluetooth (используя rfkill block all) и продолжите перезапуск, каким-то образом WiFi включается при каждой 2-й или 3-й загрузке. Нет гарантии, что при следующей загрузке WiFi будет отключен. Удивительно, но tlp удается отключить Bluetooth при каждой загрузке.

  • То же самое относится ко второму варианту во фрагменте, DEVICES_TO_DISABLE_ON_STARTUP, который также отключен по умолчанию. Включение этого также не работает. Network Manger показывает, что WiFi отключен, но rfkill list не показывает никаких программных блоков в WiFi.

    Примечание: я прочитал строку "Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below are ignored when this is enabled!".

    Я отключил RESTORE_DEVICE_STATE_ON_STARTUP, прежде чем включить DEVICES_TO_DISABLE_ON_STARTUP, чтобы избежать конфликтов.

  • Точно так же другие опции tlp-rdw не работают должным образом.


Решение для tlp пользователей:

Обновление: обновление до tlp 0.9-1 с использованием linrunner ppa.

Оригинальный ответ:

  1. Включение DEVICES_TO_DISABLE_ON_STARTUP и настройка его на отключение Bluetooth и WiFi могут работать для вас. ( Это сработало для этого человека )

  2. Этот вопрос здесь, на Askubuntu. Это похоже на более старый ответ на этот вопрос. Но учтите, что я сам не пробовал. Это может или не может работать.


Другие источники: systemd-rfkill , tlp-configuration


0
ответ дан 2 July 2014 в 04:20

Другие вопросы по тегам:

Похожие вопросы: