Проблема с выключением всех систем на базе linux
приветствую! Моя машина — ноутбук dexp achilles g118. Изготовитель платы dns. uefi 2015 года.
Проблема заключается в том, что у меня не выключается ни одна система на базе Linux(кроме систем с мезозойскими ядрами -5 века(и ещё Mint Uliana до всех обновлений выключался), я не воин linux’а, так что смотреть ядра не стал, а оставил на финальный рывок, если тут не помогут). Сбой происходит на финальном этапе выключения («reboot: Power down» и всё встаёт).
Всё остальное работает правильно. Собственно, даже reboot работает нормально. На что только не грешил, перепробовал всё, проверял работоспособность всех модулей и пакетов ядра через dmesg. Везде всё хорошо, кроме acpi, с которым тоже копался: пробовал менять драйвер (так и не поменял, потому что не нашёл), вынимал кабель питания, батарею. Включал — выключал всё до чего достали руки (wifi и lan, bluetooth, систему контроля питания, короче говоря всё, что есть в системе и что можно выключить ‘нетерминально’). Драйверы на видеоадаптер ставил через встроенный «менеджер драйверов». Прописывал в grub «verbose», «acpi=force». Даже выключал как shutdown -h now ; poweroff ; halt- нет разницы.
Начинаю думать, что дело в плате и acpi контроллере.
Свежая информация: Система загружается, как положено через UEFI, а не через ACPI. Проблема, видимо, не в железе, а в софте. За непониманием происходящего, удаляюсь с форума побеждённым Linux’ом. Возможно, отпишу позже.
забыл добавить!
Текущая операционка — manjaro Cinnamon 4.6.7 Версия ядра — 5.8.3-2-MANJARO
Если дело в ACPI, то это решается или правкой DSDT, или переходом на те версии LTS ядер, где это и так работает нормально.
Ты говоришь, что на 4.x ядрах все нормально работает?
Ubuntu 18.04 имеет ядро 4.15 и будет поддерживаться до апреля 2023.
Debian 10 имеет ядро 4.19 и будет поддерживаться до 2024 года, точнее будет позднее объявлено.
RHEL 8 (CentOS, Oracle Linux) имеют ядро 4.18 и будут поддерживаться до мая 2029 (хотя как десктоп их может быть не очень удобно использовать).
На кнопку руби да и все
попробуй в grub добавить
приветствую! Моя машина — ноутбук dexp achilles g118. Изготовитель платы dns. uefi 2015 года.
А линукс загружается через UEFI или Legacy boot? Если не ошибаюсь, то в случае UEFI выключение идёт через API UEFI, а в случае Legacy — через ACPI. И в случае бажной прошивки, одно из этого может не работать.
Проблема заключается в том, что у меня не выключается ни одна система на базе Linux(кроме систем с мезозойскими ядрами -5 века(и ещё Mint Uliana до всех обновлений выключался), я не воин linux’а, так что смотреть ядра не стал, а оставил на финальный рывок, если тут не помогут). Сбой происходит на финальном этапе выключения («reboot: Power down» и всё встаёт).
А можешь сказать точные версии ядер, в которых всё работает нормально, и ядер, в которых выключение сломано?
Прописывал в grub «verbose», «acpi=force».
А какие ещё варианты acpi= пробовал? Если что, документация тут: https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html. Я бы попробовал другие.
Даже выключал как shutdown -h now ; poweroff ; halt- нет разницы.
Если доходит аж до reboot: Power down то разницы и не должно быть.
Также, проблема может быть в каким-нибудь хитром устройстве, которое делает с состоянием системы или прошивки что-то странное при инициализации или перед выключением. Чтобы такое отловить, можно попробовать загружать систему с минимальным набором модулей ядра и смотреть: выключается ли. Если выключается нормально, то добавлять модули и смотреть после какого всё сломается опять.
(хотя как десктоп их может быть не очень удобно использовать).
А что там не так? Все пакеты из федоры.
тогда Windows 10
Не все. В том смысле, что их существенно меньше, а те, что есть, зачастую собираются с большим запозданием. Даже если подключить EPEL + RPMFusion + flatpak, их все равно не так много и многие устарели (в смысле безопасности), и зачастую будет чего-то не хватать. Есть ещё snap, но для него криво прописаны политики SELinux, что вызывает головную боль при использовании их одновременно.
Как я понял, система выключсется через Legacy. Проверил поиском файла efi.
В теории на ядрах ниже 4.4 (уровень убунту до 16.04) всё должно работать. Раньше работало, по крайней мере. Попробовал сегодня поставить одно такое, получил отказ novieau с непонятной претензией. Сейчас попробую именно убунту 16.04 и ниже. Отпишусь как сделаю.
Вообще, есть шанс, что я пару-тройку лет назад пробовал «прошить биос») Возможно, если я прав, в этом и всё дело. С виндой-то всё понятно, а вот линукс, видимо, — более чувствительная система.
ПРОБЛЕМА РЕШЕНА!
Дело было в том, что моя плата не поддерживает Legacy системы, коей и является Manjaro. Вот почему я говорил, что у меня работала старая ubuntu, ведь на ней(а по факту, как я узнал, и на любой ubuntu системе) можно было ДОГРУЗИТЬ в ядро поддержку uefi. А с новыми выпусками ubuntu поддержка uefi стоит автоматом(так я про это всё и узнал).
Вот по этому manjaro и не могла выключить пк, ведь она посылала сигнал о выключении в legacy контроллер, которого нет!
Огромное спасибо im-0 за наводку!
На arch поддержку efi тоже можно догрузить.
Ниправда! DNS-Shop не занимается изготовлением железа, только собирают под своим брендом китайское говно (сейчас рядом стоит один, и единственное что не позволяет мне его разбить о стену — железка не моя).
Начинаю думать, что дело в плате и acpi контроллере.
Возможно, но без логов всё это пальцем в небо.
То есть Arch Linux, а значит с systemd.
А стоит начать с каноничного для systemd systemctl poweroff .
А стоит начать с каноничного для systemd systemctl poweroff.
Это всё синонимы.
Как я понял, система выключсется через Legacy. Проверил поиском файла efi.
Надо смотреть на наличие директории /sys/firmware/efi/ . Если есть — значит UEFI.
Дело было в том, что моя плата не поддерживает Legacy системы, коей и является Manjaro. Вот почему я говорил, что у меня работала старая ubuntu, ведь на ней(а по факту, как я узнал, и на любой ubuntu системе) можно было ДОГРУЗИТЬ в ядро поддержку uefi. А с новыми выпусками ubuntu поддержка uefi стоит автоматом(так я про это всё и узнал).
А можешь объяснить что именно и как ты делал? На случай, если у кого-то ещё возникнет такая же проблема с теми же причинами.
Как минимум мне не очень понятно что именно у тебя происходит потому что:
- Практически все современные дистрибутивы поддерживают UEFI.
- Если при установке поставить legacy-загрузчик, но прошивка платы не умеет в legacy, то линукс не загрузится вообще.
- «ДОГРУЗИТЬ в ядро поддержку uefi» из уже работающей системы никак нельзя, потому что решение о выборе типа загрузки принимает не линукс, а прошивка системы, на основе того, что она сама умеет, и что настроил юзер в «настройках биоса». После выбора она либо запускает код загрузки легаси, который грузит grub2 (собранный под легаси), который грузит ядро линукса; либо она запускает код загрузки UEFI, который грузит shim, который грузит grub2 (собранный под uefi, это отдельный набор бинарников), который грузит ядро. После загрузки уже ничего не изменить. Разве что правильным образом установить другой grub2, либо переустановить вообще всю систему.
Ну вот у меня на Gentoo эти алиасы/симлинки работали криво, потому systemd-sysv, или как там этот пакет называется, снёс нафиг и юзал напрямую и проблем не знал.
Ну вот у меня на Gentoo эти алиасы/симлинки работали криво
Гентопроблемы, даже симлинки не могут правильно создать 🙂
так останется только одно ядро процессора, не будет управления частотой и так далее
Верно, я поспешил.
Правильно, я обновил GRUB для поддержи uefi, а не ядро, и думал, что всё ок. Несколько раз всё выключилось отлично, даже после обновления приложений. Я побежал сюда на радостях писать что всё решилось, но через какой-то промежуток времени, не помню что я тогда делал, проблема вернулась снова.
Да, детальнее изучив вопрос я понял, что без поддержки efi, grub загрузиться вообще не может, что логично. У меня была мысль, что GRUB загружает систему в Legacy режиме(ошибочная, как я позже выяснил). Занимаюсь этом вопросом уже 5 день, крыша едет только так. Сопоставив все имеющиеся данные, понять что вызывает вышеописанную в теме ошибку практически невозможно. Попробую угадать ещё пару раз, потом, при неудачном исходе, наверное, заброшу идею на какое-то время. Устал копаться в том, что не понимаю. Откопаю мозги, почитаю литературу о структуре систем (читаю что написал до этого… волосы дыбом встают…), вот тогда уже сяду разбираться. Спасибо, в любом случае!
Re: Верно, я поспешил.
начни с азов. dmesg сюда ядро отправляет все свои сообщения – при включении компьютера, при его работе и его отключении. необязательно что там сразу будет указана причина, но по крайней мере это хоть что-то. про ACPI обычно там есть. потом есть ещё journalctl. здесь уже надо знать где искать, но и это обычно не проблема. и в твоём пакетном менеджере есть же какая-то история? какой пакет установился/обновился/удалился… сначала ядро, а там куда кривая вывезет.
Несколько раз всё выключилось отлично, даже после обновления приложений. Я побежал сюда на радостях писать что всё решилось, но через какой-то промежуток времени, не помню что я тогда делал, проблема вернулась снова.
скорее всего это (описание) может быть в journalctl, но я не уверен.
Спасибо за совет! На днях попробую.
Кстати, интересный факт, у меня выключаются только Debian системы. Выяснил на днях.
Источник
Как отключить режим сна и гибернации в Linux
В этой статье мы рассмотрим, как отключить режим гибернации и режим сна в системе Linux. Но прежде чем мы сделаем это, давайте кратко рассмотрим эти два режима.
Режим гибернации при его включении, система Linux записывает свое текущее состояние в файл. Далее при включении все эти данные восстанавливаются и вы продолжаете работу с места остановки. Т.е. все открытые документы, папки, файлы остаются в таком же состояние, как до режима гибернации.
Режим сна помогает экономить электроэнергию, когда вы не используете свою систему. Чтобы вернуться к использованию вашей системы, требуется просто щелкнуть мышью или нажать на любую кнопку клавиатуры. Иногда вам может потребоваться нажать кнопку питания.
В Linux есть 3 режима различных режима ожидания:
- Suspend to RAM (Ждущий режим): этот режим используют большинство ноутбуков. И автоматически входят в этот режим в случае бездействия по истечению определенного периода времени. А так же при закрытии крышки ноутбука, когда компьютер работает от аккумулятора. В этом режиме питание остается для оперативной памяти, а большинство компонентов отключаются.
- Suspend to Disk (Hibernate): в этом режиме состояние ПК сохраняется в файле подкачки, и система полностью выключается. Однако включив его, все восстанавливается и вы продолжаете с того места, где оставались.
- Suspend to both (Гибридная приостановка): здесь состояние машины сохраняется в swap, но система не выключается. А так же компьютер выполняет приостановку системы в ОЗУ. Если у вас не установлена батарея тогда, вы можете безопасно возобновить работу системы с диска и продолжить свою работу. Этот метод намного медленнее, чем приостановка работы в ОЗУ.
Отключить Режим сна и Гибернацию в Linux
Чтобы предотвратить ждущий режим или переход вашей системы Linux в спящий режим, вам необходимо отключить следующие systemd:
$ sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Вы должны получить вот такой результат, как показан ниже:
hybrid-sleep.target
Created symlink /etc/systemd/system/sleep.target → /dev/null.
Created symlink /etc/systemd/system/suspend.target → /dev/null.
Created symlink /etc/systemd/system/hibernate.target → /dev/null.
Created symlink /etc/systemd/system/hybrid-sleep.target → /dev/null.
Отключить ждущий режим и гибернацию в Ubuntu
Далее требуется перезагрузить систему и снова войти.
Проверьте были ли внесены изменения в систему с помощью команды:
$ sudo systemctl status sleep. target suspend.target hibernate.target hybrid-sleep. target
Из выходных данных мы видим, что все четыре состояния были отключены.
Включить режим сна и гибернацию в Linux
Чтобы снова включить ждущий режим и гибернации требуется выполнить команду:
$ sudo systemctl unmask sleep. target suspend.target hibernate.target hybrid-sleep. target
Вот такой результат вы должны получить:
Чтобы убедиться в том что команда выполнена корректна, введите команду:
$ sudo systemctl status sleep. target suspend.target hibernate.target hybrid-sleep. target
Если вы не желаете того чтоб ваш ноутбук при закрытии крышки уходил в режим ожидания (сна). Вам требуется отредактировать файл /etc/systemd / logind.conf.
$ sudo vim /etc / systemd/logind. conf
Добавьте в этот файл следующие строки:
[Login]
HandleLidSwitch=ignore
HandleLidSwitchDocked=ignore
Сохраните и закройте файл. Не забудьте перезагрузиться, чтобы изменения которые в сделали вступили в силу.
Заключение
На этом все, в этой статье я подробна рассмотрел как отключить ждущий режим (сна) и гибернации в вашей системе Linux. Очень надеюсь, что руководство было полезным.
Источник