解锁 X 屏幕 (KDE) 后运行命令

解锁 X 屏幕 (KDE) 后运行命令

当我下班时,我用 ctrl + l 锁定我的机器来锁定屏幕。当我回来时,我总是忘记登录jabber。有没有办法在屏幕解锁后运行命令?这是在 KDE 中。我不确定锁定机制是 X 功能还是 KDE 功能,所以我不知道该去哪里查找。

答案1

我希望在屏幕锁定/解锁时让 Banshee(Gnome 音乐播放器)暂停/取消暂停。我在banshee launchpad项目中找到了一张票:

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

有人创建了一个脚本,它会(通过 DBus)注意到屏幕是否(解锁)锁定,并触发 Banshee 暂停(解锁)。我对此脚本进行了一些小调整,并且已经使用了一段时间。我将更新后的副本添加到该票证中。

现在我知道这并不完全是你想要做的。但是您可能可以采用该 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包含一个示例 Perl 脚本来处理各种屏幕保护程序和屏幕锁定事件,如 BLANK、LOCK、UNBLANK 等。

这是 - 使用屏幕保护程序关闭和打开声音的示例:

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

相关内容