通知および通知デーモンがウィンドウマネージャーで機能しない


13

Linuxスタンドアロンウィンドウマネージャー(Openbox、Awesome WMなど)では通知は機能しません。notification-daemonと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 表示されません。

私は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で通知デーモンを実行しようとしました:(sudo notification-daemon_name &私の場合sudo dunst &)、そしてsudo notify-send something、通知が動作します。しかし、以前のアクションのいずれかを非特権ユーザーとして実行しようとすると(ほとんどのプログラムは非特権ユーザーとして通知を送信することが重要です)、何も表示されません。

notification-daemon エラーまたは警告なしで動作することをまったく拒否します。

編集3:明らかに権限の問題です:ルートアクセスなしに通知を送信することはできません。クリーンリブート後:sudo notify-send "something"デーモンを手動で起動しなくても機能しますが、Gnomeまたは他のフルデスクトップ環境で可能なように、ルート権限なしで通知を送信できるようにするために、私(および起動したプログラム)はどうすればよいですか?


1
「notification-daemonをインストールしようとしました」とはどういう意味ですか?libnotifyこれでnotify-sendコマンドが提供されるため、インストールしましたか(これで十分です)。
-jasonwryan

この質問に適切に答えるには情報が少なすぎます。あなたが与えた唯一のエラーメッセージに基づいて、私はDBusが実行されていないため、接続するためにnotify-sendに何もないと思われます。「些細な通知」コードと正確なエラーを提供していただければ、回答に近づくことができるかもしれません。
msw

そこからサンプルコードを取得
IBr

私はダンストで成功しました。これ以上「接続拒否」メッセージはありません。
sshow

回答:


6

最後に自分で問題を解決しました。

私がやったことの指示を残します。

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

  1. Windowsマネージャー内からDbusにアクセスできない
  2. 通知デーモンはdbusからメッセージを取得できません

最初の問題解決策:

本当の問題は、私のWindowsマネージャーがlxdmから実行されたため、何らかの理由/etc/X11/xinit/xinitrc.dでlxdeセッション以外の構成ファイルがマージされないことです(LXDE dbusの場合、awesome wmの場合はそうではありません)。このフォルダーには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エージェントも正常に動作するはずです。


1
注:ディスプレイマネージャーは、.xinitrc/ Iで何もしないで、他のフレーバーの名前を忘れます。これらのファイルは同等であり(使用されるファイルはディストリビューションによって異なります)、起動時startxまたはxinitコンソールからのみ使用されます。おそらく、システムファイルが読み込まれるのは、LXDMではなくLXDEで発生するためです。
-strugee

説明をありがとう。自分で追加の設定をロードする必要があるようです。
IBr

はい、それを行う方法はデスクトップ環境/ wmに依存します。
-strugee

通常は、.xinitrc後で有効にしないバックグラウンドデーモンを起動するだけで(たとえば、自分で実行していない場合はこれgnome-sessionを実行します)、最後の行で、exec使用するWM /デスクトップ環境に関係なく、 。
13

0

これは答えではなく、次の質問の生成に役立つ可能性のある大きな説明です。

追加の詳細を追加していただきありがとうございます。おそらくアクセス許可の問題はありますが、残念ながらDBus Unixドメインソケットへの接続に必要なアクセス許可に問題がある可能性があります。

これを非ルートとして実行することを確認するには:

$ 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構成場所にある構成ファイルを疑いますが、それはあまり役に立たないことは知っています。


確かに私は得たconnect(4, {sa_family=AF_LOCAL, sun_path=@"/tmp/dbus-WC3XySChb5"}, 23) = -1 ECONNREFUSED (Connection refused) connect(4, {sa_family=AF_LOCAL, sun_path=@"/tmp/dbus-b3oei13hP2"}, 23) = -1 ECONNREFUSED (Connection refused)
-IBr

0

私にとっては、i3wmにnotify-osdとdunstをインストールするのに役立ちました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.