X 화면 잠금 해제 후 명령 실행(KDE)

X 화면 잠금 해제 후 명령 실행(KDE)

퇴근할 때 화면을 잠그기 위해 Ctrl+L로 컴퓨터를 잠급니다. 돌아오면 항상 Jabber에 로그인하는 것을 잊어버립니다. 화면 잠금이 해제된 후 명령을 실행할 수 있는 방법이 있나요? 이것은 KDE에 있습니다. 잠금 메커니즘이 X 기능인지 KDE 기능인지 확실하지 않아서 어디를 봐야할지 모르겠습니다.

답변1

화면이 잠기거나 잠금 해제될 때 Banshee(Gnome 음악 플레이어)가 일시 정지/일시 정지 해제되도록 하고 싶습니다. Banshee Launchpad 프로젝트에서 티켓을 찾았습니다.

https://bugs.launchpad.net/banshee/+bug/237687

누군가 화면이 잠긴(해제) 경우 이를 알리고 Banshee 일시 중지(잠금 해제)를 트리거하는 스크립트를 (DBus를 통해) 만들었습니다. 나는 이 스크립트를 약간 조정하여 한동안 사용해 왔습니다. 업데이트된 사본을 티켓에 추가하겠습니다.

이제 나는 이것이 정확히 당신이 원하는 것이 아니라는 것을 압니다. 하지만 이미 화면 잠금/잠금 해제를 감지하고 있는 Python 스크립트를 가져와서 원하는 작업을 수행하도록 약간 변경할 수도 있습니다. 내가 아는 바로는 KDE 화면 보호기는 gnome 화면 보호기와 동일한 DBus 인터페이스를 지원합니다. KDE에 대한 최고의 문서는 다음과 같습니다:

http://quickgit.kde.org/?p=kde-workspace.git&a=blob&f=krunner/screensaver/saverengine.h

행운을 빌어요!

답변2

XScreenSaver의 솔루션은 다음과 같습니다.xscreensaver-command -watch

man xscreensaver-command다양한 화면 보호기 및 BLANK, LOCK, UNBLANK 등과 같은 화면 잠금 이벤트를 처리하는 샘플 Perl 스크립트가 포함되어 있습니다.

다음은 화면 보호기를 사용하여 소리를 끄고 켜는 예입니다.

       #!/usr/bin/perl

       my $blanked = 0;
       open (IN, "xscreensaver-command -watch |");
       while (<IN>) {
           if (m/^(BLANK|LOCK)/) {
               if (!$blanked) {
                   system "sound-off";
                   $blanked = 1;
               }
           } elsif (m/^UNBLANK/) {
               system "sound-on";
               $blanked = 0;
           }
       }

그러나 KDE가 XScreenSaver를 사용하는지 확실하지 않습니다.

답변3

mark-drago의 답변을 개선하기 위해 스크립트를 업데이트했습니다.

import dbus
from dbus.mainloop.glib import DBusGMainLoop
import os

def screensaver_changed(state):
  """This method is called when the screensaver starts/stops """
  screensaver = session_bus.get_object('org.freedesktop.ScreenSaver', '/ScreenSaver')
  active = screensaver.GetActive()
  print("ScreenSaver is " + ("on" if active else "off"))
  if not active:
    os.system("xkbcomp ~/.Xkeymap :0")

DBusGMainLoop(set_as_default=True)

session_bus = dbus.SessionBus()
session_bus.add_signal_receiver(screensaver_changed,'ActiveChanged','org.freedesktop.ScreenSaver')


from gi.repository import GLib

loop = GLib.MainLoop()
loop.run()

관련 정보