Не знаю почему, но проблема заключается в попытке удалить и добавить модуль при выходе из спящего режима .
Я столкнулся с той же проблемой, что и вы, и ваш скрипт fix-touchpad.sh
не работал, пока я не попытался удалить модуль перед переходом в спящий режим и добавить его обратно после.
Основываясь на этом ответе на форуме Fedora, это может быть что-то вроде:
$ cat /usr/lib/systemd/system-sleep/fix-touchpad.sh
#!/bin/bash
[ "$1" = "pre" ] && modprobe -r i2c_hid
[ "$1" = "post" ] && modprobe i2c_hid
exit 0
Я также нашел другой способ выполнения кода в режиме гибернации/возобновления, и он также работал только при удалении модуля перед переходом в режим гибернации . Как описано в Arch's Wiki Управление питанием #Перехватчики сна , вы можете создать службу systemd, которая запускается службой сна.
Опираясь на инструкции вики, я придумал следующее:
$ cat /etc/systemd/system/root-resume.service
[Unit]
Description=(un)load module i2c_hid when going to/from sleep
Before=sleep.target
StopWhenUnneeded=yes
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=modprobe -r i2c_hid
ExecStop=modprobe i2c_hid
[Install]
WantedBy=sleep.target
Служба должна быть включена с помощью systemd enable root-resume
. Обратите внимание, что ExecStart будет выполняться до sleep.target
, а ExecStop будет выполняться при возобновлении.
Проверьте пакет systemd-suspend-modules
в AUR . По сути, он определяет службу, которая выполняет Решение 1 для каждого модуля, указанного в файле конфигурации пользователя. Это может быть более подходящим для других модулей, поскольку «рекурсивно выгружает данные модули и все, что от них зависит» (https://github.com/parkouss/systemd-suspend-modules/blob/master/suspend-modules#L19).