Detectar trava de tela no shell / c ++

2

Eu tenho um aplicativo multi-plataforma que roda no Ubuntu 14.04 (GNOME). Lá eu preciso determinar se o protetor de tela está ativo ou não e se a tela está bloqueada ou não.

Descobri que posso obter as informações do protetor de tela com: gnome-screensaver-command -q

Mas não consigo descobrir como posso detectar um bloqueio de tela. Por exemplo, no Unity, posso usar:

gdbus call -e -d com.canonical.Unity -o /com/canonical/Unity/Session -m com.canonical.Unity.Session.IsLocked

mas esse é um item específico da unidade. Então, alguma idéia de como obter essa informação nas máquinas Gnome?

    
por Mathieu 31.10.2014 / 09:01

1 resposta

1

Descobriu que / org / gnome / SessionManager / Presence contém o status atual da sessão do usuário.

Pode ser chamado por isso:

gdbus call -e -d org.gnome.SessionManager -o /org/gnome/SessionManager/Presence -m org.freedesktop.DBus.Properties.Get /org/gnome/SessionManager/Presence status

Teste rápido de bash:

#!/bin/bash
while true; do
 echo "PRESENCE "
gdbus call -e -d org.gnome.SessionManager -o /org/gnome/SessionManager/Presence -m org.freedesktop.DBus.Properties.Get /org/gnome/SessionManager/Presence status
        echo -e "\n"
        sleep 1
done

Por exemplo, em Qt:

QProcess process;
process.start("sh", QStringList() << "-c"<< "gdbus call -e -d org.gnome.SessionManager -o /org/gnome/SessionManager/Presence -m org.freedesktop.DBus.Properties.Get /org/gnome/SessionManager/Presence status");
process.waitForFinished();
result = QString::fromLatin1(process.readAllStandardOutput());
int state = result.remove("(<uint32 ").remove(">,)").toInt();
if(state != 0) {
    // user not active!
}
    
por Mathieu 08.01.2015 / 10:14