Daemon notifikasi dan notifikasi tidak berfungsi pada window manager

13

Pemberitahuan tidak berfungsi pada manajer jendela mandiri Linux (Openbox, Awesome WM, dan yang serupa). Saya mencoba menginstal pemberitahuan-daemon dan dunst, tetapi mengirim dengan notify-send "something"tidak membuat jendela apa pun untuk muncul.

Saya mencoba menjalankan polkit-gnome-agent dan langsung menjalankan daemon notifikasi, tetapi tidak membantu (sementara yang lalu saya memecahkan masalah yang sama dengan cara ini, tetapi sekarang tidak melakukan apa-apa).

Tidak ada indikasi kesalahan kecuali saya mengirim notifikasi sepele dengan python, maka saya hanya mendapatkan pesan kesalahan samar: 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 Trivial C program tidak menghasilkan apa-apa (misalnya tidak ada kesalahan).

Saya menggunakan Archlinux dengan systemd dan d-bus, saya curiga ini masalah dengan polkit atau semacam daemon yang tidak berjalan di jendela manajer mulai, tetapi tidak tahu, apa yang bisa saya coba atau bagaimana saya bisa mendapatkan pesan kesalahan yang lebih bermakna.

EDIT: Saya mengambil kode sampel dari sana: https://wiki.archlinux.org/index.php/Libnotify#Python

Dbus harus dijalankan karena systemd memilikinya sebagai ketergantungan. Saya telah libnotifymenginstal - ini adalah paket yang menyediakan notify-send. Daemon notifikasi juga harus dimulai sesuai kebutuhan (hanya ketika notifikasi arives), dengan mengikuti file desktop /usr/share/dbus-1/services/org.freedesktop.Notifications.service:

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

Saya bahkan telah mencoba menjalankan daemon secara langsung (hanya mengeksekusi) dan mencoba mengirim notifikasi. Jika seseorang tahu bagaimana saya bisa mendapatkan saya info lebih lanjut, jangan ragu untuk menyarankan.

EDIT 2: Saya mencoba menjalankan daemon notifikasi dengan sudo: sudo notification-daemon_name &(dalam kasus saya sudo dunst &) dan sudo notify-send something, kemudian notifikasi berfungsi. Tetapi ketika saya mencoba melakukan tindakan sebelumnya sebagai pengguna tidakrivil (yang penting sebagian besar program mengirim pemberitahuan sebagai pengguna tidakrivil), tidak ada yang terlihat.

notification-daemon menolak untuk bekerja sama sekali tanpa kesalahan atau peringatan.

EDIT 3: Jelas itu adalah masalah izin: Saya tidak dapat mengirim pemberitahuan tanpa akses root. Setelah reboot bersih: sudo notify-send "something"berfungsi bahkan tanpa meluncurkan daemon secara manual, namun apa yang harus saya (dan program saya luncurkan) lakukan untuk dapat mengirim notifikasi tanpa hak root seperti yang dimungkinkan di Gnome atau lingkungan desktop penuh lainnya?

IBr
sumber
1
Apa yang dimaksud dengan "mencoba memasang pemberitahuan-daemon"? Apakah Anda menginstal libnotifykarena ini memberikan notify-sendperintah (yang Anda butuhkan)?
jasonwryan
Anda telah memberikan informasi yang terlalu sedikit untuk menjawab pertanyaan ini dengan benar. Berdasarkan pada satu-satunya pesan kesalahan yang Anda berikan, saya menduga bahwa DBus tidak berjalan dan dengan demikian tidak ada pemberitahuan untuk mengirim-kirim untuk terhubung. Jika Anda memberikan kode "pemberitahuan sepele" dan kesalahan yang sebenarnya, kami mungkin bisa mendekati jawaban.
msw
Saya mengambil kode sampel dari sana: wiki.archlinux.org/index.php/Libnotify#Python
IBr
Saya sukses dengan Dunst. Tidak ada lagi pesan "Sambungan ditolak".
sshow

Jawaban:

6

Akhirnya saya memecahkan masalah sendiri.

Saya akan meninggalkan instruksi apa yang saya lakukan.

Masalahnya terdiri dari dua bagian:

  1. Dbus tidak dapat diakses dari dalam windows manager
  2. Daemon notifikasi tidak dapat menerima pesan dari dbus

Solusi masalah 1:

Masalah sebenarnya adalah, bahwa windows manager saya dijalankan dari lxdm, yang karena beberapa alasan tidak menggabungkan file config dari /etc/X11/xinit/xinitrc.dkecuali untuk sesi lxde (dalam LXDE dbus berfungsi, dalam wm yang mengagumkan tidak). Di folder ini ada file bernama 30-dbusdengan konten berikut:

#!/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

Bagian kode ini mendefinisikan $DBUS_SESSION_BUS_ADDRESSvariabel yang menentukan port dbus untuk digunakan untuk berbagai aplikasi.echo $DBUS_SESSION_BUS_ADDRESSdapat digunakan sebagai pemeriksaan kewarasan sederhana untuk melihat apakah ada sesi dbus (harus mengembalikan file sesi dbus).

File konfigurasi dari folder ini dapat digabungkan dengan skrip shell sederhana pada awal sesi (kode diambil dari .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

Solusi masalah 2:

Saat dbus berjalan dan tersedia untuk program lain, masih memerlukan lebih banyak akses agar pemberitahuan berfungsi dengan baik, jadi saya perlu menjalankan agen polkit, karena Awesome WM tidak memilikinya. Saya telah memilih lxpolkit, karena saya sudah memiliki lingkungan yang hampir penuh. Dalam kasus saya, baru saja ditambahkan ke ~/.config/awesome/rc.luafile saya awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop"):, karena alasan tertentu tanpa baris ini, ia menolak untuk memulai secara default dengan lxdm.

Saya pikir agen polkit gnome harus bekerja dengan baik juga.

IBr
sumber
1
catatan: manajer tampilan Anda tidak dan tidak boleh melakukan apa pun dengan .xinitrc/ saya lupa apa yang disebut rasa lainnya. file-file itu setara (yang digunakan bervariasi oleh distro) dan hanya digunakan ketika Anda memohon startxatau xinitdari konsol. mungkin alasan mengapa file sistem dimuat adalah karena itu terjadi di LXDE, bukan LXDM.
strugee
Terima kasih atas klarifikasi. Tampaknya saya perlu melakukan konfigurasi aditional memuat sendiri.
IBr
ya, bagaimana Anda melakukannya tergantung pada lingkungan desktop / wm.
strugee
biasanya semua yang akan Anda lakukan .xinitrcadalah memulai daemon latar belakang yang tidak akan diaktifkan nanti (Anda akan melakukan ini jika Anda tidak memiliki mis. gnome-sessionmelakukannya untuk Anda), kemudian pada baris terakhir, execapa pun lingkungan WM / desktop yang Anda gunakan .
strugee
0

Ini bukan jawaban, hanya klarifikasi besar untuk mungkin membantu menghasilkan pertanyaan berikutnya.

Terima kasih telah menambahkan detail ekstra. Anda mungkin memiliki masalah izin, tetapi sayangnya kemungkinan dalam izin yang diperlukan untuk terhubung ke soket domain DBus Unix.

Untuk mengonfirmasi ini dijalankan sebagai non-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

kecuali Anda mungkin akan mendapatkan sesuatu seperti

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

Mengapa? Saya tidak punya ide. Saya tahu bahwa subsistem notifikasi telah mendapat perhatian lebih besar dalam komunitas pengembangan GNOME daripada yang pernah saya pikirkan seharusnya fitur yang sangat dangkal. Saya menduga beberapa file konfigurasi di zillion atau lebih lokasi konfigurasi GTK, tapi saya tahu itu tidak terlalu membantu.

msw
sumber
Memang saya dapatkanconnect(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

Bagi saya itu berhasil menginstal notify-osd dan dunst di i3wm.

anstue
sumber