长话短说

长话短说

我有一台装有 Debian 的笔记本电脑。网络是通过 NetworkManager 配置的。现在偶尔我想将设备连接到其有线以太网端口,然后通过无线桥接至它。到目前为止,一切正常:我需要首先手动终止 NetworkManager 以忽略以太网端口,否则它将尝试配置它,这会干扰所需的静态地址。我现在的问题是:我如何使用 dbus 命令告诉 NetworkManager 它应该忽略 eth0 一段时间?然后再管理它?

答案1

来自Debian 维基:

从 Debian Squeeze 开始,NetworkManager 默认不管理 /etc/network/interfaces 中定义的任何接口。

因此,您应该将静态以太网配置放入interfaces文件中,并防止NetworkManager完全管理它。我想你也可以做一些接口映射根据需要自动在桥接配置和“正常”配置之间切换。

答案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-completionnmcli 的上下文相关补全功能非常有用。例如,如果您不记得要设置的设备的名称,您可以键入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

相关内容