После внеочередного обновления системы случилось странное – после выхода из 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

Костыли надёжно приварены к велосипеду, можно выживать дальше. “Такой день” (ц)

wake up, r8169
Tagged on:         

Leave a Reply