xfdesktop 不活动后出现错误“所有屏幕锁定工具均未成功运行,屏幕将不会被锁定”

xfdesktop 不活动后出现错误“所有屏幕锁定工具均未成功运行,屏幕将不会被锁定”

我在笔记本电脑上使用 lightdm 和 xfce。这是新安装的。每次屏幕因不活动而关闭(或合上盖子)时,我都会看到 lightdm 登录屏幕。但是,在我登录后,几秒钟后,会弹出一个标题为“错误”的窗口。

如果我关上盖子,解锁,然后在几秒钟后再次关上盖子,我也会看到错误。我甚至不知道错误来自哪里。

错误信息“所有屏幕锁定工具均未成功运行,屏幕将不会被锁定”

答案1

我并没有专门使用 ArchLinux,但由于可能不同的原因(目前我不清楚),这个问题在运行 XFCE DE 的不同发行版上不断出现。最近,当我在 Ubuntu 上安装时,它出现了克莱特。禁用 Clight 后,锁定可以正常工作。

默认情况下xfce4-power-manager不会将任何有用的输出记录到syslog.xsession-errors。为了解决问题,请终止自动启动的守护程序并在调试模式下在前台启动:

~$ xfce4-power-manager --quit
~$ xfce4-power-manager --no-daemon --debug

当出现以下消息时xfce_screensaver_lock调用自xfpm_power_sleep或者xfpm_manager_lid_changed_cb并返回失败:

所有屏幕锁定工具均未成功运行,屏幕将不会被锁定。是否仍要继续暂停系统?

因此,请检查您的屏幕保护程序、xfconf-query -c xfce4-session -p /general/LockCommand设置和命令:xflock4、、xdg-screensaver等等xscreensaver-command

Lock screen when system is going to sleep但是一个简单的解决方案是根本不使用 XFCE 电源管理器的设置。定义一个systemd服务以在进入睡眠和/或休眠状态之前运行锁定命令。另一个好处是,即使您从命令行暂停系统,这也会锁定屏幕。

# /etc/systemd/system/[email protected]

[Unit]
Description=Autolock screen before sleep, hibernate and hybrid-sleep
Before=sleep.target hibernate.target hybrid-sleep.target

[Service]
User=%i                       # may also hardcode username here
Type=forking
Environment=DISPLAY=:0        # replace this with your $DISPLAY value
ExecStart=/usr/bin/xtrlock    # use whatever lock command
ExecStartPost=/bin/sleep 1

[Install]
WantedBy=sleep.target hibernate.target hybrid-sleep.target

启用服务:

~$ sudo systemctl enable screen_lock@<username>.service

答案2

我也受到了这个的影响有一些但不是全部我的 Debian Buster 安装(xfce4-power-manager v1.6.1-1)。没有深入研究,但通过将源代码更改为“修复”了它总是调用 xflock4:在xfce-screensaver.c修改函数中xfce_screensaver_lock它看起来像:

gboolean
xfce_screensaver_lock (XfceScreenSaver *saver)
{
  /* maybe better use whole code of SCREENSAVER_TYPE_OTHER... */
  g_spawn_command_line_async ("xflock4", NULL);
  return TRUE;
}

我正在使用 mate-screensaver(是的,在 xfce 中) 并怀疑由于某种原因g_dbus_proxy_call_sync失败case SCREENSAVER_TYPE_MATE了......

答案3

就我而言,问题是在场肉桂屏幕保护程序DBus 服务文件,即使它没有运行。dbus-monitor --session | grep -v '^ '当我尝试暂停时,我通过运行查看 DBus 上的消息发现了这一点,并且看到Lock命令被发送到,org.cinnamon.ScreenSaver即使我没有使用 cinnamon-screensaver —— 这看起来很可疑。我还看到了一条错误消息,就像Type of message, "(yb)", does not match expected type "(b)"使用另一个暂停路径时一样(通过键盘快捷键/xfce4-session)。

由于我没有使用 Cinnamon,所以我的解决方法是卸载 cinnamon-screensaver删除使 XFCE 混淆的 DBus 配置文件:

$ sudo apt purge cinnamon-screensaver
$ grep -r org.cinnamon.ScreenSaver /usr/share/dbus-1/
  # should not find any matches
# now re-login to make sure the session-wide DBus picks up the change

答案4

这个问题也在这里讨论: https://gitlab.xfce.org/xfce/xfce4-power-manager/-/issues/142

根据所引用的问题,该问题可能是由于 D-Bus 接口org.freedesktop.ScreenSaver没有名为 的方法引起的Lock

Sebastian @giwiniswut 将此问题总结如下:

  • 如果通过 D-Bus 接口锁定屏幕失败,xfce4-power-manager 不会尝试退回到用户指定的
    命令行。[...]
  • xfce4-power-manager 支持许多特定的屏幕保护程序 D-Bus 接口,但优先使用
    org.freedesktop.ScreenSaver。
    提供此接口但没有公开其所有方法的屏幕保护程序将无法正常工作。这目前影响 Cinnamon 和
    GNOME 屏幕保护程序,但可能也会影响 MATE 屏幕保护程序。目前没有提议的补丁来改变此行为。

就我而言,这也会影响xscreensaver

我为 Arch Linux 创建了一个 AUR 包,它使用了@maratbn 在链接问题中建议的补丁:

https://aur.archlinux.org/packages/xfce4-power-manager-git-xsccomp

这解决了我的问题。

该补丁似乎只是一个临时解决方案。它使 xfce4-power-manager 处理SCREENSAVER_TYPE_FREEDESKTOP与此相同的情况SCREENSAVER_TYPE_OTHER,从而调用xfconf LockCommand

编辑:不幸的是,这似乎不能可靠地工作。在我的系统上,从挂起状态恢复后,xfce4-power-manager 会产生无数的 xflock4 进程。

EDIT2:对我来说,当xfce4-session/general/LockCommand 设置xfconf

xscreensaver-command -lock

相关内容