如何默认关闭无线网卡的无线电?
我的桌面PCI无线网卡一直在扫描可用的无线网络,但我很少使用它。 在我需要之前,我可以关闭收音机吗?
至少有两个影响默认无线状态的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
找到的时间关系 。 在发布rfkill block wifi
之前在/etc/rc.local
中长时间睡眠是这种竞争条件混乱的一个丑陋的解决方法,但是如果延迟足够长则它可以工作。
在这两个Upstart作业甚至被允许运行之前 ,我们可以在/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
当我的笔记本电脑启动时,我更喜欢完全无线电静音,我软禁止所有无线电,而不仅仅是无线,但您可以修改上面的第一个sed
,以限制此作业对您希望软阻塞的无线设备的影响。
我们的第二个作业配置负责确保在radio-silence
完成文件修改之前, rfkill-restore
和network-manager
作业都不会启动。 创建/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
之间的理论竞争。
有关这些作业如何协同工作以实现我们的时间目标的更多详细信息,请参阅我的问题和答案, “如何创建单个执行的Upstart作业,保证在其他两个作业开始之前完成?”
使用网络管理器的“现代”解决方案:只需取消选中网络管理器小程序(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
之前放置它(如下所述)。 由于与网络管理器(NM)的启动竞争,仍然需要rfkill block wifi
命令。 NM启动后,对状态文件的更改无效。
(旧答案涉及编辑文件/etc/rc.local
并附有rfkill
命令的说明)
有点hacky,但它应该工作。 可以使用rfkill
命令禁用无线卡。 rfkill使用的所有设备都可以使用rfkill list
。 样本输出:
0: phy0: Wireless LAN Soft blocked: no Hard blocked: no
Hard blocked
取决于硬件设置,例如笔记本电脑上的无线开关。 Soft blocked
可以由OS(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: all wifi wlan bluetooth uwb ultrawideband wimax wwan gps fm
啊,现在我们到了某个地方。 您需要以root身份运行rfkill block wifi
以禁用无线设备。 (wlan是wifi的别名,请参阅rfkill 的源代码 )。
现在,如果要在启动时禁用无线function,请通过运行sudo nano /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删除该行。
禁用无线网卡的最简单方法是右键单击NetworkManager指示灯(面板右上角的小图标),然后取消选中“ Enable Wireless
。 这降低了( ifconfig wlan0 down
)接口,它不再执行扫描。
注意:如果您使用tlp
,请阅读完整的答案。
这个问题的所有答案现在都很老了,并且不适用于使用systemd的较新的Ubuntu版本。 froage的回答在14.04对我有用 ,但在16.04没有用。
systemd-rfkill.service
使用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状态。 确保在重新启动之前关闭蓝牙和wifi。
tlp
问题:
更新:这些问题出现在tlp 0.8-1
,可在16.04存储库中找到。 在使用linrunner ppa更新到tlp 0.9-1
后,解决了所有问题。
原始答案:
tlp
屏蔽/禁用systemd-rfkill.service
以“避免冲突并确保TLP无线电设备切换选项的正常运行” 。 ( Source-1 , Source-2 )
这意味着传递内核参数将不适合您。
这是来自tlp默认配置文件( /etc/default/tlp
)的一小段代码(大约195行)。
# 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在每次第二次或第三次启动时都启用。 无法保证在下次启动时将禁用WiFi。 令人惊讶的是,tlp
设法在每次启动时都禁用蓝牙function。 -
同样适用于代码段中的第二个选项
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!"
。我在启用
DEVICES_TO_DISABLE_ON_STARTUP
之前禁用了RESTORE_DEVICE_STATE_ON_STARTUP
以避免冲突。 - 同样,提供的其他选项
tlp-rdw
不能按预期工作。
tlp
用户的解决方案:
更新:使用linrunner ppa更新到tlp 0.9-1
。
原答案:
-
启用
DEVICES_TO_DISABLE_ON_STARTUP
并将其设置为禁用蓝牙和WiFi可能对您DEVICES_TO_DISABLE_ON_STARTUP
。( 适用于此人 ) -
这个问题在askubuntu上。 它类似于这个问题的旧答案。 但请注意,我自己没有尝试过。 它可能会也可能不会奏效。
其他来源: systemd-rfkill , tlp-configuration
我个人使用Jupiter电源管理小程序来禁用我的笔记本电脑上的无线,因为它是由一个特殊按钮控制的。 我不认为在主要的回购中我必须在Webupd8上添加安德鲁的ppa来获得它。
希望这可以帮助。
你可以添加
ifconfig wlan0 down
到/etc/rc.local
,但首先,
确保,如果您使用的是NetworkManager(我的版本为0.8.4~git.20110319t175609.d14809b-0ubuntu3),则进入菜单“ 编辑连接 ” – >“ 无线 ”选项卡,单击连接,单击“ 编辑 ” ,并确保在“ 无线 ”选项卡中,未选中“ 自动连接 ”复选框。