Por que o bloqueio da área de trabalho para de funcionar depois de algum tempo?

Por que o bloqueio da área de trabalho para de funcionar depois de algum tempo?

xautolockestá claramente funcionando:

$ 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

Porém, quando tentobloqueie-o:

$ xautolock -locknow
Could not locate a running xautolock.

Se eu girar outro, xautolockfunciona:

$ 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

O que da?

Até agora eu já vi isso em meu desktop e laptop. Observe que pelo menos na primeira vez após o bloqueio de inicialização funcionar bem. Somente depois de algum tempo ou evento desconhecido é que ele começa a falhar.


Eu tenhonãofoi capaz de reproduzir isso de forma confiável. Ou seja, tentei as seguintes abordagens no meu laptop e em ambos os casos oatalho/comando do protetor de telana verdade, bloqueia a área de trabalho depois:

  1. Feche a tampa
  2. Espere o computador hibernar
  3. Abra a tampa
  4. Pressione o botão liga / desliga
  5. Forneça a senha de login seguida deEnter

e

  1. Bloqueie a área de trabalho
  2. Mesmas etapas acima

Rastreando o código:

  1. A linha que imprime a mensagem de erro:error1 ("Could not locate a running %s.\n", progName);
  2. Isso acontecese messageToSendé verdadeetype != XA_INTEGER
  3. Parecetypeestá definidona seguinte declaração:

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

Isso significa que a xautolockdetecção da corrida pode depender dojanelaisso está focado? Também estou me perguntando se esta chamada pode estar relacionada a issobug conhecido:

  1. As opções -disable, -enable, -toggle, -exit, -locknow, -unlocknow e -restart dependem do acesso ao servidor X para fazer seu trabalho. Isso implica que eles serão suspensos caso algum outro aplicativo tenha capturado o servidor sozinho.

É possível que xautolockentre em conflito com xss-lockambos os quais estão usando slock? Além da xautolocklinha acima eu também tenho issolinha em .xprofile:

xss-lock slock &

Como ambos xautolocke xss-lockpodem ligar slock, suspeito que o problema seja mais ou menos assim:

Como xss-lockposso detectar o sono do laptop, gostaria de usá-lo em vez de xautolock, mas não consigo trabalhar xss-lockcom ele notify-send.

Responder1

Para mim, o processo xautolock ainda estava rodando em segundo plano, mas não ouvia nenhum xautolock -locknowcomando. Conforme mencionado por @jrm,um aplicativo deve estar suprimindo o "protetor de tela". Para nós dois, isso ocorreu porque o mpv (reprodutor de vídeo) desativou o protetor de tela.

Para mpv, a correção é adicionar o seguinte a ~/.config/mpv/configou ~/.mpv/config:

stop-screensaver=no

Se você não usa mpv, pode ser outro aplicativo que está desativando o protetor de tela. Experimente alguns dos mais usados ​​para ver qual é.


Se você quiserevitar o bloqueio automático da tela durante a reprodução do vídeo, uma maneira comum é usar o recurso "cantos" do xautolock:

xautolock -corners 000- -cornersize 30

Com o comando acima, se você colocar o cursor do mouse no canto inferior direito da tela (dentro de um raio de 30px), o bloqueio automático será temporariamente desativado.


Mais uma coisa para tentar é a -resetsaveropção:

xautolock -resetsaver

Ou a -detectsleepopção:

xautolock -detectsleep

Responder2

Você pode usar xdg-screensaver lockmesmo quando xautolock -locknownão estiver funcionando.

informação relacionada