私はDebianを使用しており、次のいずれかを実行しないと通知は表示されませんnotify-send
。 notify-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
。