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

10

xautolock está claramente em execução :

$ 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

No entanto, quando tento bloqueá-lo :

$ xautolock -locknow
Could not locate a running xautolock.

Se eu acelerar outro xautolock , funciona:

$ 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 dá?

Até agora, já vi isso tanto na minha área de trabalho quanto no meu laptop. Por favor, note que pelo menos a primeira vez após o bloqueio de inicialização funciona bem. É somente depois de algum tempo ou evento desconhecido que ele começa a falhar.

Eu tenho não sido capaz de reproduzir isso de forma confiável. Ou seja, eu tentei as seguintes abordagens no meu laptop e, em ambos os casos, o atalho / comando do protetor de tela na verdade bloqueia a área de trabalho posteriormente:

  1. Feche a tampa
  2. Espere o computador hibernar
  3. Abra a tampa
  4. Pressione o botão de energia
  5. Forneça a senha de login seguida por Enter

e

  1. Bloqueie a área de trabalho
  2. As 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 acontece se messageToSend for verdadeiro e type != XA_INTEGER
  3. Parece que type está definido nas seguintes declaração:

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

Isso significa que se a execução xautolock for detectada pode depender da janela que está focada? Também estou me perguntando se essa ligação pode estar relacionada a esse bug conhecido :

  1. The -disable, -enable, -toggle, -exit, -locknow, -unlocknow, and -restart options depend on access to the X server to do their work. This implies that they will be suspended in case some other application has grabbed the server all for itself.

É possível que xautolock entre em conflito com xss-lock , e ambos estão usando slock ? Além da linha xautolock acima, também tenho esta linha no perfil .x :

xss-lock slock &

Como xautolock e xss-lock podem chamar slock , suspeito que o problema seja assim:

  • xautolock runs slock após 10 minutos de inatividade.
  • xss-lock também tenta executar slock após 10 minutos :

    $ xset q | grep --after-context=2 --line-regexp --fixed-strings 'Screen Saver:'
    Screen Saver:
      prefer blanking:  yes    allow exposures:  yes
      timeout:  600    cycle:  600
    
  • Apenas um slock client é gerado.
  • xss-lock mata o slock errado, o que causa xautolock a falhar ou desistir.

Como xss-lock pode detectar o repouso do laptop, eu gostaria de usá-lo em vez de xautolock , mas parece que não consigo fazer xss-lock funcionar com notify-send .

    
por l0b0 06.11.2015 / 09:34

1 resposta

3

Para mim, o processo xautolock ainda estava sendo executado em segundo plano, mas não estava ouvindo nenhum comando xautolock -locknow . Como mencionado por @jrm, um aplicativo deve estar suprimindo o "protetor de tela" . Para nós dois, isso ocorreu porque o mpv (player de vídeo) desativava o protetor de tela.

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

stop-screensaver=no

Se você não usa o mpv, pode ser outro aplicativo desabilitando o protetor de tela. Tente alguns dos mais usados para ver qual deles é.

Se você quiser impedir o bloqueio automático de tela durante a reprodução de 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.

Só mais uma coisa a tentar é a opção -resetsaver :

xautolock -resetsaver

Ou a opção -detectsleep :

xautolock -detectsleep
    
por 29.06.2017 / 06:05