如何强制网络管理器在启动时将特定NIC(eth0)的自动协商设置为false / off?

碰巧我有一个NIC,当自动协商设置为false时,它只能与当前网络建立连接。 在Windows中,通过设备管理器更改NIC属性可以非常轻松地实现这一点。 目前我只能登录通过以下内容在Ubuntu(10.04,如果这很重要)中这样做:

sudo ethtool -s eth0 autoneg off speed 100 duplex full

sudo服务网络管理器重启

PS:我已经阅读了ubuntu论坛的报告,可能有必要删除网络管理器,只使用/ etc / network / interfaces进行配置,但我打算这样做只是作为最后的手段。 如果有人可以将auto-negotiation ethtool添加到标签列表,我也将不胜感激。

似乎没有办法在网络管理器中执行此操作。 另一方面,编辑/etc/network/interfaces是笨拙的,导致Ubuntu的后续版本(例如12.04)出现延迟(参见本节和此内容 )。 最后,通过将ethtool命令添加到rc.local , 这里提供的解决方案最好(现在):

 sudo -H gedit /etc/rc.local ethtool -s eth0 autoneg off speed 100 duplex full # put this above 'exit 0' 

我将ethtool脚本放在/etc/network/if-up.d有更好的结果。 根据网络管理器文档,/ /etc/NetworkManager/dispatcher.d脚本将在NM’使用接口后’中运行。 在我的12.04系统上,唯一的脚本是01ifupdown,然后在/etc/network/if-up.d (也就是/etc/network/if-post-down.d )中运行脚本。

在我的系统上出现登录屏幕后,这一系列事件似乎发生得很好。

我在系统日志中发现了以下行的多次出现,这可能解释了导致延迟的原因:

 NetworkManager[871]:  (eth0): carrier now OFF (device state 100, deferring action for 4 seconds). 

不要忘记将解释器描述( #!/bin/sh )作为脚本的第一行。 否则它将无法工作,因为NetworkManager使用run-parts实用程序来运行它们。 它们还需要由root拥有,并且只对其所有者具有写入权限。

正如Jeff M所暗示的那样,你可以用NetworkManager做到这一点,我也很幸运。

/etc/NetworkManager/dispatcher.d/创建一个名为50-ethtool-autoneg-off的文件,并在其中放入以下内容。 请注意,如果要禁用任何eth设备,可以将eth0更改为eth*如果系统使用较新的“可预测内核名称”,则还可以添加eth*|en*

 #!/bin/sh myname=${0##*/} log() { logger -p user.info -t "${myname}[$$]" "$*"; } IFACE=$1 ACTION=$2 case ${IFACE} in eth0) case ${ACTION} in up) log "Disabling auto-negotation on $IFACE" ethtool -s $IFACE autoneg off speed 100 duplex full ;; esac ;; esac 

你需要一个shebang #!/bin/sh#!/bin/bash来自我见过的例子,他提到的权限绝对重要。 它至少应该为root读取/执行,而writable使得更新更容易,无需更改权限或强制编辑器保存。

 sudo chmod 0744 /etc/NetworkManager/dispatcher.d/50-ethtool-autoneg-off 

如果您有任何问题请告诉我,我会做一些实验,但我现在正在使用类似的方法将界面从speed 1000更改为speed 100因为默认速度不稳定。

如果其他人在18.04试图配置网络接口这个地狱漏洞结束了,结果是网络管理员正在为我设置自动协商关闭,所以在重新启动时似乎没有任何工作; ifupdown (已弃用), netplan ,可能是其他一些选项,因为我们无法选择技术。

使用nmcli将其设置为on。

 nmcli c show "Wired connection 1" goto 802-3-ethernet.auto-negotiate change Edit 'auto-negotiate' value: yes save persistent quit