答案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