Bagaimana saya bisa mematikan radio kartu nirkabel?

11

Kartu nirkabel PCI desktop saya selalu memindai jaringan nirkabel yang tersedia, tetapi saya jarang menggunakannya. Dapatkah saya mematikan radio sampai saya membutuhkannya?

ændrük
sumber

Jawaban:

4

Setidaknya ada dua pekerjaan pemula yang mempengaruhi status nirkabel default:

  • /etc/init/rfkill-restore.confmengembalikan status blok lunak untuk semua radio ke kondisi semula, seperti yang dicatat di /var/lib/rfkill/saved-state.
  • /etc/init/network-manager.confmemulai Network Manager yang pada gilirannya mengembalikan idenya tentang keadaan nirkabel /var/lib/NetworkManager/NetworkManager.state.

Jika Anda melihat dua konfigurasi pekerjaan itu, Anda akan menemukan bahwa mereka tidak memiliki hubungan temporal , yang tampaknya seperti cacat desain bagi saya. Saya menduga kondisi lomba ini jarang menjadi masalah karena /etc/init/rfkill-restore.confjauh lebih sederhana dan memiliki kondisi awal yang lebih sedikit.

Semua solusi untuk menegakkan default nirkabel-off yang pernah saya coba coba gunakan /etc/rc.local, termasuk solusi "modern" yang muncul dengan @Lekensteyn dan @ rubo77. Sayangnya, solusi itu tidak berfungsi untuk saya pada salah satu dari dua laptop yang saya coba. Ini tidak terlalu mengejutkan karena /etc/rc.local juga tidak memiliki hubungan temporal yang dapat saya temukan untuk salah satu dari /etc/init/rfkill-restore.confdan /etc/init/network-manager.conf. Melempar dalam tidur yang panjang /etc/rc.localsebelum mengeluarkan suatu rfkill block wifisolusi buruk untuk kekacauan kondisi balapan ini, tetapi bekerja jika penundaannya cukup lama.

Solusi yang lebih baik bagi kita untuk memaksakan keadaan yang kita inginkan di /var/lib/rfkill/saved-statedan /var/lib/NetworkManager/NetworkManager.state sebelum dua pekerjaan pemula itu bahkan diizinkan untuk dijalankan. Kita dapat mencapai ini dengan menciptakan pekerjaan pemula kami sendiri. Pada kenyataannya, kita akan membutuhkan dua file konfigurasi pekerjaan untuk mencapai waktu yang kita butuhkan.

Konfigurasi pekerjaan pertama kami melakukan modifikasi file aktual yang kami butuhkan. Ini akan berjalan sedini mungkin dan hanya akan berjalan sekali. Buat /etc/init/radio-silence.confdengan konten ini:

# 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

Karena saya lebih suka keheningan radio total ketika laptop saya mulai, saya soft block semua radio, tidak hanya nirkabel, tetapi Anda dapat memodifikasi yang pertama seddi atas untuk membatasi dampak pekerjaan ini untuk perangkat nirkabel mana pun yang Anda ingin soft block.

Konfigurasi pekerjaan kedua kami bertanggung jawab untuk memastikan tidak satu pun dari rfkill-restoredan network-managerpekerjaan akan dimulai sebelum radio-silencemenyelesaikan modifikasi file. Buat /etc/init/radio-silence-wait.confsebagai berikut:

# 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

Dengan solusi ini saya tidak lagi melihat masalah kondisi ras, meskipun saya belum membahas ras teoritis antara rfkill-restoredan network-manager.

Untuk perincian lebih lanjut tentang bagaimana pekerjaan ini bekerja bersama untuk mencapai tujuan temporal kami, lihat pertanyaan dan jawaban saya, "Bagaimana cara saya membuat pekerjaan baru dengan eksekusi tunggal yang dijamin selesai sebelum dua pekerjaan lainnya dimulai?"

berkeliaran
sumber
7

Solusi "Modern" menggunakan Network Manager: cukup hapus centang pada opsi Wireless Enabled di applet Network Manager (KDE: Network Management). Perintahnya nmcli nm wifi offsetara. Lanjutkan membaca jika Anda mengaktifkan Wi-Fi secara sporadis, tetapi ingin mengembalikannya ke dinonaktifkan saat reboot.

Status nirkabel diingat dalam file /var/lib/NetworkManager/NetworkManager.state. Untuk menonaktifkan Wi-Fi saat boot, pastikan kunci WirelessEnabledtetap menyala false. Anda dapat melakukannya dengan mengedit skrip init Network Manager, atau dengan menggunakan /etc/rc.localtrik di bawah ini. Perintah yang Anda butuhkan adalah:

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

Letakkan ini sebelumnya exit 0(seperti dijelaskan di bawah). The rfkill block wifiperintah masih diperlukan karena ras dengan startup dari Network Manager (NM). Setelah NM dimulai, perubahan pada file status tidak berpengaruh.


(jawaban lama yang melibatkan pengeditan file /etc/rc.localdengan penjelasan rfkillperintah)

Agak macet, tetapi seharusnya bisa. Kartu nirkabel dapat dinonaktifkan menggunakan rfkillperintah. Semua perangkat yang digunakan oleh rfkill dapat ditampilkan menggunakan rfkill list. Output sampel:

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

Hard blockedtergantung pada pengaturan perangkat keras, mis. sakelar nirkabel pada notebook. Soft blockeddapat dikontrol oleh OS (Ubuntu).

Bagaimana cara kerjanya? Tidak memiliki halaman manual, menjalankan rfkillmenyediakan teks bantuan dalam hal ini:

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, sekarang kita sampai di suatu tempat. Anda harus menjalankan rfkill block wifisebagai root untuk menonaktifkan perangkat nirkabel. (wlan adalah alias dari wifi, lihat kode sumber dari rfkill ).

Sekarang, jika Anda ingin menonaktifkan fungsi nirkabel saat boottime, tambahkan perintah ke /etc/rc.local dengan menjalankan sudo nano /etc/rc.local. Gunakan tombol panah / halaman atas / bawah untuk menavigasi ke baris sebelumnya exit 0dan menambahkan rfkill block wifi, sehingga file berakhir seperti ini:

# By default, this script does nothing

rfkill block wifi
exit 0

Setelah selesai, tekan Ctrl+ X, lalu tekan Yuntuk menyimpannya dan tekan Enteruntuk menerima nama file.

Jika Anda memutuskan untuk mengaktifkan perangkat kemudian, jalankan: sudo rfkill unblock wifi. Jangan lupa untuk menghapus saluran dari /etc/rc.local jika Anda memutuskan untuk menggunakan kartu nirkabel.

Lekensteyn
sumber
Terima kasih. Saya tidak mengerti mengapa, tetapi sepertinya saya tidak perlu menggunakan sudo agar rfkill bekerja.
ændrük
1
Anda tidak perlu sudo /etc/rc.localkarena skrip dijalankan dengan izin root. Sangat tidak mungkin Anda dapat menonaktifkan wifi tanpa izin root. Jika saya mencoba rfkill block wifiatau rfkill unblock wifi, saya mendapatkan "Tidak dapat membuka perangkat kontrol RFKILL: Izin ditolak".
Lekensteyn
Pada ThinkPad X60 dan desktop saya dengan kartu nirkabel PCI, menjalankan $ rfkill block wifimenyebabkan applet NetworkManager menampilkan "Nirkabel dinonaktifkan" dan $ iwconfiguntuk ditampilkan Tx-Power=off. $ rfkill unblock wifibatalkan efek ini.
ændrük
1
Saya menyelesaikannya dengan penundaan: Sepertinya di Ubuntu 14.04 Anda harus menunggu beberapa detik sebelum Anda menonaktifkan wifi di /etc/rc.local. Gunakan ini sebagai gantinya:/bin/sleep 10 && rfkill block wifi
rubo77
1
@ rubo77 Di Sini (Arch Linux, Network Manager 0.9.8.10-3), ada /var/lib/NetworkManager/NetworkManager.statefile yang tetap ada pengaturannya, WirelessEnabled=falseadalah salah satunya. Saya akan memposting pertanyaan Anda ..
Lekensteyn
1

Cara termudah untuk menonaktifkan kartu nirkabel Anda adalah klik kanan pada indikator NetworkManager (ikon kecil di kanan atas pada panel), dan hapus centang Enable Wireless. Ini menurunkan ( ifconfig wlan0 down) antarmuka dan tidak melakukan pemindaian lagi.

pengguna4124
sumber
2
Memeriksa item menu ini tidak memengaruhi perilaku default. Lain kali saya menyalakan komputer, radio nirkabel aktif kembali.
ændrük
1
Di Ubuntu 14.04 saya tetap seperti yang diinginkan setelah reboot jika saya mematikannya di applet manajer jaringan
rubo77
1

Catatan: Jika Anda menggunakan tlp, harap baca seluruh jawaban.

Semua jawaban untuk pertanyaan ini sudah cukup tua sekarang dan tidak berfungsi pada rilis Ubuntu yang lebih baru yang menggunakan systemd. Jawaban froage bekerja untuk saya pada 14,04 tetapi tidak bekerja pada 16,04.

Systemd menggunakan systemd-rfkill.serviceuntuk menyimpan status sakelar rfkill selama shutdown dan mengembalikannya pada setiap boot.

Anda harus melewati parameter baris perintah kernel untuk mengembalikan status rfkill switch pada setiap boot.

  1. buka /etc/default/grubdengan editor teks pilihan Anda.
  2. tambahkan systemd.restore_state=1sebagai parameter ke GRUB_CMDLINE_LINUX. Baris itu sekarang harus dibaca GRUB_CMDLINE_LINUX="systemd.restore_state=1". Anda dapat menambahkannya GRUB_CMDLINE_LINUX_DEFAULTjuga. Keduanya bekerja. Lihat pertanyaan ini untuk lebih jelasnya.

Ini akan memastikan bahwa status rfkill akan dipulihkan pada setiap boot. Pastikan untuk mematikan bluetooth dan wifi sebelum memulai kembali.


Masalah dengan tlp:

Pembaruan: Masalah-masalah ini hadir di tlp 0.8-1mana tersedia dalam repositori 16,04. Setelah memperbarui tlp 0.9-1menggunakan linrunner ppa, SEMUA emisi diselesaikan.

Jawaban asli:

tlpmask / nonaktifkan systemd-rfkill.serviceuntuk "menghindari konflik dan memastikan operasi yang tepat dari opsi peralihan perangkat radio TLP" . ( Sumber-1 , Sumber-2 )

Ini berarti melewatkan parameter kernel tidak akan bekerja untuk Anda.

Berikut ini adalah potongan kecil (sekitar baris no. 195) dari file konfigurasi default 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"
  • Seperti yang Anda lihat opsi untuk RESTORE_DEVICE_STATE_ON_STARTUPdinonaktifkan secara default. Tetapi mengaktifkan opsi itu tidak membantu.

    Bahkan setelah Anda mengaktifkan opsi untuk RESTORE_DEVICE_STATE_ON_STARTUP , menonaktifkan wifi dan bluetooth (menggunakan rfkill block all) dan terus restart, entah bagaimana WiFi diaktifkan pada setiap boot ke-2 atau ke-3. Tidak ada jaminan bahwa pada boot berikutnya WiFi akan dinonaktifkan. Anehnya tlpmengelola untuk menonaktifkan Bluetooth pada setiap boot.

  • Hal yang sama berlaku untuk opsi ke-2 dalam cuplikan DEVICES_TO_DISABLE_ON_STARTUP, yang juga dinonaktifkan secara default. Mengaktifkannya juga tidak berfungsi. Network Mangermenunjukkan bahwa WiFi dinonaktifkan tetapi rfkill listtidak menunjukkan blok lunak pada WiFi.

    Catatan: Saya sudah membaca baris "Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below are ignored when this is enabled!".

    Saya menonaktifkan RESTORE_DEVICE_STATE_ON_STARTUPsebelum mengaktifkan DEVICES_TO_DISABLE_ON_STARTUPuntuk menghindari konflik.

  • Demikian pula opsi lain yang disediakan tlp-rdwtidak berfungsi seperti yang diharapkan.


Solusi untuk tlppengguna:

Pembaruan: Perbarui untuk tlp 0.9-1menggunakan linrunner ppa.

Jawaban asli:

  1. Mengaktifkan DEVICES_TO_DISABLE_ON_STARTUPdan mengaturnya untuk menonaktifkan Bluetooth dan WiFi dapat bekerja untuk Anda. ( Ini berlaku untuk orang ini )

  2. Pertanyaan ini di sini di askubuntu. Ini mirip dengan jawaban yang lebih lama untuk pertanyaan ini. Tetapi harap dicatat bahwa saya belum mencobanya sendiri. Mungkin berhasil atau tidak.


Sumber lain: systemd-rfkill , tlp-configuration


Manoj
sumber
Saya mencoba jawaban Anda yang melibatkan modifikasi keduanya GRUB_CMDLINE_LINUXdan GRUB_CMDLINE_LINUX_DEFAULTditambah perintah (tidak disebutkan) sudo update-grubdan saya tidak bisa membuatnya bekerja di Pop_OS! 19.10 (yang didasarkan pada Ubuntu 19.10). Menurutnya systemctl status systemd-rfkill, layanan ini sudah dijalankan pada setiap boot dan, karena nilai defaultnya 1, tidak perlu ada upaya ini. Berdasarkan info di man systemd-rfkill, mengingat status radio "saat boot awal" harus menjadi perilaku default, yang membuat saya percaya bahwa komponen ini entah bagaimana rusak.
Patrick Dark
0

Secara pribadi saya menggunakan Jupiter applet manajemen daya untuk menonaktifkan nirkabel di laptop saya karena dikendalikan oleh tombol khusus. Saya tidak berpikir ada di repo utama saya harus menambahkan ppa dari Andrew di Webupd8 untuk mendapatkannya.

Semoga ini membantu.

Allan
sumber
0

Anda bisa menambahkan

ifconfig wlan0 down

untuk /etc/rc.local, tetapi pertama-tama,

pastikan bahwa, jika Anda menggunakan NetworkManager (saya memiliki versi 0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3), Anda masuk ke menu " Edit Koneksi " -> tab " Nirkabel ", klik pada koneksi, klik " Edit " , dan pastikan bahwa, di tab " Nirkabel ", kotak centang " Sambungkan Secara Otomatis " TIDAK dicentang.

waltinator
sumber
1
Meskipun ini akan menurunkan antarmuka, itu tidak akan menghemat daya sebanyak menonaktifkan penggunaan radio rfkill.
gertvdijk