GNOME:自 19.10 升级以来,笔记本电脑盖关闭时的暂停功能不再起作用

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.

因此盖子事件被正确检测到。为了排除挂起过程本身的任何问题,我还在设置->电源->挂起和电源按钮中将电源按钮设置为挂起,以进行测试。按下电源按钮现在会导致输出以下内容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-inhibit --list --mode=block报告由交互用户拥有的第二个gsd-power进程;这看起来正确且充分。

答案1

根据问题末尾的调查,该问题似乎是由 GDM 运行冗余gsd-power进程引起的。只要您登录后即可终止该进程。以下是我所做的:

  1. 创建一个终止脚本,如下所示:

    script=~/bin/kill_gdm_gsd-power.sh
    cat > $script << EOF
    #!/bin/sh
    sudo pkill -u gdm gsd-power
    EOF
    chmod 755 $script
    
  2. 您的账户需要被允许sudo pkill在不输入密码的情况下运行(确保您对此感到满意)。运行sudo visudo -f /etc/sudoers.d/NOPASSWD并输入以下内容

    Cmnd_Alias PKILL = /usr/bin/pkill
    user ALL=(ALL) NOPASSWD: PKILL
    

    (将user以上内容替换为您自己的用户 ID)

  3. 打开 GNOME 启动应用程序小程序 ( gnome-session-properties) 并使用您的脚本添加一个条目,以便它在您登录时立即运行。

理想情况下,我们会找到一种方法来gsd-power完全阻止启动,但我发现这并不容易......如果您找到更好的方法,请提供意见。

handle-lid-switch一个稍微干净的解决方案可能是按照以下方式编写自定义脚本:此解决方案但该脚本主要必须为用户安装gdm,这也可能不是一件简单的事情......

终止 gdm 进程可能会产生一些副作用gsd-power,例如:如果您注销并将笔记本电脑留在 GDM 问候屏幕上,但我认为我们很多人都不会遇到这种情况。

答案2

根据 sxc731 的回答, sudo mv /usr/lib/systemd/gsd-power* /这将阻止 gsd-power 在启动时运行,我将其保存在根目录中以防万一,但您可以将其删除。

如果这会干扰系统的其他部分,我会发表评论——很可能不会有什么问题。

相关内容