ฉันจะปิดวิทยุของการ์ดไร้สายตามค่าเริ่มต้นได้อย่างไร


11

การ์ดไร้สาย PCI บนเดสก์ท็อปของฉันสแกนหาเครือข่ายไร้สายที่มีอยู่เสมอ แต่ฉันไม่ค่อยได้ใช้มัน ฉันสามารถปิดวิทยุไว้จนกว่าจะต้องการได้หรือไม่

คำตอบ:


4

มีงานพุ่งพรวดอย่างน้อยสองงานที่ส่งผลต่อสถานะไร้สายเริ่มต้น:

  • /etc/init/rfkill-restore.conf/var/lib/rfkill/saved-stateคืนรัฐบล็อกนุ่มสำหรับวิทยุทุกสิ่งที่พวกเขาอยู่ที่ปิดสุดท้ายที่บันทึกไว้ใน
  • /etc/init/network-manager.confเริ่ม Network Manager ซึ่งจะคืนความคิดของสถานะไร้สายจาก/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 สองงานนั้นจะได้รับอนุญาตให้ทำงาน เราสามารถบรรลุเป้าหมายนี้ได้โดยการสร้างงานพุ่งพรวดของเราเอง อันที่จริงแล้วเราจะต้องมีไฟล์กำหนดค่างานสองไฟล์เพื่อให้ได้ตามเวลาที่เราต้องการ

การกำหนดค่างานแรกของเราทำการแก้ไขไฟล์จริงที่เราต้องการ มันจะทำงานเร็วที่สุดและจะทำงานเพียงครั้งเดียวเท่านั้น สร้าง/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

ตามที่ฉันต้องการเงียบวิทยุทั้งหมดเมื่อแล็ปท็อปของฉันเริ่มฉัน soft block วิทยุทั้งหมดไม่เพียง แต่ไร้สาย แต่คุณสามารถแก้ไขครั้งแรกsedในข้างต้นเพื่อ จำกัด ผลกระทบของงานนี้ต่ออุปกรณ์ไร้สายที่คุณต้องการ soft block

การกำหนดค่างานที่สองของเรามีหน้าที่รับผิดชอบในการทำให้มั่นใจว่าไม่มีงานใด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-restorenetwork-manager

สำหรับรายละเอียดเพิ่มเติมว่างานเหล่านี้ทำงานร่วมกันอย่างไรเพื่อให้บรรลุเป้าหมายทางโลกโปรดอ้างอิงคำถามและคำตอบของฉัน"ฉันจะสร้างงาน Upstart ที่ดำเนินการเพียงครั้งเดียวได้อย่างไร


7

โซลูชัน "ทันสมัย" โดยใช้ตัวจัดการเครือข่าย: เพียงยกเลิกการเลือกตัวเลือกเปิดใช้งานไร้สายที่แอปเพล็ตตัวจัดการเครือข่าย (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คำสั่งยังคงเป็นสิ่งจำเป็นเนื่องจากการแข่งขันที่มีการเริ่มต้นของการจัดการเครือข่าย (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)

มันทำงานยังไง? มันไม่มี manpage การรัน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เป็นรูทเพื่อปิดการใช้งานอุปกรณ์ไร้สาย (wlan เป็นนามแฝงของ wifi ให้ดูซอร์สโค้ดของrfkill )

ตอนนี้ถ้าคุณต้องการที่จะปิดการใช้งานฟังก์ชั่นไร้สายที่ boottime เพิ่มคำสั่งเพื่อ /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เพราะสคริปต์ทำงานด้วยการอนุญาตรูท เป็นไปได้ยากมากที่คุณจะสามารถปิดใช้งาน wifi โดยไม่ได้รับอนุญาตจากรูท ถ้าฉันลองrfkill block wifiหรือrfkill unblock wifiฉันได้รับ "ไม่สามารถเปิดอุปกรณ์ควบคุม RFKILL: การอนุญาตถูกปฏิเสธ"
Lekensteyn

ทั้ง ThinkPad X60 และสก์ท็อปของฉันกับการ์ดไร้สาย PCI ทำงานของฉัน$ rfkill block wifiสาเหตุ NetworkManager แอปเพล็เพื่อแสดง "ไร้สายให้คนพิการ" และการแสดงผล$ iwconfig ยกเลิกผลกระทบนี้ Tx-Power=off$ rfkill unblock wifi
ændrük

1
ฉันจะแก้ไขมันมีความล่าช้า: ดูเหมือนว่าใน Ubuntu 14.04 /etc/rc.localคุณจะต้องรอวินาทีก่อนที่จะปิดการใช้งานอินเตอร์เน็ตไร้สายใน ใช้สิ่งนี้แทน:/bin/sleep 10 && rfkill block wifi
rubo77

1
@ rubo77 ที่นี่ (Arch Linux, Network Manager 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 ของฉันยังคงปิดอยู่ตามที่ต้องการหลังจากรีบูตถ้าฉันเปิดใช้งานในตัวจัดการเครือข่ายแอปเพล็ต
rubo77

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 ได้รับการกู้คืนในการบู๊ตแต่ละครั้ง ตรวจสอบให้แน่ใจว่าปิดบลูทู ธ และ wifi ก่อนที่จะรีสตาร์ท


ปัญหาเกี่ยวกับtlp:

อัปเดต: ปัญหาเหล่านี้มีอยู่ในtlp 0.8-1ที่เก็บ 16.04 แห่ง หลังจากอัปเดตเป็นtlp 0.9-1ใช้ linrunner ppa แล้วผู้ออกทั้งหมดจะถูกแก้ไข

คำตอบเดิม:

tlpมาสก์ / ปิดการใช้systemd-rfkill.serviceเพื่อ"ความขัดแย้งและความมั่นใจหลีกเลี่ยงการดำเนินการที่เหมาะสมของตัวเลือกการเปลี่ยนอุปกรณ์วิทยุ TLP ของ" ( ที่มา -1 , ที่มา 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 ปิดการใช้งาน wifi และบลูทู ธ (โดยใช้rfkill block all) และเริ่มการทำงานใหม่อย่างต่อเนื่อง ไม่มีการรับประกันว่าในการบูต WiFi ครั้งต่อไปจะถูกปิดการใช้งาน น่าแปลกใจที่ tlpจัดการให้ปิดการใช้งานบลูทู ธ ในทุก ๆ การบู๊ต

  • กันไปสำหรับตัวเลือกที่ 2 ในตัวอย่าง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และการตั้งค่าให้ปิดการใช้งานบลูทู ธ และ WiFi อาจใช้งานได้สำหรับคุณ (ใช้งานได้กับบุคคลนี้ )

  2. คำถามนี้ที่นี่ใน askubuntu มันคล้ายกับคำตอบเก่าสำหรับคำถามนี้ แต่โปรดทราบว่าฉันไม่ได้ลองด้วยตัวเอง อาจหรือไม่ทำงาน


แหล่งข้อมูลอื่น ๆ : systemd-rfkill , tlp-configuration



ฉันลองคำตอบของคุณเกี่ยวกับการแก้ไขทั้ง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จดจำสถานะวิทยุ "เมื่อเริ่มต้นระบบ" ควรเป็นพฤติกรรมเริ่มต้นซึ่งทำให้ฉันเชื่อว่าองค์ประกอบนี้เสียอย่างใด
Patrick Dark

0

ส่วนตัวฉันใช้Jupiterแอปเพล็ตการจัดการพลังงานเพื่อปิดใช้งานไร้สายบนแล็ปท็อปของฉันเพราะมันถูกควบคุมโดยปุ่มพิเศษ ฉันไม่คิดว่าอยู่ใน repo หลักฉันต้องเพิ่ม ppa จาก Andrew ที่Webupd8เพื่อรับมัน

หวังว่านี่จะช่วยได้


0

คุณสามารถเพิ่ม

ifconfig wlan0 down

ถึง/etc/rc.localแต่ก่อน

ตรวจสอบให้แน่ใจว่าถ้าคุณใช้ NetworkManager (ฉันมีรุ่น 0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3) คุณไปที่เมนู " แก้ไขการเชื่อมต่อ " -> "แท็บไร้สาย " คลิกที่การเชื่อมต่อคลิก " แก้ไข " และตรวจสอบให้แน่ใจว่าในแท็บ " ไร้สาย " ช่องทำเครื่องหมาย" เชื่อมต่ออัตโนมัติ " จะไม่ถูกตรวจสอบ


1
rfkillในขณะนี้จะนำมาลงเฟซก็จะไม่บันทึกเป็นพลังงานมากที่สุดเท่าที่ปิดการใช้งานวิทยุโดยใช้
gertvdijk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.