Как заставить Network Manager установить автоматическое согласование на false / off для конкретной сетевой платы (eth0) при запуске?

Все эти команды должны выполняться как root или с привилегиями суперпользователя

3
задан 6 February 2012 в 12:23

4 ответа

Кажется, что нет возможности сделать это в 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'
3
ответ дан 25 May 2018 в 14:37

У меня были лучшие результаты, накладывающие скрипты 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 и иметь разрешение на запись только для своего владельца.

2
ответ дан 25 May 2018 в 14:37
  • 1
    Вы правы, скрипты в if-up запускаются после того, как NM закончил «возиться с интерфейсами». И в этом проблема. В моей системе настройка автонастройки препятствовала подключению сети. NM делал всевозможные авахи, dns и т. Д., Но так и не дошел до «Я закончил fiddling». state, поэтому никогда не выполняйте скрипты if-up! - Еще более раздражающе, я прочитал в отчетах об ошибках с сообщением об ошибках , что предварительный крючок был удален. Таким образом, для меня фактически единственным решением было использование rc.local подхода. – isync 9 January 2018 в 23:06

Как Джефф М намекнул, вы можете сделать это с помощью 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 из-за нестабильности со скоростью по умолчанию.

1
ответ дан 25 May 2018 в 14:37

Если кто-то другой попадает в эту адскую дыру, пытающуюся настроить сетевые интерфейсы в 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
1
ответ дан 9 October 2018 в 09:21
  • 1
    Вы, вероятно, обновлены с предыдущего выпуска. Я где-то читал, что netplan теперь является новым стандартом для новых 18.04-инсталляций. Любопытно, что эта старая проблема никогда не была должным образом решена в течение пяти чертовых выпусков LTS # opensourcepr0blems – prusswan 1 October 2018 в 16:49
  • 2
    Это была новая установка. Поэтому, увидев, что это было написано, что netplan - это новый способ, просто добавил еще один ключ, так как сетевой менеджер все еще искал вещи. – sidewinder12s 2 October 2018 в 02:57

Другие вопросы по тегам:

Похожие вопросы: