Arch-Linux

為什麼桌面鎖定在一段時間後停止工作?

  • May 22, 2020

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

但是,當我嘗試鎖定它時

$ xautolock -locknow
Could not locate a running xautolock.

如果我啟動另一個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

是什麼賦予了?

到目前為止,我已經在台式機和筆記型電腦上看到了這一點。請注意,至少在引導鎖定後的第一次工作正常。只有在某個未知的時間或事件之後,它才會開始失敗。


無法可靠地重現這一點。也就是說,我在筆記型電腦上嘗試了以下方法,在這兩種情況下,螢幕保護程序快捷方式/命令實際上會在之後鎖定桌面:

  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);

這是否意味著是否xautolock檢測到執行可以取決於聚焦的*視窗?*我也想知道這個呼叫是否與這個已知的錯誤有關:

  1. -disable、-enable、-toggle、-exit、-locknow、-unlocknow 和 -restart 選項取決於對 X 伺服器的訪問來完成它們的工作。這意味著它們將被掛起,以防其他一些應用程序為自己搶占了伺服器。

是否有可能與兩者xautolock發生衝突xss-lock,兩者都在使用slock?除了上面的行之外,我在 .xprofile 中xautolock也有這一行:

xss-lock slock &

由於xautolockand xss-lockcan call slock,我懷疑問題是這樣的:

$ xset q | grep --after-context=2 --line-regexp --fixed-strings 'Screen Saver:'
Screen Saver:
 prefer blanking:  yes    allow exposures:  yes
 timeout:  600    cycle:  600
  • slock實際上只產生了一個客戶端。
  • xss-lock殺死錯誤slock,導致xautolock崩潰或放棄。

由於xss-lock可以檢測到筆記型電腦的睡眠,我想用它代替xautolock,但我似乎無法xss-lock使用notify-send

對我來說,xautolock 程序仍在後台執行,但它沒有聽任何xautolock -locknow命令。正如@jrm 所提到的,應用程序必須抑制“螢幕保護程序”。對於我們倆來說,這是由於 mpv(影片播放器)禁用了螢幕保護程序。

對於 mpv,修復方法是將以下內容添加到~/.config/mpv/configor ~/.mpv/config

stop-screensaver=no

如果您不使用 mpv,則可能是另一個應用程序禁用了螢幕保護程序。嘗試一些常用的,看看它是哪一個。


如果要防止影片播放過程中自動鎖屏,一種常見的方法是使用 xautolock 的“角落”功能:

xautolock -corners 000- -cornersize 30

使用上述命令,如果您將滑鼠游標放在螢幕的右下角(30px 半徑內),自動鎖定將暫時禁用。


要嘗試的另一件事是-resetsaver選項:

xautolock -resetsaver

-detectsleep選項:

xautolock -detectsleep

引用自:https://unix.stackexchange.com/questions/241186