Вопрос или проблема
Чтобы запустить виртуальную машину под названием “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
для нашего специфического случая.
-
Откройте терминал.
-
Создайте файл правил udev:
sudo nano /etc/udev/rules.d/99-disable-eth.rules
-
Вставьте следующее содержимое:
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
. -
Сохраните и закройте файл (
Ctrl + O
затемEnter
,Ctrl + X
).
Шаг 2: Создание systemd сервиса
Следующий шаг — создание сервиса systemd, который будет запускаться во время загрузки и выполнит нужные команды.
-
Создайте новый файл для сервиса:
sudo nano /etc/systemd/system/disable-eth.service
-
Вставьте следующее содержимое:
[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: Активация и запуск сервиса
После создания сервиса необходимо активировать его, чтобы он запускался при каждой загрузке системы.
-
Перезагрузите конфигурацию systemd:
sudo systemctl daemon-reload
-
Активируйте сервис на старте системы:
sudo systemctl enable disable-eth.service
-
Запустите сервис сразу (по желанию):
sudo systemctl start disable-eth.service
Заключение
Теперь ваше устройство Ethernet будет отключаться автоматически при каждом старте системы. Это обеспечит стабильную работу вашей виртуальной машины "sys-net" в Qubes.
При возникновении вопросов или необходимости более сложной настройки, вы всегда можете обратиться к документации по udev
или systemd
для получения дополнительных сведений. Если вы столкнётесь с какими-то ошибками, рассмотрите возможность проверки логов с помощью journalctl -xe
.