После внеочередного обновления системы случилось странное – после выхода из hibernate не работает сетевая карта: она “как бы есть, но её как бы нет”. Устройство делает вид, что присутствует, система видеть в устройстве надёжного партнёра отказывается. Помогает rmmod r8169
и сразу же modprobe r8169
. Такая вот расплата за “rolling release”.
Т.к. обновлять уже нечего, релиз свежее некуда, то нужно как-то “дотянуть” до фикса своими силами. Т.е. нужно автоматически “рестартовать” драйвер карты после выхода из гибернации. “Решение” странное, но другого не гуглиться. И вроде бы понятное, но дело ВНЕЗАПНО осложняется тем, что прямо во время обновления были удалены pm-utils
с помощью которых ранее уже доводилось реагировать на события по питанию. Все, что удалось нагуглить так или иначе ведёт либо в мануал к systemd
, либо к pm-utils
, но в дистрибутиве ни того, ни другого нет.
Были попытки запуска скрипта с acpid
, crontab (@restart)
и ещё несколько тупиковых идей, но поиск неожиданно привёл на страницу changelog-а дистрибутива, в которым тёмным по светлому было написано: ConsoleKit2 is gone, replaced by elogind (which also takes over for
cgmanager and pm-utils).
Правильным ответом оказался elogind
. Однако и тут ждал небольшой сюрприз – мануал велит использовать /lib/elogind/system-sleep
для своих скриптов, однако её не существует. Если же создать, то скрипты в ней не выполняются. Помогло изучение сборочного скрипта для пакета elogind – оказалось, что не /lib
, а /lib64
… (Патрик, ну как так-то ?).
Итого:
#!/bin/bash
# put this at /lib64/elogind/system-sleep/reload_r8169
if [ "$1/$2" = "post/hibernate" ]
then
rmmod r8169;
modprobe r8169;
fi
Костыли надёжно приварены к велосипеду, можно выживать дальше. “Такой день” (ц)