我非常肯定这在 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.
所以盖子事件被正确检测到。为了排除挂起过程本身的任何问题,我还在设置->电源->挂起和电源按钮中将电源按钮设置为挂起,以进行测试。现在按下电源按钮会导致以下输出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)归我的 UID 所有,gdm
而不是我的 UID。杀死它会恢复暂停盖子关闭功能。需要弄清楚为什么存在这个进程......当实际连接到外部显示器时,systemd-inhibit --list --mode=block
报告gsd-power
交互式用户拥有的第二个进程;这似乎是正确和充分的。
根据问题末尾的调查,该问题似乎是由 GDM 运行冗余
gsd-power
进程引起的。这可以在您登录后立即被杀死。这是我的做法:创建一个kill脚本如下:
需要允许您的帐户在
sudo pkill
没有密码提示的情况下运行(确保您对此感到满意)。运行sudo visudo -f /etc/sudoers.d/NOPASSWD
并输入以下内容(
user
上面替换为您自己的用户ID)打开 GNOME 启动应用程序小程序 (
gnome-session-properties
) 并在您的脚本中添加一个条目,以便在您登录后立即运行。理想情况下,我们会找到一种
gsd-power
完全阻止启动的方法,但我发现这并不简单……如果您找到更好的方法,请加入。一个稍微干净的解决方案可能是根据此解决方案
handle-lid-switch
编写自定义脚本,但脚本主要必须为用户安装,这也可能不是微不足道的......gdm
杀死 gdm 的进程可能会有一些副作用
gsd-power
,例如:如果您注销并将笔记本电脑留在 GDM 问候屏幕,但我认为这不是我们许多人会遇到的情况。根据 sxc731 的回答
sudo mv /usr/lib/systemd/gsd-power* /
将阻止 gsd-power 在启动时运行,我将其保存在根目录中以防万一,但您可以将其删除。如果这与系统的其他部分混淆,我会发表评论——很可能会没事的。