web-dev-qa-db-ja.com

Gajim:「退席中」から「利用可能」へのステータスの変更がランダムに機能しませんか?

「5分後に離れて」を設定しました:

Gajim
  -> Preferences
    -> Status

これはほとんど期待どおりに機能します。5分間何も操作しないと、ステータスが自動的に「退席中」に変わります。戻ってマウスを動かすか、キーボードで入力すると、ステータスが「利用可能」に戻ります。

しかし、それは95%の時間しか機能しません。時々、戻ってきてマウスを動かしても、ステータスが「利用可能」にならないことがあります。

私は戻ってくるたびに自分のステータスが変化したかどうかを常に確認する必要があるため、これは非常に迷惑です。

なぜそれが時々機能するが、常に機能しないのですか?この動作には何が影響しますか?これは単にGajimのバグですか、それとも私のシステムでこれを修正するためにできることはありますか?

使ってます Debian Bustergajim 1.1.2-2

なぜそのような単純なことは確実に機能しないのですか?

[〜#〜]編集[〜#〜]

私はウィンドウマネージャーとしてプレーンなOpenboxを、ログインマネージャーとしてslimを使用しています。 dbusデーモンを実行しています。

しかし、Gnome/KDE/...デスクトップ環境はありません。スクリーンセーバーもありません

4
400 the Cat

詳細で質問を更新する前であっても、私はあなたの質問に答えようとします。

解析

これらは アイドルの状態 がgajimにあります:

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

通常、AWAKEまたはAWAYのみを検討します。 UNKNOWN状態は、__get_idle_monitor_から結果が得られないときに設定される一般的な状態です(以下を参照)。 XA状態は拡張されています-画面がロックされているか、スクリーンセーバーがあります(Windowsの場合のみ、面白いのは、Gnomeを使用しているとき、またはXScreenSaverを使用しているとき、拡張された状態にできないことです(常にfalseです)。 ))。

これが、まだアイドル状態かどうかを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をインストールしようとしますおそらく、アクティビティを検出するためのより信頼できる方法です。

3
tukan

最小限のGnomelessセットアップを実行すると、まったく同じ問題が発生しました!私の場合、解決策は次のとおりです:

_apt install dbus-X11
dbus-launch gajim
_

どうやら、dbusを単独でインストールしても、追加のフープなどにジャンプしない限り、アクティブ化されません。正直なところ、D-Busがどのように機能するのか、なぜそれが必要なのかさえわかりません¯\_(ツ)_/¯

0
hedgie