Como desativo programaticamente o bloqueio de tela do KDE?

3

Eu quero escrever um script de shell que desabilite o bloqueio de tela do KDE, durma um pouco e, em seguida, reative-o. Mas eu não sei um comando shell para controlar o bloqueio de tela. Como posso fazer isso?

    
por MJD 27.07.2016 / 17:16

2 respostas

3

Verifica-se que o bloqueio de tela pode ser controlado através do mecanismo RPC D-Bus. Você pode enviar consultas e comandos via D-Bus usando o comando qdbus . Os métodos endereçáveis são agrupados em objetos, que pertencem aos serviços. Correndo

qdbus

imprime uma lista de serviços e você pode ver essa lista para encontrar o serviço de bloqueio de tela, que é org.freedesktop.ScreenSaver . Então

qdbus org.freedesktop.ScreenSaver

imprime uma lista de objetos endereçáveis no serviço de proteção de tela, que inclui /MainApplication . (Também inclui /ScreenSaver e, embora tenha vários métodos úteis, não tem o que eu queria.)

qdbus org.freedesktop.ScreenSaver /MainApplication

imprime uma lista de métodos que podem ser chamados e seus argumentos e tipos de retorno. Aquele que você quer aqui é

method void org.kde.KApplication.reparseConfiguration()

O próprio arquivo de configuração está em $HOME/.kde/share/config/kscreensaverrc e está em um formato simples. Você pode editar este arquivo (programaticamente, se desejado) e, em seguida, invocar

qdbus org.freedesktop.ScreenSaver /MainApplication  reparseConfiguration

para reconfigurar o bloqueio de tela com a nova configuração.

O script de shell completo é:

timeout=${1:-3600}
perl -i -lpe 's/^Enabled=.*/Enabled=False/' $HOME/.kde/share/config/kscreensaverrc
qdbus org.freedesktop.ScreenSaver /MainApplication reparseConfiguration
sleep $timeout
perl -i -lpe 's/^Enabled=.*/Enabled=True/' $HOME/.kde/share/config/kscreensaverrc
qdbus org.freedesktop.ScreenSaver /MainApplication reparseConfiguration

Frew Schmidt também apontou que muitas vezes há uma configuração de sistema separada que atribui funções a certas posições de ponteiro do mouse, de modo que é possível desativar temporariamente o bloqueio de tela colocando o ponteiro no canto superior direito, ou o que for. No KDE isso é controlado em Configurações do Sistema → Comportamento do Espaço de Trabalho → Bordas da Tela.

    
por MJD 27.07.2016 / 17:16
2

Eu estava procurando o mesmo problema e encontrei sua pergunta aqui, mas sua solução não funcionou sem modificações no KDE 5.9, então continuei a pesquisar e encontrei o seu post de blog . Eu segui seus passos e fiz o trabalho:

switch-screenlocker() {
    enabled=""
    case "$1" in
        'on')  enabled='true'  ;;
        'off') enabled='false' ;;
    esac
    if [ -z "${enabled}" -o "$#" -ne 1 ]; then echo "Usage: $0 { on | off }"; return -1; fi
    sed -ni "/Autolock=.*/!{s/\[Daemon]/[Daemon]\nAutolock=${enabled}/;p}" ~/.config/kscreenlockerrc
    qdbus org.freedesktop.ScreenSaver /ScreenSaver configure
}

Eu mudei:

  1. localização do arquivo de configuração ~/.kde/share/config/kscreensaverrc~/.config/kscreenlockerrc
  2. comando de substituição. Eu prefiro sed over perl , mas a mudança significativa é para fazê-lo funcionar quando não houver Autolock=true line na configuração. kcmshell5 screenlocker o remove, pois é assumido por padrão
  3. eu o envolvi em função

UPDATE : Parece que o tempo limite de 5 minutos também é padrão e, se o tempo limite estiver definido para cinco minutos e o bloqueio estiver ativado, toda a seção [Daemon] poderá estar faltando. Eu não encontrei uma maneira de lidar com essa situação com sed facilmente, mas aqui está um comando awk que lida com isso:

awk -i inplace 'function p(){set=1;print "[Daemon]\nAutolock='${enabled}'"}
/\[Daemon]/{p();next}
/Autolock.*/{next}
{print}
ENDFILE{if(!set){print "";p()}}' ~/.config/kscreenlockerrc
    
por Grief 22.03.2017 / 00:32