Gajim:從“離開”到“有空”的狀態變化不是隨機的嗎?
我在以下位置設置了“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
您通常只考慮
AWAKE
或AWAY
。該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,因此我將介紹
DBusGnomeIdleMonitor
和XssIdleMonitor
.如果您使用的是 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,這可能是檢測您的活動的更可靠方法。