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