Все эти команды должны выполняться как root или с привилегиями суперпользователя
Кажется, что нет возможности сделать это в Network Manager. С другой стороны, редактирование /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. Согласно документации Network Manager, скрипты в /etc/NetworkManager/dispatcher.d будут запускаться после использования «скриптов» с интерфейсами ». В моей системе 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).
Do not забудьте указать описание интерпретатора (#!/bin/sh) в качестве первой строки вашего скрипта. В противном случае он не будет работать, поскольку NetworkManager использует утилиту run-parts для их запуска. Они также должны быть владельцами root и иметь разрешение на запись только для своего владельца.
Как Джефф М намекнул, вы можете сделать это с помощью NetworkManager, и мне очень повезло сделать это.
Создайте файл в /etc/NetworkManager/dispatcher.d/ с именем 50-ethtool-autoneg-off и поместите следующее содержимое в этом. Обратите внимание, что вы можете изменить 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 из-за нестабильности со скоростью по умолчанию.
Если кто-то другой попадает в эту адскую дыру, пытающуюся настроить сетевые интерфейсы в 18.04, получившийся сетевой менеджер отключил автосогласование, поэтому перезагрузка ничего не работала; ifupdown
(устаревший), netplan
, возможно, какой-то другой вариант, потому что мы не можем выбрать технологию.
Используется nmcli
, чтобы включить его.
nmcli c show "Wired connection 1"
goto 802-3-ethernet.auto-negotiate
change
Edit 'auto-negotiate' value: yes
save persistent
quit
netplan
теперь является новым стандартом для новых 18.04-инсталляций. Любопытно, что эта старая проблема никогда не была должным образом решена в течение пяти чертовых выпусков LTS # opensourcepr0blems
– prusswan
1 October 2018 в 16:49