Thông báo và daemon thông báo không hoạt động trên trình quản lý cửa sổ


13

Thông báo không hoạt động trên các trình quản lý cửa sổ độc lập của Linux (Openbox, Awesome WM và tương tự). Tôi đã cố gắng cài đặt thông báo-daemon và dunst, nhưng gửi bằng notify-send "something"không làm cho bất kỳ cửa sổ nào bật lên.

Tôi đã cố chạy polkit-gnome-agent và chạy trực tiếp thông báo trình nền, nhưng nó không giúp được gì (trong khi trước đây tôi đã giải quyết vấn đề tương tự theo cách này, nhưng bây giờ nó không làm gì cả).

Không có bất kỳ dấu hiệu lỗi nào trừ khi tôi gửi thông báo tầm thường với python, sau đó tôi chỉ nhận được thông báo lỗi mơ hồ: 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 Chương trình C tầm thường không đưa ra kết quả gì (ví dụ không có lỗi).

Tôi đang sử dụng Archlinux với systemd và d-bus, tôi nghi ngờ đó là sự cố với polkit hoặc một loại daemon nào đó không chạy trên trình quản lý cửa sổ, nhưng không biết, tôi có thể thử gì hoặc làm cách nào tôi có thể nhận được nhiều thông báo lỗi có ý nghĩa hơn.

EDIT: Tôi đã lấy mã mẫu từ đó: https://wiki.archlinux.org/index.php/Libnotify#Python

Dbus nên được chạy vì systemd có nó là phụ thuộc. Tôi đã libnotifycài đặt - đó là gói cung cấp notify-send. Ngoài ra, daemon thông báo sẽ bắt đầu khi cần thiết (chỉ khi thông báo tăng tốc), bằng cách làm theo tệp trên màn hình /usr/share/dbus-1/services/org.freedesktop.Notifications.service:

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

Tôi thậm chí đã cố gắng chạy daemon trực tiếp (chỉ thực hiện) và thử gửi thông báo. Nếu somenone biết làm thế nào tôi có thể giúp tôi biết thêm thông tin, xin đừng ngần ngại đề xuất.

EDIT 2: Tôi đã thử chạy daemon thông báo với sudo: sudo notification-daemon_name &(trong trường hợp của tôi sudo dunst &) và sudo notify-send somethingsau đó, thông báo hoạt động. Nhưng khi tôi cố gắng thực hiện bất kỳ hành động nào trước đây với tư cách là người dùng không có đặc quyền (điều quan trọng nhất là các chương trình gửi thông báo là người dùng không có đặc quyền), không có gì hiển thị.

notification-daemon từ chối làm việc mà không có bất kỳ lỗi hoặc cảnh báo.

EDIT 3: Rõ ràng đó là vấn đề về quyền: Tôi không thể gửi thông báo mà không có quyền truy cập root. Sau khi khởi động lại sạch: sudo notify-send "something"hoạt động ngay cả khi không khởi chạy thủ công bất kỳ trình tiện ích nào, tuy nhiên những gì tôi (và các chương trình đã khởi chạy của tôi) nên làm để có thể gửi thông báo mà không có quyền root như có thể trong Gnome hoặc bất kỳ môi trường máy tính để bàn đầy đủ nào khác?


1
"Đã cố cài đặt thông báo-daemon" nghĩa là gì? Bạn đã cài đặt libnotifyvì điều này cung cấp notify-sendlệnh (đó là tất cả những gì bạn cần)?
jasonwryan

Bạn đã cung cấp quá ít thông tin để trả lời đúng câu hỏi này. Dựa trên thông báo lỗi duy nhất bạn đưa ra, tôi nghi ngờ rằng DBus không chạy và do đó không có gì để thông báo-gửi để kết nối. Nếu bạn đưa ra mã "thông báo tầm thường" và lỗi chính xác, chúng tôi có thể tiến gần hơn đến câu trả lời.
msw

Tôi đã lấy mã mẫu từ đó: wiki.archlinux.org/index.php/Libnotify#Python
IBr

Tôi đã thành công với Dunst. Không còn tin nhắn "Kết nối bị từ chối".
sshow

Câu trả lời:


6

Cuối cùng tôi cũng tự mình giải quyết vấn đề.

Tôi sẽ để lại hướng dẫn những gì tôi đã làm.

Vấn đề bao gồm hai phần:

  1. Không thể truy cập Dbus từ bên trong trình quản lý windows
  2. Trình nền thông báo không thể nhận tin nhắn từ dbus

Giải pháp cho vấn đề thứ 1:

Vấn đề thực sự là, trình quản lý windows của tôi đã được chạy từ lxdm, vì lý do nào đó không hợp nhất các tệp cấu hình từ /etc/X11/xinit/xinitrc.dngoại trừ phiên lxde (trong LXDE dbus hoạt động, trong wm tuyệt vời không). Trong thư mục này tồn tại tệp có tên 30-dbusvới nội dung sau:

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

Phần mã này xác định $DBUS_SESSION_BUS_ADDRESSbiến xác định cổng dbus sẽ sử dụng cho các ứng dụng khác nhau.echo $DBUS_SESSION_BUS_ADDRESScó thể được sử dụng như kiểm tra độ tỉnh táo đơn giản để xem liệu phiên dbus có tồn tại không (nó sẽ trả về tệp phiên dbus).

Các tập tin cấu hình từ thư mục này có thể được hợp nhất với tập lệnh shell đơn giản khi bắt đầu phiên (mã được lấy từ .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

Giải pháp cho vấn đề thứ 2:

Mặc dù dbus đang chạy và có sẵn cho các chương trình khác, nó vẫn cần nhiều quyền truy cập hơn để thông báo hoạt động chính xác, vì vậy tôi cần chạy tác nhân polkit, vì Awesome WM không có. Tôi đã chọn lxpolkit, vì tôi đã có môi trường lxde gần như đầy đủ. Trong trường hợp của tôi, chỉ cần thêm vào ~/.config/awesome/rc.luatập tin của tôi : awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop") , vì một số lý do không có dòng này, nó đã từ chối bắt đầu theo mặc định với lxdm.

Tôi nghĩ rằng đại lý gnome polkit cũng nên làm việc tốt.


1
lưu ý: trình quản lý hiển thị của bạn không và không nên làm bất cứ điều gì với .xinitrc/ Tôi quên những gì hương vị khác được gọi. những tệp này là tương đương (cái nào được sử dụng thay đổi theo distro) và chỉ được sử dụng khi bạn gọi startxhoặc xinittừ bàn điều khiển. có lẽ lý do mà tệp hệ thống được tải là vì nó xảy ra trong LXDE chứ không phải LXDM.
strugee

Cảm ơn đã làm rõ. Có vẻ như tôi cần phải tự tải cấu hình quảng cáo.
IBr

có, làm thế nào bạn nên làm điều đó phụ thuộc vào môi trường máy tính để bàn / wm.
strugee

thông thường, tất cả những gì bạn sẽ làm .xinitrclà bắt đầu bất kỳ trình nền nào không được bật sau này (bạn sẽ làm điều này nếu bạn không có ví dụ như gnome-sessionlàm điều đó cho bạn), sau đó ở dòng cuối cùng, execbất cứ môi trường WM / máy tính để bàn nào bạn sử dụng .
strugee

0

Đây không phải là một câu trả lời, chỉ là một sự làm rõ lớn để có thể giúp tạo ra câu hỏi tiếp theo.

Cảm ơn đã thêm chi tiết. Bạn có thể có một vấn đề về quyền, nhưng thật không may, đó có thể là các quyền cần thiết để kết nối với ổ cắm tên miền DBus Unix.

Để xác nhận điều này chạy là không 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

ngoại trừ bạn có thể nhận được một cái gì đó như

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

Tại sao? Tôi không có ý kiến. Tôi biết rằng hệ thống con thông báo đã nhận được sự chú ý nhiều hơn trong cộng đồng phát triển Gnome hơn tôi từng nghĩ rằng một tính năng đơn giản bề ngoài như vậy nên có. Tôi nghi ngờ một số tệp cấu hình trong hàng trăm vị trí cấu hình GTK, nhưng tôi biết điều đó không quá hữu ích.


Quả thực tôi đã nhận đượcconnect(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

Đối với tôi, nó hoạt động để cài đặt notify-osd và dunst trên i3wm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.