Я совершенно уверен, что раньше это работало безупречно в 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
, принадлежащем интерактивный пользователь; что кажется правильным и достаточным.
По результатам исследований в конце вопрос, похоже, проблема вызвана тем, что GDM запускает избыточный процесс gsd-power
. Это можно просто убить, как только вы войдете в систему. Вот как я это сделал:
Создайте сценарий уничтожения следующим образом:
script=~/bin/kill_gdm_gsd-power.sh
кошка > $script << EOF
#!/бин/ш
sudo pkill -u gdm gsd-power
EOF
chmod 755 $ скрипт
Вашей учетной записи должно быть разрешено запускать sudo pkill
без запроса пароля (убедитесь, что вас это устраивает). Запустите sudo visudo -f /etc/sudoers.d/NOPASSWD
и введите следующее
Cmnd_Alias PKILL = /usr/bin/pkill
пользователь ВСЕ=(ВСЕ) NOPASSWD: PKILL
(замените user
выше своим собственным идентификатором пользователя)
Откройте апплет запуска приложений GNOME (gnome-session-properties
) и добавьте запись со своим скриптом, чтобы он запускается, как только вы входите в систему.
В идеале мы бы нашли способ полностью предотвратить запуск gsd-power
, но я нашел это нетривиальным... Пожалуйста, поделитесь, если найдете способ получше.
Немного более чистое решение может состоять в том, чтобы подготовить пользовательский скрипт handle-lid-switch
в соответствии с этим решением, но этот скрипт в первую очередь должен быть установлен для gdm
, и это также может быть нетривиально...
Могут быть некоторые побочные эффекты при завершении процесса gsd-power
gdm, например: если вы выйдете из системы и оставите ноутбук в GDM экран приветствия, но я думаю, что это не тот сценарий, с которым многие из нас столкнутся.
Судя по ответу sxc731
sudo mv /usr/lib/systemd/gsd-power* /
предотвратит запуск gsd-power при загрузке, я на всякий случай оставил его в корневом каталоге, но вы можете удалить его.
Я прокомментирую, если это помешает другим частям системы — скорее всего, все будет в порядке.