Desktop

Gajim:從“離開”到“有空”的狀態變化不是隨機的嗎?

  • July 6, 2020

我在以下位置設置了“5分鐘後離開”:

Gajim
 -> Preferences
   -> Status

這主要按預期工作:在 5 分鐘不活動後,我的狀態自動更改為“離開”。當我回來移動滑鼠或在鍵盤上鍵入時,狀態會變回“可用”。

但它只有 95% 的時間有效。有時,我回來移動滑鼠,但狀態不會變為“可用”。

這非常煩人,因為我每次回來都必須檢查我的狀態是否發生了變化。

為什麼它有時會起作用,但並非總是如此?什麼會影響這種行為?這僅僅是一個錯誤Gajim,還是我的系統上有什麼東西可以解決這個問題?

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

為什麼這麼簡單的事情不能可靠地工作?

編輯

我使用普通的 Openbox 作為我的視窗管理器和slim我的登錄管理器。我確實有 dbus 守護程序正在執行。

但我沒有任何 Gnome/KDE/… 桌面環境。我也沒有屏保

即使在您使用詳細資訊更新問題之前,我也會嘗試回答您的問題。

分析

gajim 中有以下空閒狀態:

@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 或 System 以某種方式失去了它的重要部分,通常會發生這種情況。

您可能會收到的錯誤消息:

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,這可能是檢測您的活動的更可靠方法。

引用自:https://unix.stackexchange.com/questions/587818