Отключить оборудование Ethernet при запуске

Вопрос или проблема

Чтобы запустить виртуальную машину под названием “sys-net” в Qubes на моем ноутбуке, нужно записать “1” в файл

echo -n "1" > /sys/bus/pci/devices/0000\:04\:00.0/remove

Также 0000:04:00.0 и 0000:04:00.1 вызывают конфликты и должны быть удалены сначала после каждой загрузки ноутбука.

Тогда сеть запустится и будет работать нормально. Вот немного информации

$ lspci | grep -i eth
04:00.1 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev12)

$ find /sys -name *04:00.0
/sys/bus/pci/devices/0000:04:00.0
/sys/bus/pci/drivers/rtsx_pci/0000:04:00.0
/sys/devices/pci0000:00/0000:00:1d.3/0000:04:00.0

$ find /sys -name *04:00.1
/sys/bus/pci/devices/0000:04:00.1
/sys/bus/pci/drivers/pciback/0000:04:00.1
/sys/devices/pci0000:00/0000:001d.3/0000:04:00.1

Как я могу преобразовать это в скрипт systemd, чтобы запустить его при загрузке? Он работает только временно. После перезагрузки сетевое устройство снова появляется.

Вы можете попробовать воспользоваться правилом udev.

Например, вы можете создать файл /etc/udev/rules.d/99-disable-eth.rules со следующим содержимым:

ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="pci", RUN+="/bin/sh -c 'echo 1 >/sys/bus/pci/devices/0000\:04\:00.0/remove'"

Не стесняйтесь настраивать его дальше, добавляя более специфические элементы, такие как атрибут производителя, имя интерфейса и т.д.

Посмотрите на http://www.reactivated.net/writing_udev_rules.html для получения дополнительных примеров и информации о написании правил udev.

Ответ или решение

Для решения проблемы с автозагрузкой сети на вашем ноутбуке, где вы используете виртуальную машину "sys-net" в системе Qubes, необходимо создать скрипт на основе системы systemd, который выполнит отключение Ethernet-устройств при каждом запуске системы. Это позволит избежать конфликта с устройствами, упомянутыми вами (0000:04:00.0 и 0000:04:00.1). В данной статье мы рассмотрим, как корректно реализовать данное решение с использованием systemd и udev, а также постараемся учесть все ваши потребности.

Шаг 1: Создание udev правила

Для начала, мы создадим правило udev, которое будет занимать необходимую для нас роль. Правила udev используются для динамического управления устройствами и их поведением при подключении. Мы создадим файл с названием 99-disable-eth.rules для нашего специфического случая.

  1. Откройте терминал.

  2. Создайте файл правил udev:

    sudo nano /etc/udev/rules.d/99-disable-eth.rules
  3. Вставьте следующее содержимое:

    ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="pci", ATTR{vendor}=="0x10ec", ATTR{device}=="0x8168", RUN+="/bin/sh -c 'echo 1 > /sys/bus/pci/devices/0000:04:00.0/remove'"

    Здесь ATTR{vendor} и ATTR{device} используются для точного определения вашего устройства Ethernet. Эти значения можно получить из команды lspci.

  4. Сохраните и закройте файл (Ctrl + O затем Enter, Ctrl + X).

Шаг 2: Создание systemd сервиса

Следующий шаг — создание сервиса systemd, который будет запускаться во время загрузки и выполнит нужные команды.

  1. Создайте новый файл для сервиса:

    sudo nano /etc/systemd/system/disable-eth.service
  2. Вставьте следующее содержимое:

    [Unit]
    Description=Disable Ethernet Hardware Devices at startup
    After=network.target
    
    [Service]
    Type=oneshot
    ExecStart=/bin/sh -c 'echo -n "1" > /sys/bus/pci/devices/0000:04:00.0/remove'
    RemainAfterExit=yes
    
    [Install]
    WantedBy=multi-user.target

    В данном файле мы указали, что служба будет выполняться один раз (Type=oneshot), и вызовет команду для отключения устройства Ethernet.

  3. Сохраните и закройте файл.

Шаг 3: Активация и запуск сервиса

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

  1. Перезагрузите конфигурацию systemd:

    sudo systemctl daemon-reload
  2. Активируйте сервис на старте системы:

    sudo systemctl enable disable-eth.service
  3. Запустите сервис сразу (по желанию):

    sudo systemctl start disable-eth.service

Заключение

Теперь ваше устройство Ethernet будет отключаться автоматически при каждом старте системы. Это обеспечит стабильную работу вашей виртуальной машины "sys-net" в Qubes.

При возникновении вопросов или необходимости более сложной настройки, вы всегда можете обратиться к документации по udev или systemd для получения дополнительных сведений. Если вы столкнётесь с какими-то ошибками, рассмотрите возможность проверки логов с помощью journalctl -xe.

Оцените материал
Добавить комментарий

Капча загружается...