Відповіді:
Є щонайменше два завдання 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
.
Більш детально про те, як ці завдання працюють разом для досягнення нашої тимчасової мети, дивіться на моє запитання та відповідь: "Як створити завдання з одновиконним виконанням, яке гарантовано завершиться до початку двох інших завдань?"
"Сучасне" рішення за допомогою Менеджера мереж: просто зніміть прапорець увімкнено параметр 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, якщо ви вирішили використовувати бездротову карту.
/etc/rc.local
оскільки сценарій працює з кореневими дозволами. Навряд чи ви можете відключити Wi-Fi без дозволів root. Якщо я намагаюся rfkill block wifi
або rfkill unblock wifi
я отримую «Не вдається відкрити пристрій управління RFKILL: Дозвіл відмовлено».
$ rfkill block wifi
призводить до того, що аплет NetworkManager відображатиме "Бездротовий доступ вимкнено" та $ iwconfig
відображається Tx-Power=off
. $ rfkill unblock wifi
скасовує цей ефект.
/etc/rc.local
. Використовуйте це замість:/bin/sleep 10 && rfkill block wifi
/var/lib/NetworkManager/NetworkManager.state
файл, який зберігає налаштування, WirelessEnabled=false
є одним із таких. Я опублікую у вашому запитанні ..
Найпростіший спосіб відключити бездротову карту - це клацання правою кнопкою миші на індикаторі NetworkManager (невеликий значок у верхньому правому куті на панелі) та зніміть позначку Enable Wireless
. Це знижує ( ifconfig wlan0 down
) інтерфейс, і він більше не виконує сканування.
tlp
, будь ласка, прочитайте всю відповідь.Усі відповіді на це питання зараз досить старі і не працюють над новими версіями Ubuntu, які використовують systemd. Відповідь froage працювала для мене 14.04, але не працює 16.04.
Systemd використовує systemd-rfkill.service
для збереження стану перемикача rfkill під час відключення та відновлення його при кожному завантаженні.
Вам потрібно передати параметр командного рядка ядра, щоб відновити стан перемикача rfkill при кожному завантаженні.
/etc/default/grub
у вибраному текстовому редакторі.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.Оригінальний відповідь:
Увімкнення DEVICES_TO_DISABLE_ON_STARTUP
та налаштування його для відключення Bluetooth та WiFi може працювати для вас. ( Це працювало для цієї людини )
Це питання тут на 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
, запам'ятовування стану радіо "при ранньому завантаженні" повинно бути поведінкою за замовчуванням, що змушує мене вважати, що цей компонент якось порушений.
Ви можете додати
ifconfig wlan0 down
до /etc/rc.local
, але спочатку,
переконайтеся, що якщо ви використовуєте NetworkManager (у мене версія 0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3), ви переходите до меню " Редагувати з'єднання " -> " Безпроводова ", натисніть на з'єднання, натисніть " Змінити " , і переконайтеся, що на вкладці " Бездротовий " прапорець " Підключити автоматично " НЕ встановлено.
rfkill
.