通知デーモンをサービスとして開始

通知デーモンをサービスとして開始

私はDebianを使用しており、次のいずれかを実行しないと通知は表示されませんnotify-sendnotify-send

# either:
/usr/lib/notification-daemon/notification-daemon
# or:
/usr/lib/notify-osd/notify-osd

私はこれらのうちの1つを私のシェルで作業するのではなく、サービスとして実行したいと思います。ただし、/etc/init.d(スケルトンをテンプレートとして使用)から起動スクリプトを生成するときにサービスを開始しようとすると、次の出力が生成され、notify-send通知は表示されません。

(通知デーモン: 14467): Gtk - 警告**: ディスプレイを開けません:

答え1

/etc/init.dプライベートログインセッション用のサービスを開始する場合は、システム全体の起動スクリプトでスクリプトを制御します。すべてのユーザーのすべてのログインセッションに対してこれを行う方法はいくつかありますが、システムの設定方法によって異なります。もう一度お話しますが、プライベートログインセッションに対してこれを行う方法はいくつかありますが、使用しているセッションの種類によって異なります。 (例:GNOME、XFCE、KDE、fvwmなど)

/usr/lib/notify-osd/notify-osd起動時に起動するようにセッションマネージャ、デスクトップ環境、またはウィンドウマネージャを設定したい場合があります。たとえば、xsessionを介してfvwmを使用するので、設定ファイルは~/.xsession次のようになります。

#!/bin/sh

# Other programs I need at startup like xscreensaver and urxvtd ...

/usr/lib/notify-osd/notify-osd &

exec fvwm

答え2

「ディスプレイを開くことができません」とは、バイナリで実行されていないXサーバーが必要であることを意味します。notify-send開始するには、起動スクリプトを変更する必要があります。後ろにXサーバー。問題があればスクリプトを投稿してください。

答え3

@elbの答えに追加:

その行を追加すると、~/.xsessionログインできない時点までコンピュータの自動ログインが中断されました(.xsessionログインするたびにファイルが読み取られ続けるためです)。

~/.xsessionrc代わりに、以前に私のシステムに存在しなかったファイルに同じコンテンツを入れました。しかし、効果がありました!

答え4

次のシステム単位ファイルを追加します。

# ~/.config/systemd/user/notification-daemon.service
[Unit]
Description=Notification Daemon
After=display-manager.service

[Service]
Restart=on-failure
RestartSec=1
ExecStart=/usr/lib/notification-daemon-1.0/notification-daemon

[Install]
WantedBy=default.target

display-manager.serviceシステムによって異なる場合があるため、XAfterサーバーを起動できるようにすることが重要です。

ユーザーとして以下を実行します。

systemctl --user enable --now notification-daemon.service

これは両方を行うの--nowと同じようにオプションですstart

関連情報