Сперва попробуем разобраться с типовой ситуацией, при которой wifi перестает работать после ждущих и спящих режимов.
Модуль, который отваливается, мы определили:
iwlwifi
Давайте попробуем создать сервис, чтобы он выполнял переподгрузку необходимого модуля ядра сам после выхода из ждущих/спящих режимов. Сперва создадим скрипт, который эту задачу будет выполнять. Открываем терминал (
Ctr+Alt+T), выполняем в нем команду:
sudo nano /opt/my_wifi_restart.sh
В окне терминала запустится консольный текстовый редатор nano. Вставляем в него такой текст:
#!/bin/bash
rmmod -f iwlmvm
rmmod -f iwlwifi
sleep 2
modprobe iwlwifi
Готово. Нажимаем
Ctrl+X чтобы выйти,
Y чтобы подтвердить изменения,
Enter чтобы подтвердить имя сохраняемого файла
/opt/my_wifi_restart.sh. Вновь видим приветствие командной строки. Для проверки вводим в терминал
cat /opt/my_wifi_restart.sh
Должен появиться только что введенный нами в файл текст. Дадим теперь нашему текстовому файлу my_wifi_restart.sh права на исполнение, чтобы сделать из него полноценный скрипт:
sudo chmod +x /opt/my_wifi_restart.sh
Обратите внимание на команду "sleep 2" в скрипте. Это задержка в 2 секунды, которую мы специально вносим между отключением модуля ядра и его повторной загрузкой. Если у Вас что-то по завершении всех манипуляций не отрабатывает нормально (скажем, после загрузки вообще значок wifi в системе исчезает) следует попытаться подобрать данное значение: попробуйте поставить больше или меньше, и проверьте результат путем эксперимента.
Со скриптом пока закончили. Но это не все. Надо еще чтобы он запускался автоматически.
Выполняем в терминале команду:
sudo nano /etc/systemd/system/restart_wifi.service
В окне терминала запустится знакомый уже консольный текстовый редатор nano. Вставляем в него такой текст:
[Unit]
Description=Restart WiFi after suspend
After=suspend.target
After=hibernate.target
After=hybrid-sleep.target
[Service]
Type=oneshot
ExecStart=/opt/my_wifi_restart.sh
[Install]
WantedBy=suspend.target
WantedBy=hibernate.target
WantedBy=hybrid-sleep.target
Нажимаем
Ctrl+X чтобы выйти,
Y чтобы подтвердить изменения,
Enter чтобы подтвердить имя сохраняемого файла
/etc/systemd/system/restart_wifi.service. Как и ранее, проверяем что файл сохранился путем вывода его содержимого в терминал:
cat /etc/systemd/system/restart_wifi.service
должен быть выведен ранее введенный Вами текст. Проверьте еше раз - все ли верно сделано. Если все так - выполняем команды:
systemctl daemon-reload
systemctl enable restart_wifi.service
systemctl start restart_wifi.service
systemctl status restart_wifi.service
При вводе последней команды Вы получите текущий статус сервиса. Он по идее должен быть "Loaded: loaded" и "Active: inactive (dead)". Последней строчкой будет "Started Restart WiFi after suspend". Если там что-то не так - прошу показать этот вывод. И да: лог будет отображаться в терминале до тех пор, пока Вы не нажмете на клавиатуре клавишу
Q в окне терминала.
Если ошибок не видно, - можно попробовать "уснуть" и "проснуться". WiFi должен в этот раз автоматически перезапуститься после пробуждения.
сегодня вайфай начал вылетать и при живущем компе - сначала просто потерял сеть, но значок вайфая оставался, а потом и значок пропал, и более того, bluetooth адаптеры тоже потерял
После того, как это сделано - предлагаю понаблюдать за поведением wifi-адаптера. Будут ли отваливания (самопроизвольные, как Вы описали) целиком всей карточки (а именно поэтому упал и bluetooth). Если будут - сразу после такого отваливания зафиксируйте выводы команд:
dmesg | egrep -i "(error|fail|warning)"
dmesg | tail -n 60
и покажите их. По ним, возможно, удастся понять что происходит. Возможно, будет ругань на firmware или еще на какую-нибудь явную ошибку. Если ругани вообще никакой не будет - будем пытаться костылить поведение через udev.
Просто на данный момент времени мне кажется, что внедренного нами сервиса переподгрузки модуля в данном случае будет достаточно.