Làm cách nào tôi có thể tắt radio của thẻ không dây theo mặc định?


11

Thẻ không dây PCI của máy tính để bàn của tôi luôn quét các mạng không dây có sẵn, nhưng tôi chỉ hiếm khi sử dụng nó. Tôi có thể tắt radio cho đến khi tôi cần không?

Câu trả lời:


4

Có ít nhất hai công việc Upstart ảnh hưởng đến trạng thái không dây mặc định:

  • /etc/init/rfkill-restore.confKhôi phục trạng thái khối mềm cho tất cả các bộ đàm về trạng thái tắt máy cuối cùng, như được ghi trong /var/lib/rfkill/saved-state.
  • /etc/init/network-manager.confkhởi động Trình quản lý mạng, từ đó khôi phục ý tưởng về trạng thái không dây từ đó /var/lib/NetworkManager/NetworkManager.state.

Nếu bạn nhìn vào hai cấu hình công việc đó, bạn sẽ thấy rằng chúng không có mối quan hệ tạm thời , có vẻ như là một lỗ hổng thiết kế đối với tôi. Tôi đoán điều kiện cuộc đua này hiếm khi là một vấn đề vì /etc/init/rfkill-restore.confđơn giản hơn nhiều và có ít điều kiện bắt đầu hơn.

Tất cả các giải pháp để thực thi mặc định tắt không dây mà tôi thấy đã thử sử dụng /etc/rc.local, bao gồm giải pháp "hiện đại" mà @Lekensteyn và @ rubo77 đã đưa ra. Thật không may, giải pháp đó không hiệu quả với tôi trên một trong hai máy tính xách tay mà tôi đã thử. Đây không phải là đặc biệt ngạc nhiên vì /etc/rc.local cũngcó mối quan hệ thời gian mà tôi có thể tìm đến một trong hai /etc/init/rfkill-restore.conf/etc/init/network-manager.conf. Ném vào một giấc ngủ dài /etc/rc.localtrước khi phát hành rfkill block wifilà một cách giải quyết xấu cho tình trạng lộn xộn của cuộc đua này, nhưng nó hoạt động nếu độ trễ đủ dài.

Một giải pháp tốt hơn sẽ là cho chúng tôi áp đặt các trạng thái mong muốn của mình vào /var/lib/rfkill/saved-state/var/lib/NetworkManager/NetworkManager.state trước khi hai công việc Upstart đó thậm chí được phép chạy. Chúng ta có thể đạt được điều này bằng cách tạo ra công việc Upstart của riêng mình. Trong thực tế, chúng ta sẽ cần hai tệp cấu hình công việc để đạt được thời gian chúng ta cần.

Cấu hình công việc đầu tiên của chúng tôi thực hiện các sửa đổi tập tin thực tế mà chúng tôi cần. Nó sẽ chạy càng sớm càng tốt và sẽ chỉ chạy một lần. Tạo /etc/init/radio-silence.confvới nội dung này:

# 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

Vì tôi thích im lặng vô tuyến khi máy tính xách tay của tôi khởi động, tôi chặn tất cả các bộ đàm, không chỉ là không dây, mà bạn có thể sửa đổi cái đầu tiên sedở trên để hạn chế tác động của công việc này đối với bất kỳ thiết bị không dây nào bạn muốn chặn mềm.

Cấu hình công việc thứ hai của chúng tôi chịu trách nhiệm đảm bảo rằng cả hai rfkill-restorenetwork-managercông việc sẽ không bắt đầu trước khi radio-silencehoàn thành sửa đổi tệp. Tạo /etc/init/radio-silence-wait.confnhư sau:

# 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

Với giải pháp này, tôi không còn thấy các vấn đề về tình trạng chủng tộc, mặc dù tôi chưa đề cập đến cuộc đua lý thuyết giữa rfkill-restorenetwork-manager.

Để biết thêm chi tiết về cách các công việc này phối hợp với nhau để đạt được mục tiêu tạm thời của chúng tôi, hãy tham khảo câu hỏi và câu trả lời của tôi, "Làm thế nào để tôi tạo một công việc Upstart duy nhất được đảm bảo hoàn thành trước khi hai công việc khác bắt đầu?"


7

Giải pháp "Hiện đại" bằng Trình quản lý mạng: chỉ cần bỏ chọn tùy chọn Kích hoạt không dây tại ứng dụng Trình quản lý mạng (KDE: Quản lý mạng). Lệnh nmcli nm wifi offtương đương. Tiếp tục đọc nếu bạn thỉnh thoảng bật Wi-Fi, nhưng muốn hoàn nguyên nó thành vô hiệu hóa khi khởi động lại.

Trạng thái không dây được ghi nhớ trong tệp /var/lib/NetworkManager/NetworkManager.state. Để tắt Wi-Fi khi khởi động, đảm bảo rằng phím WirelessEnabledvẫn ở false. Bạn có thể làm điều đó bằng cách chỉnh sửa tập lệnh init của Trình quản lý mạng hoặc bằng cách sử dụng /etc/rc.localmẹo bên dưới. Lệnh bạn cần là:

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

Đặt cái này trước exit 0(như được mô tả dưới đây). Các rfkill block wifilệnh vẫn còn cần thiết do một cuộc chạy đua với khởi động của Network Manager (NM). Khi NM đã bắt đầu, các thay đổi đối với tệp trạng thái không có hiệu lực.


(câu trả lời cũ liên quan đến chỉnh sửa tập tin /etc/rc.localvới giải thích về rfkilllệnh)

Một chút hacky, nhưng nó nên hoạt động. Một thẻ không dây có thể được vô hiệu hóa bằng cách sử dụng rfkilllệnh. Tất cả các thiết bị được sử dụng bởi rfkill có thể được hiển thị bằng cách sử dụng rfkill list. Đầu ra mẫu:

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

Hard blockedphụ thuộc vào cài đặt phần cứng, ví dụ: công tắc không dây trên máy tính xách tay. Soft blockedcó thể được điều khiển bởi HĐH (Ubuntu).

Làm thế nào nó hoạt động? Nó không có manpage, chạy rfkillcung cấp một văn bản trợ giúp trong trường hợp này:

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, bây giờ chúng ta có một nơi nào đó. Bạn cần chạy rfkill block wifibằng root để tắt thiết bị không dây. (wlan là bí danh của wifi, xem mã nguồn của rfkill ).

Bây giờ, nếu bạn muốn tắt các chức năng không dây khi khởi động, hãy thêm lệnh vào /etc/rc.local bằng cách chạy sudo nano /etc/rc.local. Sử dụng các phím mũi tên / phím lên / xuống trang để điều hướng đến dòng trước exit 0và thêm rfkill block wifi, để tệp kết thúc như thế này:

# By default, this script does nothing

rfkill block wifi
exit 0

Khi hoàn tất, nhấn Ctrl+ X, sau đó nhấn Yđể lưu nó và nhấn Enterđể chấp nhận tên tệp.

Nếu bạn quyết định kích hoạt thiết bị sau, hãy chạy : sudo rfkill unblock wifi. Đừng quên xóa dòng khỏi /etc/rc.local nếu bạn quyết định sử dụng thẻ không dây.


Cảm ơn. Tôi không hiểu tại sao, nhưng có vẻ như tôi không cần sử dụng sudo để rfkill hoạt động.
ændrük

1
Bạn không cần sudo trong /etc/rc.localkhi tập lệnh được chạy với quyền root. Rất khó có thể bạn có thể vô hiệu hóa wifi mà không có quyền root. Nếu tôi thử rfkill block wifihoặc rfkill unblock wifi, tôi nhận được "Không thể mở thiết bị điều khiển RFKILL: Quyền bị từ chối".
Lekensteyn

Trên cả ThinkPad X60 và máy tính để bàn của tôi có thẻ không dây PCI, việc chạy $ rfkill block wifikhiến applet NetworkManager hiển thị "Không dây bị tắt" và $ iwconfighiển thị Tx-Power=off. $ rfkill unblock wifihoàn tác hiệu ứng này
ændrük

1
Tôi đã giải quyết vấn đề này bằng một sự chậm trễ: Có vẻ như trong Ubuntu 14.04 bạn cần đợi vài giây trước khi tắt wifi /etc/rc.local. Sử dụng cái này thay thế:/bin/sleep 10 && rfkill block wifi
rubo77

1
@ rubo77 Ở đây (Arch Linux, Network Manager 0.9.8.10-3), tồn tại một /var/lib/NetworkManager/NetworkManager.statetệp vẫn tồn tại các cài đặt, WirelessEnabled=falselà một trong số đó. Tôi sẽ đăng trong câu hỏi của bạn ..
Lekensteyn

1

Cách dễ nhất để vô hiệu hóa thẻ không dây của bạn là nhấp chuột phải vào chỉ báo NetworkManager (biểu tượng nhỏ ở trên cùng bên phải trên bảng điều khiển) và bỏ chọn Enable Wireless. Điều này làm giảm ( ifconfig wlan0 down) giao diện và nó không thực hiện quét nữa.


2
Kiểm tra mục menu này không ảnh hưởng đến hành vi mặc định. Lần sau khi tôi bật máy tính, radio không dây sẽ hoạt động trở lại.
ændrük

1
Tại Ubuntu 14.04 của tôi, nó vẫn hoạt động như mong muốn sau khi khởi động lại nếu tôi bật nó trong applet của trình quản lý mạng
rubo77

1

Lưu ý: Nếu bạn sử dụng tlp, xin vui lòng đọc toàn bộ câu trả lời.

Tất cả các câu trả lời cho câu hỏi này đã khá cũ và không hoạt động trên các bản phát hành Ubuntu mới hơn sử dụng systemd. Câu trả lời của froage làm việc cho tôi vào ngày 14.04 nhưng không hoạt động vào ngày 16.04.

Systemd sử dụng systemd-rfkill.serviceđể lưu trạng thái chuyển đổi rfkill trong khi tắt máy và khôi phục nó trên mỗi lần khởi động.

Bạn phải truyền tham số dòng lệnh kernel để khôi phục trạng thái chuyển đổi rfkill trên mỗi lần khởi động.

  1. mở /etc/default/grubvới trình soạn thảo văn bản ưa thích của bạn.
  2. thêm systemd.restore_state=1làm tham số cho GRUB_CMDLINE_LINUX. Dòng đó nên đọc GRUB_CMDLINE_LINUX="systemd.restore_state=1". Bạn có thể thêm nó vào GRUB_CMDLINE_LINUX_DEFAULTlà tốt. Một trong số họ làm việc. Xem câu hỏi này để biết thêm chi tiết.

Điều này sẽ đảm bảo rằng trạng thái rfkill được khôi phục trên mỗi lần khởi động. Đảm bảo tắt bluetooth và wifi trước khi khởi động lại.


Các vấn đề với tlp:

Cập nhật: Những vấn đề này đã tlp 0.8-1có trong kho 16.04. Sau khi cập nhật để tlp 0.9-1sử dụng linrunner ppa, TẤT CẢ các vấn đề đã được giải quyết.

Câu trả lời gốc:

tlpmặt nạ / vô hiệu hóa systemd-rfkill.serviceđể "tránh xung đột và đảm bảo vận hành đúng các tùy chọn chuyển đổi thiết bị vô tuyến của TLP" . ( Nguồn-1 , Nguồn-2 )

Điều này có nghĩa là việc truyền tham số kernel sẽ không hiệu quả với bạn.

Đây là một đoạn nhỏ (xung quanh dòng số 195) từ tệp cấu hình mặc định của 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"
  • Như bạn có thể thấy tùy chọn RESTORE_DEVICE_STATE_ON_STARTUPbị tắt theo mặc định. Nhưng cho phép tùy chọn đó không giúp được gì.

    Ngay cả sau khi bạn bật tùy chọn RESTORE_DEVICE_STATE_ON_STARTUP , tắt wifi và bluetooth (sử dụng rfkill block all) và tiếp tục khởi động lại, bằng cách nào đó, WiFi vẫn được bật trên mỗi lần khởi động thứ 2 hoặc thứ 3. Không có gì đảm bảo rằng WiFi khởi động tiếp theo sẽ bị tắt. Đáng ngạc nhiên tlpquản lý để giữ bluetooth bị vô hiệu hóa trên mỗi khởi động.

  • Tương tự với tùy chọn thứ 2 trong đoạn trích, DEVICES_TO_DISABLE_ON_STARTUPcũng bị tắt theo mặc định. Kích hoạt nó cũng không hoạt động. Network Mangercho thấy WiFi bị vô hiệu hóa nhưng rfkill listkhông hiển thị bất kỳ khối mềm nào trên WiFi.

    Lưu ý: Tôi đã đọc các dòng "Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below are ignored when this is enabled!".

    Tôi đã vô hiệu hóa RESTORE_DEVICE_STATE_ON_STARTUPtrước khi cho phép DEVICES_TO_DISABLE_ON_STARTUPđể tránh xung đột.

  • Tương tự, các tùy chọn khác được cung cấp tlp-rdwkhông hoạt động như mong đợi.


Giải pháp cho tlpngười dùng:

Cập nhật: Cập nhật để tlp 0.9-1sử dụng ppa linrunner.

Câu trả lời gốc:

  1. Kích hoạt DEVICES_TO_DISABLE_ON_STARTUPvà cài đặt nó để tắt Bluetooth và WiFi có thể phù hợp với bạn. ( Nó hoạt động cho người này )

  2. Câu hỏi này ở đây trên Askubfox. Nó tương tự như một câu trả lời cũ hơn cho câu hỏi này. Nhưng xin lưu ý rằng tôi đã không thử bản thân mình. Nó có thể hoặc không thể làm việc.


Các nguồn khác: systemd-rfkill , tlp-configure



Tôi đã thử câu trả lời của bạn liên quan đến sửa đổi của cả hai GRUB_CMDLINE_LINUXGRUB_CMDLINE_LINUX_DEFAULTcộng với lệnh (không được đề cập) sudo update-grubvà tôi không thể làm cho nó hoạt động trong Pop_OS! 19.10 (dựa trên Ubuntu 19.10). Theo đó systemctl status systemd-rfkill, dịch vụ này đã được chạy trên mọi khởi động và, vì giá trị mặc định là 1, nên không cần nỗ lực này. Dựa trên thông tin tại man systemd-rfkill, việc nhớ trạng thái radio "lúc khởi động sớm" sẽ là hành vi mặc định, điều này khiến tôi tin rằng thành phần này bị hỏng.
Patrick Dark

0

Cá nhân tôi sử dụng Jupiter applet quản lý năng lượng để vô hiệu hóa không dây trên máy tính xách tay của tôi vì nó được điều khiển bằng một nút đặc biệt. Tôi không nghĩ là trong repo chính tôi đã phải thêm một ppa từ Andrew tại Webupd8 để có được nó.

Hi vọng điêu nay co ich.


0

Bạn có thể thêm

ifconfig wlan0 down

đến /etc/rc.local, nhưng trước tiên,

đảm bảo rằng, nếu bạn đang sử dụng NetworkManager (Tôi có phiên bản 0.8.4 ~ git.20110319t175609.d14809b-0ubuntu3), bạn hãy vào menu " Edit Connections " -> " không dây " tab, bấm vào kết nối, bấm vào nút " Chỉnh sửa " và đảm bảo rằng, trong tab " Không dây ", hộp kiểm " Kết nối tự động " KHÔNG được chọn.


1
Mặc dù điều này sẽ làm giảm giao diện, nhưng nó sẽ không tiết kiệm nhiều năng lượng như vô hiệu hóa radio bằng cách sử dụng rfkill.
gertvdijk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.