쉘/C++에서 화면 잠금 감지

쉘/C++에서 화면 잠금 감지

Ubuntu 14.04(GNOME)에서 실행되는 크로스 플랫폼 애플리케이션이 있습니다. 여기서 화면 보호기가 활성화되어 있는지 여부와 화면이 잠겨 있는지 여부를 확인해야 합니다.

다음을 통해 화면 보호기 정보를 얻을 수 있다는 것을 알았습니다.gnome-screensaver-command -q

하지만 화면 잠금을 감지하는 방법을 알 수 없는 것 같습니다. 예를 들어 Unity에서는 다음을 사용할 수 있습니다.

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

하지만 이는 Unity 전용 항목입니다. 그렇다면 Gnome 컴퓨터에서 이 정보를 얻는 방법에 대한 아이디어가 있습니까?

답변1

/org/gnome/SessionManager/Presence에 사용자 세션의 현재 상태가 포함되어 있음을 확인했습니다.

다음과 같이 호출할 수 있습니다.

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

빠른 배쉬 테스트:

#!/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

예를 들어 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!
}

답변2

위의 답변은 호출이 슬래시 대신 점을 원하기 때문에 Ubuntu 18.04에서 오류를 반환합니다. 향후 검색에 대한 오류 출력 포함:

전화 오류:

$ gdbus call -e -d org.gnome.SessionManager -o /org/gnome/SessionManager/Presence -m org.freedesktop.DBus.Properties.Get /org/gnome/SessionManager/Presence ss
Error: GDBus.Error:org.freedesktop.DBus.Error.InvalidArgs: No such interface '/org/gnome/SessionManager/Presence'
(According to introspection data, you need to pass 'ss')

작업 구문의 예:

$ gdbus call -e -d org.gnome.SessionManager -o /org/gnome/SessionManager/Presence -m org.freedesktop.DBus.Properties.Get org.gnome.SessionManager.Presence status
(<uint32 0>,)

잠긴 경우 출력:

$ sleep 10; gdbus call -e -d org.gnome.SessionManager -o /org/gnome/SessionManager/Presence -m org.freedesktop.DBus.Properties.Get org.gnome.SessionManager.Presence status
(<uint32 3>,)

문서https://people.gnome.org/~mccann/gnome-session/docs/gnome-session.html#org.gnome.SessionManager.Presence

관련 정보