为什么桌面锁定在一段时间后停止工作?

l0b*_*0b0 16 arch-linux xorg awesome xautolock

xautolock显然正在运行

$ ps wafux | grep [x]autolock
user   21410  0.0  0.0  20124  2628 ?        S    Nov05   0:04 xautolock -time 10 -notify 30 -notifier notify-send --urgency low --expire-time=10000 -- 'Locking screen in 30 seconds' -locker slock
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试锁定它时

$ xautolock -locknow
Could not locate a running xautolock.
Run Code Online (Sandbox Code Playgroud)

如果我启动另一个xautolock它的工作原理:

$ xautolock -time 10 -notify 30 -notifier "notify-send --urgency low --expire-time=10000 -- 'Locking screen in 30 seconds'" -locker slock&
[2] 18828
$ ps wafux | grep [x]autolock
user   21410  0.0  0.0  20124  2628 ?        S    Nov05   0:04 xautolock -time 10 -notify 30 -notifier notify-send --urgency low --expire-time=10000 -- 'Locking screen in 30 seconds' -locker slock
user   18828  0.0  0.0  20124  2708 pts/1    S    08:30   0:00      \_ xautolock -time 10 -notify 30 -notifier notify-send --urgency low --expire-time=10000 -- 'Locking screen in 30 seconds' -locker slock
$ xautolock -locknow # Runs fine and locks the desktop
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?

到目前为止,我已经在台式机和笔记本电脑上看到了这一点。请注意,至少在启动锁定后的第一次工作正常。只有在某个未知时间或事件之后,它才开始失败。


我已经能够可靠地再现这一点。也就是说,我在我的笔记本电脑上尝试了以下方法,在这两种情况下,屏幕保护程序快捷方式/命令实际上都会在之后锁定桌面:

  1. 盖上盖子
  2. 等待计算机休眠
  3. 打开盖子
  4. 按下电源按钮
  5. 提供登录密码后跟 Enter

  1. 锁定桌面
  2. 和上面的步骤一样

跟踪代码:

  1. 打印错误消息的行error1 ("Could not locate a running %s.\n", progName);
  2. 如果messageToSend是真的,就会发生这种情况type != XA_INTEGER
  3. 它看起来像在以下语句中type设置

    (void) XGetWindowProperty (d, root, semaphore, 0L, 2L, False,
                               AnyPropertyType, &type, &format,
                               &nofItems, &after,
                               (unsigned char**) &contents);
    
    Run Code Online (Sandbox Code Playgroud)

这是否意味着是否xautolock检测到运行可以取决于聚焦的窗口?我还想知道此调用是否与此已知错误有关

  1. -disable、-enable、-toggle、-exit、-locknow、-unlocknow 和 -restart 选项依赖于对 X 服务器的访问来完成它们的工作。这意味着它们将被挂起,以防其他应用程序为自己占用了服务器。

是否可能与xautolock发生冲突xss-lock,两者都在使用slock?除了xautolock上面的行,我在 .xprofile 中还有这一

xss-lock slock &
Run Code Online (Sandbox Code Playgroud)

由于两个xautolockxss-lock可调用slock,我怀疑,这个问题是这样的:

由于xss-lock可以检测笔记本电脑睡眠,我想用它代替xautolock,但我似乎无法xss-lock使用notify-send.

Mat*_*haq 6

对我来说,xautolock 进程仍在后台运行,但它没有监听任何xautolock -locknow命令。正如@jrm 所提到的,应用程序必须抑制“屏幕保护程序”。对于我们俩来说,这是由于 mpv(视频播放器)禁用了屏幕保护程序。

对于 mpv,修复方法是将以下内容添加到~/.config/mpv/configor ~/.mpv/config

stop-screensaver=no
Run Code Online (Sandbox Code Playgroud)

如果您不使用 mpv,则可能是另一个禁用屏幕保护程序的应用程序。尝试一些常用的,看看它是哪一种。


如果要防止视频播放过程中自动锁屏,一种常用的方法是使用 xautolock 的“角落”功能:

xautolock -corners 000- -cornersize 30
Run Code Online (Sandbox Code Playgroud)

使用上述命令,如果您将鼠标光标放在屏幕右下角(半径 30 像素内),自动锁定将被暂时禁用。


要尝试的另一件事是以下-resetsaver选项:

xautolock -resetsaver
Run Code Online (Sandbox Code Playgroud)

-detectsleep选项:

xautolock -detectsleep
Run Code Online (Sandbox Code Playgroud)