【问题标题】:Use gnome-screensaver-command on python在 python 上使用 gnome-screensaver-command
【发布时间】:2013-03-30 00:38:42
【问题描述】:

我有以下代码来检查屏幕是否被锁定(使用 gnome-screensaver)

gnome-screensaver-command -q | grep "is active"

从这个链接,https://askubuntu.com/questions/17679/how-can-i-put-the-display-to-sleep-on-screen-lock 有一个关于在 shell 脚本上使用它的代码。但是如何在 python 中使用代码呢?并将其存储在一个变量中,无论它是否处于活动状态。

【问题讨论】:

    标签: python ubuntu-12.04 gnome


    【解决方案1】:

    您也可以通过D-Bus 与 gnome-screensaver 交谈:

    import dbus
    
    def screensaver_active():
        bus = dbus.SessionBus()
        screensaver = bus.get_object('org.gnome.ScreenSaver', '/')
        return bool(screensaver.GetActive())
    
    variable = screensaver_active()
    

    【讨论】:

      【解决方案2】:
      import dbus
      
      def screensaver_status():
          session_bus = dbus.SessionBus()
          screensaver_list = ['org.gnome.ScreenSaver',
                              'org.cinnamon.ScreenSaver',
                              'org.kde.screensaver',
                              'org.freedesktop.ScreenSaver']
          for each in screensaver_list:
              try:
                  object_path = '/{0}'.format(each.replace('.', '/'))
                  get_object = session_bus.get_object(each, object_path)
                  get_interface = dbus.Interface(get_object, each)
                  return bool(get_interface.GetActive())
              except dbus.exceptions.DBusException:
                  pass
      
      status = screensaver_status()
      print(status)
      

      这会捕获所有屏幕保护程序,而不仅仅是 Gnome。它也不会通过使用类似的东西来阻止

      *-screensaver-command
      

      【讨论】:

        【解决方案3】:

        你可以使用subprocess在Python中执行shell命令,然后grep它的stdout for is active这一行:

        def isScreenLocked():
            import subprocess
            com = subprocess.Popen(['gnome-screensaver-command', '-q'], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
            return "is active" in com.communicate()[0]
        

        【讨论】:

          猜你喜欢
          • 2011-05-25
          • 2016-05-07
          • 2021-05-02
          • 2020-02-08
          • 2013-11-19
          • 2012-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多