특정 소스에서 오는 특정 알림 버블을 일시적으로 걸러 낼 수 있습니까?


12

새 메일을받을 때 알림 풍선이 화면에 표시되도록 시스템을 구성했습니다. 이것은 때로는 편리하고 다른 때는 산만합니다. 내가 사용하고있는 gmail 통합을 제거하지 않고 특정 종류의 알림이 표시되는지 여부 를 중앙에서 토글 하는 방법이 있습니까?

즉, 알림 서비스를 사용하는 "등록 된"앱 목록을보고 활성화 / 비활성화로 전환 할 수있는 응용 프로그램 (또는 API)을 찾고 있습니다. 또는 source-application-name 또는 notification-bubble-content와 일치하고 일치하는 경우 알림을 차단하는 데 사용할 수있는 하나 이상의 정규식을 만들 수있는 것입니다.


1
Gnome-Shell 알림과 달리 On Ubuntu 응용 프로그램은 알림 서비스에 등록되지 않습니다. 응용 프로그램에서 하드 코딩 된 알림에 libnotify를 사용합니다. 알림 환경 설정 (예 : 게이버, 진화, 썬더 버드 등)이있는 경우 응용 프로그램 환경 설정에서 알림을 해제 할 수 있습니다.
Khurshid Alam


@orschiro 이것은 당신이 언급 한 (최근 게시 된) 질문과 중복되지 않습니다.이 질문은 특정 종류의 알림 만 프로그래밍 방식으로 필터링하고 다른 사람들은 통과시킬 수 있다는 것입니다. 다른 질문은 특히 모든 알림을 음소거하는 것입니다.
Mark

아, 맞아 나는 이것을 한눈에 놓쳤다. 감사합니다!
orschiro

답변:


2

d- 버스 레벨에서이를 필터링 할 수 있지만 많은 작업처럼 보입니다. 먼저이 게시물을보고 osd 작동 방식에 대한 통찰력을 얻으십시오

별도의 콘솔에서 'notify-send'실행을 보내기 전에 dbus-monitor를 시작하십시오.

메소드 호출 송신자 = : 1.2450-> dest = org.freedesktop.DBus serial = 5 path = / org / freedesktop / DBus; interface = org.freedesktop.DBus; member = GetNameOwner
   문자열 "org.freedesktop.Notifications"
메소드 호출 발신자 = : 1.2450-> 대상 = : 1.41 시리얼 = 6 경로 = / org / freedesktop / 알림; interface = org.freedesktop. 알림; member = GetServerInformation
메소드 리턴 송신자 = : 1.41-> dest = : 1.2450 reply_serial = 6
   문자열 "알림 -OSD"
   문자열 "Canonical Ltd"
   문자열 "1.0"
   문자열 "1.1"
메소드 호출 발신자 = : 1.2450-> 대상 = : 1.41 serial = 7 경로 = / org / freedesktop / 알림; interface = org.freedesktop. 알림; member = 알림
   문자열 "알림 보내기"
   uint32 0
   문자열 "/usr/share/pixmaps/debian-logo.png"
   문자열 "내 제목"
   문자열 "일부 텍스트 본문"
   배열 [
   ]
   배열 [
      dict entry (
         문자열 "긴급"
         변형 바이트 1
      )
   ]
   int32 -1

notify-osd는 dbus에서 작동합니다

dpkg -L 알림 OSD
/usr/share/dbus-1/services/org.freedesktop.Notifications.service

그러나 /etc/dbus-1/system.d에는이 서비스에 대한 추가 제약이 없습니다.

따라서 소스를 기반으로 알림 이벤트를 필터링하고 나중에 제어 할 수있는 구성 파일을 만들 수 있습니다. 그것이 문제와 dbus 사양을 파헤 치지 않고 할 수있는 최선입니다. 이것이 도움이되기를 바랍니다. 추후에 시작하는 것이 더 쉽게 구성되어야합니다.


2

...하지만 많은 일처럼 보입니다 ...

적어도 조잡한 일반 솔루션에는 그렇게 나쁘지 않습니다.

다음은 작년 (2012 년 9 월) 게시물에 대한 답변의 세부 정보 사본입니다.

network-manager에서 알림을 비활성화하는 방법 .

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

string "NetworkManager"차단을 결정하려면 원하는 RE로 교체하십시오 .

실행할 RE 패턴과 일치하는 아이디어를 얻으려면
dbus-monitor "interface='org.freedesktop.Notifications'"
알림을 팝업하는 동안 출력을 확인하십시오.

즉. notify-send메시지 를 제거 하려면 grep대신 이 줄을 사용하십시오.

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

주의해야 할 점은 :
killall notify-osd비 차별 완전히 보류중인 메시지의 알림 스택 여부에 선명하게 촬상 와이프됩니다 NetworkManager또는 notify-send통고 에이전트입니다.

"정직한"솔루션은 알림 제거가 필요한지 결정한 다음이를 수행 할 때 발생할 수있는 경쟁 조건을 설명해야합니다. 다른 알림은 팝업되어 나머지 알림과 함께 제거되지 않아야합니다.

또한 문제의 알림이 차단 될 때 알림이 보류 중이면 모두 제거됩니다. 이 상황은 dbus보류중인 알림을 복사 notify-send한 후 제거 후 원하는 알림을 다시 발행하여 해결할 수 있습니다 .

이것은 약간의 노동 집약적 인 작업입니다!

이상적으로는 직접 dbus 사용

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

원하는 알림을 구체적으로 타겟팅하는 것은 불행히도 분명하지 않습니다 ... 그러나 ...

또 다른 답변
org.freedesktop.Notifications.CloseNotification (uint id)을 DBus를 통해 트리거하고 호출 할 수 있습니까? 적어도와 함께
사용 하지만 불행히도 임의의 알림 aps에는 사용하지 않는 방법을 보여줍니다 . 비록 aps. 팝업 알림을 제어하는 ​​사용자 정의 인터페이스가 있습니다.[1]notify-send

교차 심판. :

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.