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つの部分で構成されています。
- Windows管理者からDbusにアクセスできません。
- 通知デーモンはdbusからメッセージを取得できません。
最初の問題に対する解決策:
本当の問題は、私のWindows管理者がlxdmで実行されており、何らかの理由で/etc/X11/xinit/xinitrc.d
lxdeセッション(クールな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_ADDRESS
dbusセッションが存在することを確認するための単純な整合性チェックとして使用できます(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プロキシもうまく動作すると思います。