Как выполнить сценарий оболочки _before_ systemd-udevd выполнения?

На Ubuntu 18.04 я хотел бы выполнить сценарий оболочки прежде systemd-udevd запускается.

Причиной этого является эта ошибка: Ubuntu 18.04 systemd-udevd использует высокий ЦП, конфликт с графикой Nvidia

Решение, просто переместив правило 71-nvidia.rules таким образом, это не будет найдено, не будет работать на меня: у Меня есть Хитрость блейда Razer, которой я управляю с и без Ядра Razer (с картой Nvidia). Когда ноутбук подключен к Ядру Razer (через Удар молнии 3), все прекрасно. Но когда ноутбук не подключен, у меня есть та же проблема, как описано в другом вопросе.

Как обходное решение, я хотел переместиться /lib/udev/rules.d/71-nvidia.rules кому: /lib/udev/rules.available/71-nvidia.rules. Сценарий оболочки должен затем использовать lspci определить, найдена ли карта Nvidia. Если бы карта Nvidia найдена, она создала бы символьную ссылку на /lib/udev/rules.available/71-nvidia.rules в /lib/udev/rules.d/71-nvidia.rules. Если бы никакая карта Nvidia не найдена, это удалило бы ту символьную ссылку.

#!/bin/bash
set -e ; set -o pipefail

mkdir -p /lib/udev/rules.available/
if [ ! -e /lib/udev/rules.available/71-nvidia.rules ] ; then
    mv /lib/udev/rules.{d,available}/71-nvidia.rules
fi

rm -f /lib/udev/rules.d/71-nvidia.rules
if lspci | grep nvidia ; then
    ln -s /lib/udev/rules.{available,d}/71-nvidia.rules
fi

Так, как я могу заставить сценарий оболочки как тот выше работать, прежде чем systemd-udevd будет запущен?

P.S.: Если кто-либо знает лучшее, более умное обходное решение, возможно, со встроенными возможностями systemd-udevd, Мне было бы любопытно знать также.

0
задан 8 September 2018 в 21:22

1 ответ

Для ответа на непосредственный вопрос можно просто записать a .service единица, которая имеет a Before= упорядочивание зависимости от systemd-udevd.service:

[Unit]
Before=systemd-udevd.service

Знайте это systemd-udevd.service запускается во время ранней начальной загрузки, таким образом, необходимо будет использовать DefaultDependencies=no также и список любые на самом деле необходимые зависимости вручную. Иначе Вы получите цикл упорядочивания.

Бросая все это вместе, единица может выглядеть примерно так:

# /etc/systemd/system/udev-nvidia-hack.service
[Unit]
DefaultDependencies=no
Before=systemd-udevd.service
RequiresMountsFor=/lib/udev /etc/udev /path/to/script

[Service]
Type=oneshot
ExecStart=/path/to/script.sh

[Install]
WantedBy=sysinit.target

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

0
ответ дан 28 October 2019 в 00:32

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

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