如何强制网络管理器在启动时将特定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