Выполнение команд при запуске

Предсказуемые имена сетевых интерфейсов не должны изменяться при добавлении или удалении оборудования . Разве не в этом весь смысл схемы именования ???

Короче говоря, в этом нет ничего нового; это ожидается / задумано. Следовательно, вам не нужно сообщать об ошибке, если вы не хотите попросить производитель ПК лучше поддерживать Linux (BIOS) или производителя оборудования (драйверы). Некоторые варианты, если вы хотите улучшить ситуацию с горячей заменой устройств и / или вернуться к старой схеме именования:

  • Отключить новую схему именования для сетевых устройств с net.ifnames = 0 командная строка ядра
  • Добавить biosdevname = 1 командную строку ядра для включения предоставленных BIOS индексных номеров в имена
  • Создание или редактирование правил udev для пользовательских имен или измененных схем именования
  • Вы отключаете назначение фиксированных имен, чтобы снова использовались непредсказуемые имена ядра. Для этого просто замаскируйте файл .link udev для политики по умолчанию: ln -s / dev / null /etc/systemd/network/99-default.link

Если вы используете systemd и / или udev аргумент «предсказуемая схема именования» может отличаться от предыдущего. Однако, основываясь на схеме именования интерфейса WiFi, я предполагаю, что вы используете систему с systemd .

Вы можете попробовать добавить следующий параметр загрузки в командную строку ядра, чтобы использовать «старое» соглашение об именах сетевых устройств. Однако я не совсем уверен, какие дополнительные эффекты это может иметь, если таковые имеются, помимо сохранения схемы именования для сетевых устройств.

net.ifnames=0

Добавление его в / etc / default / grub может упростить сохранение и повторное использование этого параметра; опять же, предполагая, что вы используете grub2 :

GRUB_CMDLINE_LINUX="net.ifnames=0"

Если udev использует прошивку устройства, местоположение и другие параметры при определении имен устройств, то, возможно, местоположение или что-то еще могло измениться внутри , в зависимости от того, как соответствующие устройства взаимодействуют друг с другом. Здесь это кажется не столь актуальным, поскольку устройства представляют собой адаптер Wi-Fi и звуковую карту. Тем не менее, это может быть связано с базовой структурой шины; что кажется актуальным, поскольку оба устройства подключены к слотам PCI.


Дополнительная информация из FedoraDocs

8.1. Иерархия схем именования

По умолчанию systemd будет именовать интерфейсы, используя следующую политику для применения поддерживаемых схем именования:

  • Схема 1: Имена, включающие встроенное ПО или BIOS, предоставили порядковые номера для встроенных устройств (пример: eno1),применяются, если эта информация из микропрограммного обеспечения или BIOS применима и доступна, иначе возвращается к схеме 2.

  • Схема 2: Имена, включающие микропрограммное обеспечение или предоставленные BIOS индексные номера слотов для горячей замены PCI Express (пример: ens1), применяются, если эта информация из микропрограммного обеспечения или BIOS применим и доступен, иначе возврат к схеме 3.

  • Схема 3: Имена, включающие физическое расположение разъема оборудования (пример: enp2s0), применяются, если применимо, иначе возвращаются непосредственно к схеме 5 во всех остальных случаях.

  • Схема 4: Имена, включающие MAC-адрес интерфейса (пример: enx78e7d1ea46da), не используется по умолчанию, но доступна по выбору пользователя.

  • Схема 5: Традиционная непредсказуемая схема именования ядра, используется, если все другие методы терпят неудачу (пример: eth0).

Эта политика, процедура, описанная выше, используется по умолчанию. Если в системе включено biosdevname, оно будет использовано. Обратите внимание, что для включения biosdevname необходимо передать biosdevname = 1 в качестве параметра командной строки, за исключением случая системы Dell, где biosdevname будет использоваться по умолчанию, пока оно установлено. Если пользователь добавил правила udev , которые изменяют имя устройств ядра, эти правила будут иметь приоритет.


Дополнительные ресурсы

1
27.08.2016, 01:00
2 ответа

Большинство систем автоматически загружают /etc/rc.local при запуске, когда он присутствует, поэтому вам просто нужно поместить туда свои команды и это должно помочь.

Вы должны убедиться, что он запускается с правами root, но, вероятно, он уже есть.

1
27.01.2020, 23:47

Если ваша система использует systemd, вы можете написать службу oneshot, которая выполняет команду один раз при загрузке системы.

Сначала создайте файл /opt/scripts/configure-bluetooth.sh и поместите свои команды в:

#!/bin/bash
rfkill unblock bluetooth
killall bluetoothd
hciconfig hci0 up

И сделайте файл исполняемым: chmod + x / opt / scripts / configure-bluetooth.sh

Создание нового служебного модуля: /etc/systemd/system/configure-bluetooth.service , который содержит:

[Unit]
Description=Configure bluetooth

[Service]
Type=oneshot
ExecStart=/opt/scripts/configure-bluetooth.sh

[Install]
WantedBy=multi-user.target

Теперь вы должны запустить systemctl daemon-reload , чтобы systemd обнаружил новую службу.Чтобы проверить это, запустите systemctl start configure-bluetooth.service .

Убедившись, что он работает, вы можете включить его при загрузке с помощью: systemctl enable configure-bluetooth.service

0
27.01.2020, 23:47

Теги

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