Làm cách nào tôi có thể tạm thời lọc ra một số bong bóng thông báo nhất định đến từ các nguồn cụ thể?


12

Tôi đã cấu hình hệ thống của mình sao cho khi tôi nhận được thư mới, một quả bóng thông báo sẽ xuất hiện trên màn hình của tôi. Điều này là thuận tiện vào những lúc, và mất tập trung vào những lúc khác. Không cần phải gỡ cài đặt tích hợp gmail mà tôi đang sử dụng, có cách nào để chuyển đổi tập trung xem một số loại thông báo nhất định sẽ được hiển thị không?

Nói cách khác, tôi đang tìm kiếm một ứng dụng (hoặc API) cho phép tôi xem danh sách các ứng dụng "đã đăng ký" sử dụng dịch vụ thông báo và chuyển đổi chúng thành bật / tắt. Hoặc, một cái gì đó cho phép tôi tạo một hoặc nhiều biểu thức chính quy có thể được sử dụng để khớp với nội dung tên ứng dụng nguồn hoặc bong bóng thông báo và nếu xảy ra sự trùng khớp, để chặn thông báo.


1
Không giống như thông báo Gnome-Shell, trên ứng dụng Ubuntu không được đăng ký trong dịch vụ thông báo. Nó sử dụng libnotify để thông báo được mã hóa cứng trong các ứng dụng. Bạn có thể thử tắt thông báo khỏi tùy chọn ứng dụng nếu ứng dụng đó có tùy chọn thông báo (như gwibber, Evolution, thunderbird, v.v.).
Khurshid Alam


@orschiro Đây không phải là một bản sao của câu hỏi (được đăng gần đây) mà bạn đã đề cập - câu hỏi này là về việc chỉ có thể lọc theo chương trình một số loại thông báo nhất định, trong khi cho phép người khác thông qua. Câu hỏi khác là cụ thể về việc tắt tất cả các thông báo.
Đánh dấu

Oh bạn nói đúng. Tôi đã bỏ lỡ điều này trên một cái nhìn đầu tiên. Cảm ơn bạn!
orschiro

Câu trả lời:


2

Bạn có thể lọc cái này ở cấp độ d-bus, nhưng có vẻ như rất nhiều công việc. Trước tiên hãy xem bài đăng này để hiểu rõ hơn về cách thức hoạt động của osd

Khởi động màn hình dbus trước khi bạn gửi chạy 'thông báo-gửi' trên một bảng điều khiển riêng.

phương thức gọi người gửi =: 1.2450 -> Dest = org.freedesktop.DBus serial = 5 path = / org / freedesktop / DBus; giao diện = org.freedesktop.DBus; thành viên = GetNameOwner
   chuỗi "org.freedesktop.Notutions"
phương thức gọi người gửi =: 1.2450 -> mệnh =: 1.41 nối tiếp = 6 đường dẫn = / org / freedesktop / Thông báo; interface = org.freedesktop.Notifying; thành viên = GetServerIn information
người gửi trả về phương thức =: 1.41 -> mệnh =: 1.2450 reply_serial = 6
   chuỗi "thông báo-osd"
   chuỗi "Canonical Ltd"
   chuỗi "1.0"
   chuỗi "1.1"
phương thức gọi người gửi =: 1.2450 -> mệnh =: 1.41 nối tiếp = 7 đường dẫn = / org / freedesktop / Thông báo; interface = org.freedesktop.Notifying; thành viên = Thông báo
   chuỗi "thông báo-gửi"
   uint32 0
   chuỗi "/usr/share/pixmaps/debian-logo.png"
   chuỗi "Tiêu đề của tôi"
   chuỗi "Một số cơ thể văn bản"
   mảng [
   ]
   mảng [
      mục chính tả (
         chuỗi "khẩn cấp"
         biến thể byte 1
      )
   ]
   int32 -1

thông báo-osd không sống trên dbus

dpkg -L thông báo-osd
/usr/share/dbus-1/service/org.freedesktop.Notutions.service

nhưng không có ràng buộc bổ sung nào cho dịch vụ này trong /etc/dbus-1/system.d

Vì vậy, bạn có thể tạo một tệp cấu hình có thể lọc các sự kiện Thông báo dựa trên nguồn của chúng và đạt được sự kiểm soát mà bạn theo đuổi. Đó là điều tốt nhất tôi có thể làm mà không cần đào sâu vào vấn đề và thông số kỹ thuật của dbus. Tôi hy vọng điều này có ích, những gì bạn muốn sau sẽ dễ dàng cấu hình hơn để bắt đầu.


2

... nhưng có vẻ như rất nhiều công việc ...

Nó không thực sự quá tệ, ít nhất là cho một giải pháp chung chung.

Đây là một bản sao của các chi tiết từ câu trả lời của tôi đến bài đăng năm ngoái (tháng 9 năm 2012) trong

Cách tắt thông báo từ người quản lý mạng .

dbus-monitor "interface='org.freedesktop.Notifications'"                \
| grep --line-buffered  'string "NetworkManager"'                       \
| sed -u -e  's/.*/killall notify-osd/g'                                \
| bash

Thay thế string "NetworkManager"bằng RE mong muốn để xác định chặn.

Để có được ý tưởng về mẫu RE phù hợp để tìm kiếm chạy:
dbus-monitor "interface='org.freedesktop.Notifications'"
và xem đầu ra trong khi các thông báo được bật lên.

I E. để xóa notify-sendtin nhắn cũng, sử dụng grepdòng này thay thế:

| grep --line-buffered  'string "NetworkManager"\|string "notify-send"'  \

Hãy cẩn thận :
killall notify-osdkhông phân biệt đối xử và xóa hoàn toàn ngăn xếp thông báo của bất kỳ tin nhắn đang chờ xử lý nào, bất kể là NetworkManagerhay notify-sendlà tác nhân thông báo.

Một giải pháp "trung thực" cần tính đến các điều kiện cuộc đua có thể xảy ra khi giữa việc xác định thanh lọc thông báo là cần thiết và sau đó thực hiện nó, một thông báo khác sẽ xuất hiện và không bị thanh trừng với phần còn lại.

Ngoài ra, nếu thông báo đang chờ xử lý khi một vi phạm bị chặn xuất hiện, tất cả chúng sẽ bị xóa. Tình huống này ít nhất có thể được giải quyết bằng cách tạo một bản sao của các dbusthông báo đang chờ xử lý và sau đó phát hành lại những thông báo mong muốn notify-sendsau khi thanh trừng.

Đây là một chút công việc nặng nhọc thủ công!

Lý tưởng nhất là việc sử dụng dbus trực tiếp

method void org.freedesktop.Notifications.CloseNotification(uint id)     [1]

để chỉ nhắm mục tiêu cụ thể các thông báo mong muốn, thật không may là không rõ ràng ... tuy nhiên ...

Một câu trả lời khác
Liệu org.freedesktop.Notutions.CloseNotification (uint id) có thể được kích hoạt và được gọi thông qua DBus không?
chỉ ra cách sử dụng [1], ít nhất là vớinotify-send , nhưng tiếc là không cho aps thông báo tùy ý. mặc dù một số aps. có giao diện tùy chỉnh để kiểm soát thông báo bật lên.

giới thiệu chéo:

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.