Sheykhnur |
|
Темы:
16
Сообщения:
244
Участник с: 05 февраля 2013
|
Намедни решил раскопать проблему выключения своего ноута, а именно: при выключении, если не дождаться завершения сессии графического окружения (кеды), закрытие крышки ноутбука приводит ко сну, а не к выключению. Если далее открыть крышку и разбудить, то завершение работы продолжится как ни в чём ни бывало и комп выключится. Долгие и мучительные раскопки вопроса привели к тому, что тут шалит powerdevil кед; совсем отказываться от него не хочу, т.к. в остальном он меня устраивает (определение заряда батареи, переход в разные режимы и т.д.). Что интересно, на lxde такой ерунды не было, но там и нет менеджера питания: всё под контролем logind. Дальнейшее расследование показало, что logind не реагирует ни на что, несмотря на то, что я настроил, чтобы датчиком крышки ноутбука и кнопкой питания он управлял сам. Если в настройках powerdevil в кедах выставить на закрытие крышки «сон», то он, как и полагается засыпает, когда крышка закрывается, но появляется данная проблема (если закрыть крышку быстрее, чем успели завершиться кеды во время выключения); если же выставить в значение «ничего не делать», то он действительно ничего не делает, только экран при закрытии гаснет, но и logind'у не отдаёт управление, сволочь. Дальше я выяснил, что происходит это по причине т.н. systemd-inhibit, который запрещает обработку logind'ом каких бы то ни было событий питания; таким образом настраивать /etc/logind.conf бесполезно. Гугление на эту тему привело к весьма туманным результатам: описывается апи systemd-inhibit; то, что это всё дело управляется через dbus и т.д. В мане systemd-inhibit описано только как создавать энти самые запреты, а как ими управлять (удалять, временно блокировать и т.д.) ни слова. Теперь вопрос: кто что знает по этому поводу? Либо как «объяснить» powerdevil'у, что мне нужно, чтобы события от кнопок управлялись logind'ом, либо как исправить переход в сон во время завершения работы (повторюсь: выключается нормально, если закрыть крышку после того, когда кеды завершились и появилась консоль с журналом завершения работы)?
[email protected]# cat /dev/ass > /dev/head
|
vasek |
|
Темы:
48
Сообщения:
11340
Участник с: 17 февраля 2013
|
Это читал Inhibitor Locks ? Попробуй выключить с опцией ... i ... из командной строки, например, systemctl poweroff -i
Ошибки не исчезают с опытом - они просто умнеют
|
vasek |
|
Темы:
48
Сообщения:
11340
Участник с: 17 февраля 2013
|
Если самому поставить block, например, на mc $ systemd-inhibit --mode=block mc $ systemd-inhibit --list То вижу, что lock на shutdown и просто выключить ноутбук не могу, пока не завершу mc$ systemctl poweroff Нужно или завершить работу mc или выключить командой systemctl poweroff -iУ тебя же там наворочено много всего И похоже все это прописывается при запуске powerdevil ...И думаю, что можно попробовать только два простых варианта …. из сложных не знаю - я в кедах не разбираюсь 1. Перед выключением убивать powerdevil (можно через команду, повешанную на клавишу) 2. Выключать как уже писал с опцией i - systemctl poweroff -i По другому снять lock не получится …..... или залазить в потроха и смотреть запуск этого powerdevil …. сам по себе же этот lock не врубается... PS ….. Пришла еще одна идея — попробовать в /etc/systemd/logind.conf раскомментировать опцию LidSwitchIgnoreInhibited и изменить параметр yes на no (это позволит systemd-inhibit блокировать уход в спящий режим при закрытии крышки ноутбука).... но, возможно, что ноутбук при этом просто и не выключится ...но попробовать стоит (с перегрузкой)
Ошибки не исчезают с опытом - они просто умнеют
|
Sheykhnur |
|
Темы:
16
Сообщения:
244
Участник с: 05 февраля 2013
|
vasek, спасибо за ответы, но дело в том, что logind игнорирует нажатия кнопок и переключения дисплея, т.к. взведены ингибиторы (даже с настроенными опциями в /etc/logind.conf, как вы писали выше; кстати, они и так установлены в yes по умолчанию), поэтому я и задал вопрос как отключить ингибиторы, т.е. позволить управление logind'у, в то же время не отключая powerdevil, другими словами — можно ли их как-нибудь подружить? :-) естественно, в эмуляторе терминала работает корректно, более того, корректно работает и штатное выключение через меню и кнопку (если выставить в настройках powerdevil выключение, у меня пока настроено "ничего не делать", чтобы убедиться, что это он виноват, собственно об этом и тема) вопрос в другом, что позволяя управление powerdevil, он некорректно обрабатывает закрытие крышки во время выключения, и переводит ноут в ждущий режим. Если дождаться, пока завершатся кеды (а с ними и powerdevil, соответственно) и появится ядреная консоль с логами завершения, то после этого крышку можно смело закрывать, — система выключится как положено. Соответственно, logind обрабатывает данное событие корректно (закрытие крышки во время выключения), а powerdevil нет. Вот и хотелось бы отобрать у него управление кнопками и оставить всё остальное, а кнопуи доверить logind'у :-))) уф, многабукафф)) надеюсь, смог объяснить.
[email protected]# cat /dev/ass > /dev/head
|
vasek |
|
Темы:
48
Сообщения:
11340
Участник с: 17 февраля 2013
|
В свое время немного гуглил об этих inhibitor (в чисто ознакомительном плане) … что за помнилось, так это наличие багов и иногда неуправляемости logind.conf — даже Поттеринг принимал участие в обсуждении (2-3 статьи с багами где то лежат в моей базе). И плюс к этому покапайся на BBS, там то же встречались топики на эту тему, в том числе упоминался и powerdevil. И кажется мне, что это все-таки больше похоже на баг ... Просьба - отписаться в случае решения проблемы или если нароешь что интересное.... PS … сейчас на BBS тупо, на скорую руку, вставил в строку поиска What: handle-power-key:handle-suspend-key:handle-hibernate-key:handle-lid-switch и выскочило несколько топиков
Ошибки не исчезают с опытом - они просто умнеют
|
Sheykhnur |
|
Темы:
16
Сообщения:
244
Участник с: 05 февраля 2013
|
Да, баг; только вот, сдаётся мне, это таки баг powerdevil kde, т.к. это он не справляется с обработкой события закрытия во время выключения :-) logind как раз таки нормально обрабатывает данную ситуацию (см. первый пост про вариант lxde, там у меня питание полностью отдано на откуп systemd :-) Кстати, vasek, зная вашу любовь к статистике: в systemd, в целом за время, что я с ним знаком (около четырёх лет) мало сталкивался с багами, по крайней мере, как админ --- По теме: вообще говоря, я немного неверно передал суть проблемы в названии. То, что моя проблема — баг powerdevil kde, это я знал изначально, но, т.к. исходники я читать не сильно умею, и учётной записью на девелоперском сайте кед не обладаю, код кде очень изменчивый, мне тупо пока лень с ними разбираться (да-да, лень матушка), а из-за короткого срока жизни кода вообще мало желания. Поэтому мне проще подпереть костылями посредством systemd-inhibitors: т.е. убрать запрет на управление питанием logind'у. В выводе команды это второй сервис, как следует из названия: Вот это мне нужно как-то выловить и удалить запрет. В этом суть моего вопроса. Как работают ингибиторы, я полагаю, разобрался, но исходя из манов, их можно только создать, а как удалить нигде не написано! Как я понял блокировки реализуются посредством DBus API [²]. С Dbus я пока особо не разбирался, но, видимо, там и зарыта собака. Может как-то оттуда нужно удалять эти строки; где прописаны эти конфиги, — с этим мне и предстоит разбираться. Уж не знаю что легче: разобраться с логикой powerdevil и исправить её, или разобраться с dbus :-) Скорее всего пойду по второму пути, т.к. DBus уже много где используется и нужно с ним разобраться.Источники: [1] [2] [3]
[email protected]# cat /dev/ass > /dev/head
|
Sheykhnur |
|
Темы:
16
Сообщения:
244
Участник с: 05 февраля 2013
|
Приехал домой, попробовал ваш совет отредактировать /etc/systemd/logind.conf и раскомментировал LidSwitchIgnoreInhibited, но оставил параметр yes, также изменил параметр PowerKeyIgnoreInhibited на yes, всё заработало, настройки powerdevil'а в отношении питания игнорируются, проверил ждущий режим и гибернацию, а также скрипт отложенной гибернации, всё работает. Спасибо за советы, тема закрыта! P.S.: ещё мой косяк был в том, что я предположил, что значения в закомментированных строчках /etc/systemd/logind.conf являются значениями по умолчанию и поэтому по-настоящему выставил эти значения только сегодня, приехав домой, после этого всё встало на свои места.
[email protected]# cat /dev/ass > /dev/head
|
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
Sheykhnurэто не косяк, ты все правильно предположил!!! https://www.freedesktop.org/software/systemd/man/logind.conf.html LidSwitchIgnoreInhibited= defaults to "yes".
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |