ウィンドウマネージャで通知と通知デーモンが機能しません。

ウィンドウマネージャで通知と通知デーモンが機能しません。

Linuxスタンドアロンウィンドウマネージャ(Openbox、Awesome WMなど)では通知は機能しません。通知デーモンとDunstをインストールしようとしましたが、notify-send "something"送信すると何もポップアップしません。

polkit-gnome-agentを実行して通知デーモンを直接実行してみましたが、役に立ちませんでした(以前は同様の問題をこの方法で解決しましたが、今は何もしません)。

Pythonを使用して簡単な通知を送信しないと、エラー表示はありません。その後、あいまいなエラーメッセージのみが表示されます。

File "/usr/lib/python3.3/site-packages/gi/types.py", line 113, in function
    return info.invoke(*args, **kwargs)
gi._glib.GError: Could not connect: Connection refused

単純なCプログラムは何も印刷しません(例:エラーなし)。

私はsystemdとd-busでArchlinuxを使用していますが、ウィンドウマネージャの起動時に実行されていないpolkitまたはある種のデーモンに問題があるようですが、何を試すことができるか、またはより意味のあるエラー情報を取得する方法がわかりません。 。

編集する:私はそこからサンプルコードをインポートしました。https://wiki.archlinux.org/index.php/Libnotify#Python

systemdに依存関係があるため、Dbusが実行されている必要があります。インストールしましたlibnotify。提供されたパッケージですnotify-send。また、通知デーモンは、次のデスクトップファイルを介して要求時に(通知が届いたときにのみ)起動する必要があります/usr/share/dbus-1/services/org.freedesktop.Notifications.service

[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/bin/dunst

デーモンを直接実行(ただ実行)して通知を送信することもしました。より多くの情報を入手する方法をご存知の方は、いつでもご提案ください。

編集2:sudo notification-daemon_name &sudo:(私の場合はsudo dunst &)を使用して通知デーモンを実行してみたので、sudo notify-send something通知が機能しました。ただし、権限のないユーザーとして上記のいずれかの操作を実行しようとすると(ほとんどのプログラムが権限のないユーザーに通知を送信することが重要です)、何も表示されません。

notification-daemonエラーや警告なしに操作を完全に拒否します。

編集3:権限の問題のようです。ルートアクセスなしでは通知を送信できません。完全に再起動した後:sudo notify-send "something"デーモンを手動で起動する必要はありませんが、Gnomeや他のフルデスクトップ環境のようにroot権限なしで通知を送信するにはどうすればよいですか(そして私が起動するプログラムはありますか?)

答え1

最後に、私はその問題を自分で解決しました。

私がしたことについての指示を残します。

質問は2つの部分で構成されています。

  1. Windows管理者からDbusにアクセスできません。
  2. 通知デーモンはdbusからメッセージを取得できません。

最初の問題に対する解決策:

本当の問題は、私のWindows管理者がlxdmで実行されており、何らかの理由で/etc/X11/xinit/xinitrc.dlxdeセッション(クールなwmではなくLXDE dbusで動作)を除いて設定ファイルをマージしないことです。次の名前のファイルがあります30-dbus

#!/bin/bash

# launches a session dbus instance
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && type dbus-launch >/dev/null; then
  eval $(dbus-launch --sh-syntax --exit-with-session)
fi

コードのこの部分は、$DBUS_SESSION_BUS_ADDRESSさまざまなアプリケーションで使用されるdbusポートを定義する変数を定義します。echo $DBUS_SESSION_BUS_ADDRESSdbusセッションが存在することを確認するための単純な整合性チェックとして使用できます(dbusセッションファイルを返す必要があります)。

このフォルダの構成ファイルは、セッションの開始時に単純なシェルスクリプトとマージできます(コードはからインポートされます.xinitrc)。

#!/bin/bash

if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi

2番目の問題に対する解決策:

dbusは実行中で、他のプログラムでも使用できますが、通知が機能するにはまだアクセスが必要なため、Awesome WMにはそのような機能がないため、polkitエージェントを実行する必要があります。lxpolkitすでにほぼ完全なlxde環境を備えているので選択しました。私の場合は、私の~/.config/awesome/rc.luaファイルに追加するだけです。 awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop")何らかの理由でこの行がない場合、デフォルトではlxdmで始まることが拒否されます。

私はgnome polkitプロキシもうまく動作すると思います。

答え2

これは答えではなく、次の質問を生成するのに役立つ重要な説明です。

詳細を追加していただきありがとうございます。実際には権限の問題があるかもしれませんが、残念ながら、DBus Unixドメインソケットに接続するために必要な権限の問題かもしれません。

root以外のユーザーとして実行されていることを確認するには、次の手順を実行します。

$ strace -o /tmp/ns.out notify-send "why will this not connect"
$ grep '^connect' /tmp/ns.out
connect(4, {sa_family=AF_FILE, path=@"/tmp/dbus-6AIOJVWzCC"}, 23) = 0

次のようなものが得られない限り

connect(…) = -1 ECONNREFUSED  (Connection refused)

なぜ?わかりません。私は、通知サブシステムがそのように表面的に単純な機能について私が想像していたよりも、GNOME開発コミュニティからはるかに興味を持っていることを知っています。私は大量のGTK構成の場所にいくつかの構成ファイルがあると思いますが、それはあまり役に立たないことを知っています。

答え3

私には、i3wmに通知osdとDunstをインストールするのが効果的でした。

答え4

Dunstは設定ファイルを編集するだけで非常に簡単です。

私はjwmウィンドウマネージャを使用しており、jwmキーボードショートカットと競合するため、すべてのキーボードショートカットをコメントアウトする必要があります。

また、デフォルトではモニター0を選択してマウスの選択に従うので、そのうちの1つに注釈を付ける必要があります。

関連情報