Як я можу за умовчанням вимкнути радіо бездротової картки?


11

Бездротова карта PCI мого робочого столу завжди сканує доступність бездротових мереж, але я її рідко використовую. Чи можу я утримувати радіо відключеним, поки мені це не потрібно?

Відповіді:


4

Є щонайменше два завдання Upstart, які впливають на стан бездротового зв'язку за замовчуванням:

  • /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 до того, як ці два завдання Upstart навіть будуть дозволені до запуску. Ми можемо досягти цього, створивши власну роботу Upstart. Насправді нам знадобляться два файли конфігурації роботи, щоб досягти потрібних нам термінів.

Наша перша конфігурація завдання робить фактичні зміни файлів, які нам потрібні. Він запуститься якомога раніше і запуститься лише один раз. Створіть за /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.

Більш детально про те, як ці завдання працюють разом для досягнення нашої тимчасової мети, дивіться на моє запитання та відповідь: "Як створити завдання з одновиконним виконанням, яке гарантовано завершиться до початку двох інших завдань?"


7

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

Стан бездротового зв'язку запам'ятовується у файлі /var/lib/NetworkManager/NetworkManager.state. Щоб вимкнути Wi-Fi під час завантаження, переконайтесь, що ключ WirelessEnabledзалишається на false. Це можна зробити, відредагувавши сценарій init у Менеджері мережі або скориставшись /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).

Як це працює? У ній немає сторінки, запущена 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 є псевдонімом Wi - Fi, см вихідний код з 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, якщо ви вирішили використовувати бездротову карту.


Спасибі. Я не розумію чому, але, схоже, мені не потрібно використовувати sudo для rfkill для роботи.
ændrük

1
Вам не потрібен sudo, /etc/rc.localоскільки сценарій працює з кореневими дозволами. Навряд чи ви можете відключити Wi-Fi без дозволів root. Якщо я намагаюся rfkill block wifiабо rfkill unblock wifiя отримую «Не вдається відкрити пристрій управління RFKILL: Дозвіл відмовлено».
Лекенштейн

Як на моєму ThinkPad X60, так і на моєму робочому столі з бездротовою карткою PCI, запуску $ rfkill block wifiпризводить до того, що аплет NetworkManager відображатиме "Бездротовий доступ вимкнено" та $ iwconfigвідображається Tx-Power=off. $ rfkill unblock wifiскасовує цей ефект.
ændrük

1
Я вирішив це із запізненням: Схоже, що в Ubuntu 14.04 вам потрібно зачекати кілька секунд, перш ніж вимкнути Wi-Fi /etc/rc.local. Використовуйте це замість:/bin/sleep 10 && rfkill block wifi
rubo77

1
@ rubo77 Тут (Arch Linux, Менеджер мережі 0.9.8.10-3) існує /var/lib/NetworkManager/NetworkManager.stateфайл, який зберігає налаштування, WirelessEnabled=falseє одним із таких. Я опублікую у вашому запитанні ..
Lekensteyn

1

Найпростіший спосіб відключити бездротову карту - це клацання правою кнопкою миші на індикаторі NetworkManager (невеликий значок у верхньому правому куті на панелі) та зніміть позначку Enable Wireless. Це знижує ( ifconfig wlan0 down) інтерфейс, і він більше не виконує сканування.


2
Перевірка цього пункту меню не впливає на поведінку за замовчуванням. Наступного разу, коли я включаю комп’ютер, бездротове радіо знову активоване.
ændrük

1
У моєму Ubuntu 14.04 він залишається за бажанням після перезавантаження, якщо я
включу

1

Примітка. Якщо ви використовуєте 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" . ( Джерело-1 , Джерело-2 )

Це означає, що передача параметра ядра вам не допоможе.

Ось невеликий фрагмент (близько рядка 195) з файлу конфігурації за замовчуванням ( /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) та продовжувати перезапуск, якимось чином Wi-Fi буде ввімкнено під час кожного 2-го чи 3-го завантаження. Немає гарантій, що при наступному завантаженні Wi-Fi буде відключений. Дивно 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використання ppa linrunner.

Оригінальний відповідь:

  1. Увімкнення DEVICES_TO_DISABLE_ON_STARTUPта налаштування його для відключення Bluetooth та WiFi може працювати для вас. ( Це працювало для цієї людини )

  2. Це питання тут на askubuntu. Це схоже на більш стару відповідь на це питання. Але зауважте, що я сам цього не пробував. Це може бути, а може і не працювати.


Інші джерела: systemd-rfkill , tlp-конфігурація



Я спробував вашу відповідь, що стосується модифікацій обох GRUB_CMDLINE_LINUXта GRUB_CMDLINE_LINUX_DEFAULTплюс (не згаданої) sudo update-grubкоманди, і я не зміг змусити її працювати в Pop_OS! 19.10 (в основі якої лежить Ubuntu 19.10). Відповідно systemctl status systemd-rfkill, ця послуга вже запускається при кожному завантаженні, і, оскільки значення за замовчуванням є 1, у цьому не повинно бути необхідності. Виходячи з інформації на man systemd-rfkill, запам'ятовування стану радіо "при ранньому завантаженні" повинно бути поведінкою за замовчуванням, що змушує мене вважати, що цей компонент якось порушений.
Патрік Темний

0

Особисто я використовую аппарат управління живленням Юпітера, щоб відключити бездротовий зв'язок на своєму ноутбуці, оскільки це контролюється спеціальною кнопкою. Я не думаю, що це в основному репо, я повинен був додати ppa від Ендрю в Webupd8, щоб отримати його.

Сподіваюсь, це допомагає.


0

Ви можете додати

ifconfig wlan0 down

до /etc/rc.local, але спочатку,

переконайтеся, що якщо ви використовуєте NetworkManager (у мене версія 0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3), ви переходите до меню " Редагувати з'єднання " -> " Безпроводова ", натисніть на з'єднання, натисніть " Змінити " , і переконайтеся, що на вкладці " Бездротовий " прапорець " Підключити автоматично " НЕ встановлено.


1
Хоча це знизить інтерфейс, це не заощадить стільки енергії, скільки відключення використання радіо rfkill.
gertvdijk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.