我的台式机的 PCI 无线网卡一直在扫描可用的无线网络,但我很少使用它。我可以一直关闭无线网卡直到我需要它为止吗?
答案1
使用网络管理器的“现代”解决方案:只需取消选中已启用无线网络管理器小程序(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
由于与网络管理器 (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 是 wifi 的别名,请参阅源代码的杀戮)。
现在,如果您想在启动时禁用无线功能,请通过运行将命令添加到 /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 中删除该行。
答案2
至少有两个 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
。
有关这些工作如何协同工作以实现我们的时间目标的更多详细信息,请参阅我的问题和答案,“如何创建一个单次执行的 Upstart 作业,以保证在其他两个作业开始之前完成?”
答案3
禁用无线网卡最简单的方法是右键单击 NetworkManager 指示器(面板右上角的小图标),然后取消勾选Enable Wireless
。这将关闭(ifconfig wlan0 down
)界面,并且不再执行扫描。