碰巧的是,我的 NIC 只有在自动协商设置为 false 时才能与当前网络建立连接。在 Windows 中,可以通过设备管理器更改 NIC 属性来轻松实现这一点。目前,我只能在 Ubuntu(10.04,如果有必要的话)中通过以下方式实现这一点后登录:
sudo ethtool -s eth0 autoneg off 速度 100 全双工
sudo 服务网络管理器重新启动
附言:我读过来自 ubuntu 论坛的报告,可能需要删除 network-manager 并仅使用 /etc/network/interfaces 进行配置,但我打算只在万不得已的情况下才这么做。如果有人可以添加auto-negotiation ethtool
到标签列表中,我将不胜感激。
答案1
答案2
如果其他人在尝试配置 18.04 中的网络接口时遇到此问题,则结果是网络管理器将自动协商设置为关闭,因此重新启动时似乎没有任何效果;ifupdown
(已弃用)netplan
,可能是因为我们无法选择其他技术,所以可能需要其他选项。
使用
nmcli c show "Wired connection 1"
显示当前设置。用于nmcli c edit "Wired connection 1"
以交互方式设置值(使用去和后退,改变和放值。有内置帮助):
goto 802-3-ethernet.auto-negotiate
change
save persistent
quit
答案3
我将 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]: <info> (eth0): carrier now OFF (device state 100, deferring action for 4 seconds).
不要忘记将解释器描述 ( #!/bin/sh
) 作为脚本的第一行。否则它将无法工作,因为 NetworkManager 使用 run-parts 实用程序来运行它们。它们还需要由 root 拥有,并且只有其所有者才具有写入权限。
答案4
正如 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 具有读取/执行权限,并且可写使更新变得更容易,而无需更改权限或强制编辑器保存。
sudo chmod 0744 /etc/NetworkManager/dispatcher.d/50-ethtool-autoneg-off
如果您对此有任何问题,请告诉我,我会做一些实验,但我目前正在使用类似的方法将界面从更改为,speed 1000
因为speed 100
默认速度不稳定。