Bildirimler ve bildirim arka plan programı pencere yöneticisinde çalışmıyor


13

Bildirimler Linux bağımsız pencere yöneticilerinde (Openbox, Awesome WM ve benzeri) çalışmaz. Ben bildirim-arka plan programı ve dunst yüklemeye çalıştım, ancak ile göndermek notify-send "something"pop-up için herhangi bir pencere yapmaz.

Polkit-gnome-agent'ı çalıştırmayı ve doğrudan bildirim cinlerini çalıştırmayı denedim, ancak yardımcı olmuyor (daha önce benzer sorunu bu şekilde çözdüm, ancak şimdi hiçbir şey yapmıyor).

Python ile önemsiz bildirim göndermedikçe herhangi bir hata göstergesi yok, o zaman sadece belirsiz hata mesajı alıyorum: 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 Önemsiz C programı hiçbir şey (örneğin hata yok) çıktı.

Archlinux'u systemd ve d-bus ile kullanıyorum, bunun polkit veya pencere yöneticisi başlangıcında çalışmayan bir tür daemon ile ilgili bir sorun olduğundan şüpheleniyorum, ancak hiçbir fikrim yok, ne deneyebilirim veya nasıl daha anlamlı hata mesajları alabilirim.

EDIT: Örnek kodu oradan aldım: https://wiki.archlinux.org/index.php/Libnotify#Python

Dbus çalışıyor olmalı, çünkü systemd bağımlılık yapıyor. Ben var libnotifyyüklü - sağladığı pakettir notify-send. Ayrıca bildirim arka plan programı, aşağıdaki masaüstü dosyasını kullanarak gerektiği şekilde başlatılmalıdır (yalnızca bildirim geldiğinde) /usr/share/dbus-1/services/org.freedesktop.Notifications.service:

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

Hatta cinleri doğrudan çalıştırmayı (sadece yürütmeyi) denedim ve bildirim göndermeyi denedim. Eğer somenone bana nasıl daha fazla bilgi edinebileceğimi biliyorsa, lütfen tereddüt etmeyin.

EDIT 2: sudo: sudo notification-daemon_name &(benim durumumda sudo dunst &) ile bildirim arka plan programı çalıştırmayı denedim ve sudo notify-send somethingsonra bildirim çalışıyor. Ancak önceki eylemlerden herhangi birini ayrıcalıksız kullanıcı olarak yapmaya çalıştığımda (çoğu programın ayrıcalıksız kullanıcı olarak bildirim göndermesi önemlidir), hiçbir şey göstermez.

notification-daemon herhangi bir hata veya uyarı olmadan çalışmayı reddeder.

EDIT 3: Açıkça bu izinler sorunudur: Kök erişimi olmadan bildirim gönderemiyorum. Temiz yeniden başlatmadan sonra: sudo notify-send "something"herhangi bir arka plan resmi manuel olarak başlatmadan bile çalışır, ancak Gnome veya diğer tam masaüstü ortamlarında mümkün olduğu gibi kök ayrıcalıkları olmadan bildirim gönderebilmek için ne yapmalıyım?


1
"Bildirim-arka plan yüklemeyi denedi" ne anlama geliyor? libnotifyBu notify-sendkomutu sağladığı için yüklediniz mi (tek ihtiyacınız olan bu)?
jasonwryan

Bu soruyu doğru bir şekilde cevaplamak için çok az bilgi verdiniz. Verdiğiniz tek hata iletisine dayanarak, DBus'un çalışmadığından şüpheleniyorum ve bu nedenle bildirmek-send'e bağlanmak için hiçbir şey yok. "Önemsiz bildirim" kodunuzu ve tam hatayı verdiyseniz, bir cevaba daha da yaklaşabiliriz.
msw

Oradan örnek kodlar aldım: wiki.archlinux.org/index.php/Libnotify#Python
IBr

Dunst ile başarılı oldum. Artık "Bağlantı reddedildi" mesajı yok.
16'da

Yanıtlar:


6

Sonunda problemi kendim çözdüm.

Yaptığım talimatları bırakacağım.

Sorun iki bölümden oluşmaktadır:

  1. Dbus'a Windows Manager içinden erişilemiyor
  2. Bildirim arka plan programı dbus'tan ileti alamıyor

1. problem çözümü:

Gerçek sorun, benim windows yöneticisi lxdm, hangi nedenle /etc/X11/xinit/xinitrc.dlxde oturumu dışında yapılandırma dosyaları birleştirmez lxdm çalıştırıldı (LXDE dbus çalışır, harika wm değil). Bu klasörde 30-dbusşu içeriğe sahip bir dosya var :

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

Kodun bu kısmı, $DBUS_SESSION_BUS_ADDRESSçeşitli uygulamalar için kullanılacak bir dbus portunu tanımlayan değişkeni tanımlar. echo $DBUS_SESSION_BUS_ADDRESSdbus oturumunun mevcut olup olmadığını görmek için basit akıl sağlığı kontrolü olarak kullanılabilir (dbus oturum dosyasını döndürmelidir).

Bu klasördeki yapılandırma dosyaları, oturum başlangıcında basit kabuk komut dosyasıyla birleştirilebilir (kod alma yöntemi .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. problem çözümü:

Dbus çalışırken ve diğer programlar için kullanılabilir iken hala bildirimlerin düzgün çalışması için daha fazla erişim gerekir, bu yüzden Başar WM bir olmadığı için polkit ajan çalıştırmak gerekiyordu. Ben seçtim lxpolkit, çünkü zaten neredeyse tam lxde ortamı vardı. Benim durumumda, sadece dosyama eklendi ~/.config/awesome/rc.lua:, awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop")herhangi bir nedenle bu satır olmadan lxdm ile varsayılan olarak başlamayı reddetti.

Bence gnome polkit ajanı da iyi çalışmalı.


1
not: ekran yöneticiniz hiçbir şey yapmaz ve yapmamalıdır .xinitrc/ Diğer lezzetin ne olduğunu unuturum. bu dosyalar eşdeğerdir (hangisi kullanılır? dağıtımına göre değişir) ve yalnızca çağırdığınızda startxveya xinitkonsoldan kullanıldığında kullanılır . muhtemelen sistem dosyasının yüklenmesinin nedeni LXDM'de değil LXDE'de olmasıdır.
Strugee

Açıklama için teşekkürler. Görünüşe göre kendimi ek yapılandırma yüklemem gerekiyor.
IBr

evet, bunu nasıl yapmanız gerektiği masaüstü ortamına / wm'ye bağlıdır.
strugee

tipik olarak yapacağınız tek şey, .xinitrcdaha sonra etkinleştirilmeyecek arka plan cinlerini başlatmaktır (bunu sizin için yapmadıysanız bunu yapardınız gnome-session), en son satırda, execkullandığınız WM / masaüstü ortamı ne olursa olsun .
Strugee

0

Bu bir cevap değil, sadece bir sonraki sorunun oluşmasına yardımcı olacak büyük bir açıklama.

Ekstra ayrıntı eklediğiniz için teşekkür ederiz. Muhtemelen bir izin probleminiz var, ancak maalesef DBus Unix etki alanı soketine bağlanmak için gereken izinlerde.

Bu işlemi kök olmayan olarak onaylamak için:

$ 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

ancak muhtemelen şöyle bir şey elde edersiniz

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

Neden? Hiç bir fikrim yok. Bildirim alt sisteminin GNOME geliştirme topluluğunda böylesine yüzeysel olarak basit bir özelliğin olması gerektiğini düşündüğümden çok daha fazla dikkat çektiğini biliyorum. Milyon kadar GTK yapılandırma konumunda bazı yapılandırma dosyalarından şüphelenirim, ancak bunun çok yararlı olmadığını biliyorum.


Gerçekten de varconnect(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

Benim için i3wm üzerine notify-osd ve dunst kurmak için çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.