我有一台装有 Debian 的笔记本电脑。网络是通过 NetworkManager 配置的。现在偶尔我想将设备连接到其有线以太网端口,然后通过无线桥接至它。到目前为止,一切正常:我需要首先手动终止 NetworkManager 以忽略以太网端口,否则它将尝试配置它,这会干扰所需的静态地址。我现在的问题是:我如何使用 dbus 命令告诉 NetworkManager 它应该忽略 eth0 一段时间?然后再管理它?
答案1
答案2
长话短说
nmcli device set eth0 managed false
.
.
.
nmcli device set eth0 managed true
注意:您不需要是 root。
网络管理员
虽然很老了,但这仍然是一个非常好的问题,而且多年来答案已经发生了变化。值得庆幸的是,现在变得简单多了。该nmcli
命令从命令行控制网络管理器,并可用于告诉它某些接口应保持非托管状态:
nmcli device set eth0 managed false
当您希望 Network Mangler 重新开始管理接口时,您可以运行相反的命令:
nmcli device set eth0 managed true
您可以通过键入以下命令来查看计算机上各种网络接口的状态(网络管理器将其称为“设备”)nmcli devices
:
$ nmcli device
DEVICE TYPE STATE CONNECTION
wlan0 wifi connected Mother Brain (66GHz)
p2p-dev-wlan0 wifi-p2p disconnected --
eth1 ethernet unavailable --
enx00505b01d4d3 ethernet unavailable --
eth0 ethernet unmanaged --
lo loopback unmanaged --
nmcli 用法
nmcli 具有出色的使用信息,可以在命令行中随时使用 -h 来发现。例如:
$ nmcli device set -h
Usage: nmcli device set { ARGUMENTS | help }
ARGUMENTS := DEVICE { PROPERTY [ PROPERTY ... ] }
DEVICE := [ifname] <ifname>
PROPERTY := { autoconnect { yes | no } |
{ managed { yes | no }
Modify device properties.
如果您启用了制表符补全功能 — apt install bash-completion
nmcli 的上下文相关补全功能非常有用。例如,如果您不记得要设置的设备的名称,您可以键入nmcli device set
并按 TAB 键两次以查看所有可能性。它还可以节省时间和打字错误:在我的机器上我可以打字
nmcli device set enx
当我点击选项卡时,它完成:
nmcli device set enx00505b01d4d3
答案3
恐怕那是不可能的。这D总线API允许您禁用所有类型的无线设备,但不能禁用有线设备。禁用有线连接的唯一方法是禁用全部设备,包括您的无线设备。
或许它有助于取消选中有线设备的“自动连接”框。这样 NetworkManager 就不会自动连接到它。
答案4
这是我从nmcli
手册页中找到的。我不知道这适用于哪些发行版,但我正在使用Ubuntu 12.04 LTS
这会将设备标记为断开连接状态,因此它不在网络管理器的控制范围内
nmcli dev disconnect iface eth0
只要我不断开电缆就可以。
您可以通过以下方式检查设备状态:
nmcli dev status
目前与以下机构建立了积极的联系:
nmcli con status
我创建了这个帮助脚本nm-manual-interface
#!/bin/bash
DEV=${1:-help}
shift
OPER=${1:-manual}
shift
if [ "$DEV" == "help" ]; then
echo -n "$0 "
cat <<'EOH';
<DEV> [manual|auto]
Change <DEV> to disconnected state for nm.
In short take manual control of <DEV>.
All changes are temporary.
Usage:
Change to manual:
EOH
echo $0 eth0 manual
echo
echo Change back to nm control:
echo $0 eth0 auto
echo
exit 1
fi
# store last uuid of device here
LASTUUIDFILE="/tmp/.nm-last-uuid-${DEV}"
if [ "$OPER" == "manual" ]; then
if [ -n "$DEV" ] ; then
UUIDNET=$(nmcli con status |grep "$DEV" | perl -anle 'print @F[1]')
if [ -n "$UUIDNET" ]; then
echo "$UUIDNET" > $LASTUUIDFILE
nmcli dev disconnect iface "$DEV"
fi
fi
fi
if [ "$OPER" == "auto" ]; then
if [ -f "$LASTUUIDFILE" ]; then
nmcli con up uuid $(cat "$LASTUUIDFILE") --nowait
rm "$LASTUUIDFILE"
else
echo No last-state uuid file for iface "$DEV"
fi
fi