Gajim:从“离开”到“有空”的状态更改不是随机的吗?

Gajim:从“离开”到“有空”的状态更改不是随机的吗?

我已在以下位置设置“5 分钟后离开”:

Gajim
  -> Preferences
    -> Status

这基本上按预期工作:5 分钟不活动后,我的状态自动更改为“离开”。当我回来并移动鼠标或在键盘上键入时,状态会变回“可用”。

但它只有 95% 的时间有效。有时,我回来,移动鼠标,但状态没有更改为“可用”。

这非常烦人,因为我每次回来都必须检查我的状态是否发生了变化。

为什么有时有效,但并不总是有效?是什么影响了这种行为?这只是 中的一个错误Gajim,还是我的系统上有什么可以解决这个问题?

我正在使用Debian Buster,并且gajim 1.1.2-2

为什么这么简单的事情不能可靠地工作?

编辑

我使用普通 Openbox 作为我的窗口管理器和slim登录管理器。我确实有 dbus 守护进程在运行。

但我没有任何 Gnome/KDE/... 桌面环境。我也没有屏保

答案1

即使在您用详细信息更新问题之前,我也会尝试回答您的问题。

分析

有这些空闲状态在加吉姆:

@unique
class IdleState(IntEnum):
    UNKNOWN = 0
    XA = 1
    AWAY = 2
    AWAKE = 3

您通常只考虑AWAKEAWAY。该UNKNOWN状态是一个通用状态,当您没有得到任何结果时设置该状态_get_idle_monitor(见下文)。 XA状态是延长离开 - 屏幕被锁定或者您有屏幕保护程序(仅适用于 Windows,有趣的是,当您使用 Gnome 或使用 XScreenSaver 时,您不能处于延长离开状态(它总是错误的))。

这就是 gajim 判断您是否仍在闲置的方式:

def _get_idle_monitor(self):
    if sys.platform == 'win32':
        return WindowsIdleMonitor()

    try:
        return DBusGnomeIdleMonitor()
    except GLib.Error as error:
        log.info('Idle time via D-Bus not available: %s', error)

        try:
            return XssIdleMonitor()
        except OSError as error:
            log.info('Idle time via XScreenSaverInfo '
                     'not available: %s', error)

由于您可能不使用 Windows,因此我将介绍DBusGnomeIdleMonitorXssIdleMonitor

如果您使用 Gnome,那么您可能正在使用这部分代码。我建议在调试模式下使用日志记录,这样您就可以从这部分代码中获取所有消息。

如果您看到此消息:

   except GLib.Error as error:
        log.warning(
            'org.gnome.Mutter.IdleMonitor.GetIdletime() failed: %s',
            error)

然后 gajim 在从您的环境中获取空闲时间时遇到问题(很难说出原因 - 可能 DBus 无法正常工作)。当然,您也可以看到该log.info('Idle time via D-Bus not available: %s', error)消息。

log.info('Idle time via XScreenSaverInfo not available: %s', error)如果您正在使用它,您应该会在此处看到该消息。这部分代码可以生成 OSError 消息,如果您的 XScreenSaver 或系统缺少某个重要部分,通常会发生这种情况。

您可能收到的错误消息:

 if libX11path is None:
   raise OSError('libX11 could not be found.')
 if libXsspath is None:
   raise OSError('libXss could not be found.')
 if self.dpy_p is None:
   raise OSError('Could not open X Display.')
 if extension == 0:
    raise OSError('XScreenSaver Extension not available on display.')
 if self.xss_info_p is None:
    raise OSError('XScreenSaverAllocInfo: Out of Memory.')

解决方案

如果你正在使用 Gnome 并且它并不总是有效,我会尝试安装 XScreenSaver也许这将是检测您的活动的更可靠的方法。

答案2

我在运行最小的 Gnomeless 设置时遇到了完全相同的问题!就我而言,解决方案如下:

apt install dbus-X11
dbus-launch gajim

显然,dbus单独安装并不会激活它,除非你跳过一些额外的障碍或其他东西。老实说,我不知道 D-Bus 是如何工作的,也不知道为什么需要它¯\_(ツ)_/¯

相关内容