GNOME: надстройка при закрытии крышки ноутбука больше не работает после обновления 19.10

Я совершенно уверен, что раньше это работало безупречно в 19.04 (и в предыдущих версиях), но больше не работает после обновления версии до 19.10 (ядро 5.3.0-24, ThinkPad X1 Carbon gen 5 в случае, если это имеет значение).

У меня есть соответствующий переключатель, установленный в GNOME-Tweaks, и я также попытался вручную отредактировать /etc/systemd/logind.conf , как предлагается здесь , а именно раскомментировать и отрегулировать следующее строки, за которыми следует перезагрузка:

$ grep -v '^#' /etc/systemd/logind.conf
[Login]
HandleLidSwitch=suspend
HandleLidSwitchExternalPower=suspend
HandleLidSwitchDocked=suspend
LidSwitchIgnoreInhibited=yes

(строго говоря, требуется только первая, но, на всякий случай, я также добавил строки 2 и 3, а также # 4 для хорошей меры ...

Глядя на вывод systemctl status systemd-logind , я вижу следующее:

Dec 17 17:56:50 x1c5 systemd-logind[8959]: Lid closed.
Dec 17 17:57:03 x1c5 systemd-logind[8959]: Lid opened.

Итак, события крышки обнаруживаются правильно. Чтобы исключить любую проблему с самим процессом приостановки, я также установил свою мощность кнопку для приостановки в Настройках-> Power-> Suspend & Power Button, в целях тестирования. Нажатие кнопки питания теперь приводит к выводу systemctl status systemd-logind (после успешного цикла приостановки-возобновления ):

Dec 17 18:13:58 x1c5 systemd-logind[8959]: Power key pressed.
Dec 17 18:14:28 x1c5 systemd-logind[8959]: Delay lock is active (UID 121/gdm, PID 9215/gsd-power) but inhibitor timeout is reached.
Dec 17 18:14:39 x1c5 systemd-logind[8959]: Operation 'sleep' finished.

Итог: события крышки обнаруживаются правильно и приостановка работает безупречно - но не при закрытии крышки ...

Есть идеи, как мне вернуть к жизни функцию приостановки при закрытии крышки? Я, конечно, могу использовать обходной путь с помощью кнопки питания, но об этом слишком легко забыть и привести к перегреву ноутбука в сумке и т. Д.

--- отредактировано, чтобы добавить ---

из этого билета , хотя проблема не совсем такая, как описано. Вот дымящийся пистолет:

$ systemd-inhibit --list --mode=block
WHO       UID  USER      PID  COMM           WHAT                                                     WHY                                                         MODE 
gdm       121  gdm       2231 gsd-power      handle-lid-switch                                        External monitor attached or configuration changed recently block
gdm       121  gdm       2252 gsd-media-keys handle-power-key:handle-suspend-key:handle-hibernate-key GNOME handling keypresses                                   block
user      1000 user      3017 gsd-media-keys handle-power-key:handle-suspend-key:handle-hibernate-key GNOME handling keypresses                                   block

Это говорит о том, что закрытие крышки блокируется из-за «Подключен внешний монитор или конфигурация недавно изменена». Я подключаю свой ноутбук к монитору с помощью кабеля USB-C, но пока я пишу это, он был отстыкован и работал от батарей почти 3 часа (в настройках GNOME отображается только дисплей моего ноутбука, если он доступен). Однако похоже, что systemd или какой-либо другой компонент, ответственный за это, по-прежнему ошибочно полагает, что внешний дисплей подключен, и - согласно заявке - приостановка не поддерживается GNOME в таких сценариях ...

Интересно, что gsd-power Процесс (PID 2231) принадлежит gdm , а не моему UID. Его завершение восстанавливает функцию приостановки при закрытии крышки. Необходимо выяснить, почему этот процесс существует ... При фактическом подключении к внешнему дисплею systemd-ignit --list --mode = block сообщает о втором процессе gsd-power , принадлежащем интерактивный пользователь; что кажется правильным и достаточным.

1
задан 21 December 2019 в 14:14

2 ответа

По результатам исследований в конце вопрос, похоже, проблема вызвана тем, что GDM запускает избыточный процесс gsd-power. Это можно просто убить, как только вы войдете в систему. Вот как я это сделал:

  1. Создайте сценарий уничтожения следующим образом:

    script=~/bin/kill_gdm_gsd-power.sh
    кошка > $script << EOF
    #!/бин/ш
    sudo pkill -u gdm gsd-power
    EOF
    chmod 755 $ скрипт
    
  2. Вашей учетной записи должно быть разрешено запускать sudo pkill без запроса пароля (убедитесь, что вас это устраивает). Запустите sudo visudo -f /etc/sudoers.d/NOPASSWD и введите следующее

    Cmnd_Alias ​​PKILL = /usr/bin/pkill
    пользователь ВСЕ=(ВСЕ) NOPASSWD: PKILL
    

    (замените user выше своим собственным идентификатором пользователя)

  3. Откройте апплет запуска приложений GNOME (gnome-session-properties) и добавьте запись со своим скриптом, чтобы он запускается, как только вы входите в систему.

В идеале мы бы нашли способ полностью предотвратить запуск gsd-power, но я нашел это нетривиальным... Пожалуйста, поделитесь, если найдете способ получше.

Немного более чистое решение может состоять в том, чтобы подготовить пользовательский скрипт handle-lid-switch в соответствии с этим решением, но этот скрипт в первую очередь должен быть установлен для gdm, и это также может быть нетривиально...

Могут быть некоторые побочные эффекты при завершении процесса gsd-power gdm, например: если вы выйдете из системы и оставите ноутбук в GDM экран приветствия, но я думаю, что это не тот сценарий, с которым многие из нас столкнутся.

2
ответ дан 23 December 2019 в 18:01

Судя по ответу sxc731 sudo mv /usr/lib/systemd/gsd-power* / предотвратит запуск gsd-power при загрузке, я на всякий случай оставил его в корневом каталоге, но вы можете удалить его.

Я прокомментирую, если это помешает другим частям системы — скорее всего, все будет в порядке.

1
ответ дан 7 May 2020 в 06:25

Другие вопросы по тегам:

Похожие вопросы: