맥북처럼 알림을 일시적으로 숨기는 "방해 금지"옵션이 있습니까?


13

OSX 장치에서와 같이 "방해 금지 모드"가 존재하며 알림이 언제 귀찮게 할 수 있는지 결정할 수 있습니다.

방금 크롬을 설치했는데 보통 그룹 텍스트 및 기타 알림으로 스팸 메일을받습니다. 작업을 시도 할 때 성 가실 수 있습니다. 내 맥북에서는 모든 형태의 알림을 끄는 "방해 금지"를 켤 수 있습니다. 우분투에도 그런 것이 있습니까?


파이어 폭스 옵션이 있지만 크롬 사용자가 아니기 때문에 그것에 대해 말할 수 없습니다
Sergiy Kolodyazhnyy

문제는 크롬에 국한된 것이 아니라 일반적인 알림입니다.
Lamda


2
스크립트를 개발했습니다. 지금까지 내 github에 있습니다 : github.com/SergKolo/sergrep/blob/master/notify-block.sh 오늘 시간이 되 자마자 답변을 업데이트하겠습니다. 또한 런처에 고정 할 수있는 좋은 바로 가기 포함
세르지 Kolodyazhnyy

1
답변이 수정되었습니다. 검토하십시오. 추가하고 싶은 추가 기능이 있는지 알려주세요
Sergiy Kolodyazhnyy

답변:


9

1. 주요 업데이트

완전히 재 작성된 표시기 버전 (0.9.0)을 완료했습니다. 옵션에는 다음이 포함됩니다.

  • 특정 문자열을 포함하는 알림 만 억제
  • (음소거) 소리 억제
  • 누락 된 알림 로깅
  • 시작시 실행
  • 다음 실행시 마지막 상태 기억 (억제 여부)

또한 인터페이스 및 동작에 대한 많은 개선이 이루어졌습니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

변경되지 않은 설치 (ppa) :

sudo apt-add-repository  ppa:vlijm/nonotifs
sudo apt-get update
sudo apt-get install nonotifs

2. 구식 답변

알림 음소거 / 표시 표시기

아래 표시기로 알림을 일시적으로 끄도록 선택할 수 있습니다.

여기에 이미지 설명을 입력하십시오

또는 알림 표시 :

여기에 이미지 설명을 입력하십시오

작동 원리

이 속임수는 dbus-monitor곧 나오는 알림을 가로 채고 알림이 표시되기 전에 중지 하는 간단한 명령 입니다.
이 표시기는 사용자 친화적 인 "래퍼"로 표시를 켜거나 끕니다.

설정 방법


당으로서 지금 ( 트러스티를 들어, 생생한, 와일리, 주객 관계의 ) :

sudo apt-add-repository  ppa:vlijm/nonotifs
sudo apt-get update
sudo apt-get install nonotifs

이것은 실행기를 포함하여 전체적으로 설치됩니다. ppa를 통한 설치는 최신 버전을 유지하고 정기적으로 업데이트되므로 선호됩니다.
표시기는 대시에 NoNotifications 로 나타납니다.

ppa로 설치했지만 이전에 수동으로 설치 한 경우 rm ~/.local/share/applications/nonotif.desktop먼저 로컬 .desktop파일 을 제거 하십시오.


또는 수동으로 :

해결책은 하나의 동일한 디렉토리에 함께 저장해야하는 여러 항목으로 구성됩니다.

  1. 디렉토리 또는 폴더를 만듭니다 (예 : 홈 디렉토리의 아무 곳이나 가능)
  2. 표시기 : 아래 스크립트를 빈 파일로 복사하여 다음과 같이 저장하십시오 nonotif_indicator.py.

    #!/usr/bin/env python3
    import os
    import signal
    import gi
    import subprocess
    gi.require_version('Gtk', '3.0')
    gi.require_version('AppIndicator3', '0.1')
    from gi.repository import Gtk, AppIndicator3
    
    currpath = os.path.dirname(os.path.realpath(__file__))
    proc = "nonotifs.sh"
    
    def run(path):
        try: 
            pid = subprocess.check_output(["pgrep", "-f", proc]).decode("utf-8").strip()
        except subprocess.CalledProcessError:
            subprocess.Popen(path+"/"+proc)
    
    def show():
        try:
            pid = subprocess.check_output(["pgrep", "-f", proc]).decode("utf-8").strip()
            subprocess.Popen(["pkill", "-P", pid])
        except subprocess.CalledProcessError:
            pass
    
    class Indicator():
        def __init__(self):
            self.app = 'nonotif'
            iconpath = currpath+"/grey.png"
            self.testindicator = AppIndicator3.Indicator.new(
                self.app, iconpath,
                AppIndicator3.IndicatorCategory.OTHER)
            self.testindicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)       
            self.testindicator.set_menu(self.create_menu())
    
        def create_menu(self):
            menu = Gtk.Menu()
            item_quit = Gtk.MenuItem('Quit')
            item_quit.connect('activate', self.stop)
            item_silent = Gtk.MenuItem("Don't disturb")
            item_silent.connect('activate', self.silent)
            item_show = Gtk.MenuItem("Show notifications")
            item_show.connect('activate', self.show)
            menu.append(item_quit)
            menu.append(item_silent)
            menu.append(item_show)
            menu.show_all()
            return menu
    
        def stop(self, source):
            Gtk.main_quit()
    
        def silent(self, source):
            self.testindicator.set_icon(currpath+"/red.png")
            run(currpath)
    
        def show(self, source):
            self.testindicator.set_icon(currpath+"/green.png")
            show()
    
    Indicator()
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    Gtk.main()
  3. dbus-monitor스크립트; 첫 번째 스크립트 nonotifs.sh 와 동일한 디렉토리동일한 디렉토리에 정확하게 저장하십시오 .

    #!/bin/bash
    dbus-monitor "interface='org.freedesktop.Notifications'" | xargs -I '{}' pkill notify-osd

    이 스크립트를 실행 가능하게 만드십시오

  4. 세 개의 아이콘; 각각을 마우스 오른쪽 버튼으로 클릭하고 다음과 같이 두 스크립트와 함께 저장하십시오.

    여기에 이미지 설명을 입력하십시오 <- green.png

    여기에 이미지 설명을 입력하십시오 <- red.png

    여기에 이미지 설명을 입력하십시오<- grey.png

  5. 그게 다야. 이제 다음 명령을 사용하여 표시기를 테스트하십시오.

    python3 /path/to/nonotif_indicator.py

    알림 켜기 / 끄기

발사통

인디케이터가있는 런처를 원할 경우 :

여기에 이미지 설명을 입력하십시오

  • 아래 아이콘을 복사하여 다음과 같이 저장하십시오 nonotificon.png.

    여기에 이미지 설명을 입력하십시오

  • 아래 코드를 빈 파일로 복사하십시오.

    [Desktop Entry]
    Type=Application
    Name=No Notifications
    Exec=python3 /path/to/nonotif_indicator.py
    Icon=/path/to/nonotificon.png
    Type=Application
  • 행을 편집하십시오.

    Exec=python3 /path/to/nonotif_indicator.py

    Icon=/path/to/nonotificon.png

    실제 경로에 따라, 그리고 같은 파일을 저장 nonotif.desktop~/.local/share/applications

시작 애플리케이션에 표시기 추가

시작 애플리케이션에 표시기를 추가 할 수 있습니다 (대시> 시작 애플리케이션> 추가). 다음 명령을 추가하십시오 :

/bin/bash -c "sleep 15 && python3 /path/to/nonotif_indicator.py"

너 굉장하다! :-)
Fabby

그는 @Fabby 당신을 만나서 정말 반갑습니다!
Jacob Vlijm

또 다른 대본 인 야곱! 아이디어 : 스크립트는 알림 OS 알림과 함께 진행되는 오디오 알림을 차단할 수 있습니까?
orschiro

@orschiro 감사합니다! 그 알림 OS 알림도 있습니까? 어떤 알림을 참조하는지 잘 모르겠습니다.
Jacob Vlijm

1
@RobertOrzanna 버전 1.0에서 변경된 것 중 하나입니다 :)
Jacob Vlijm

11

소개

스크립트 벨로우즈는 화면에 알림이 표시되지 않도록 음소거 할 수 있습니다. -m음소거 및 -u음소거 해제에 대한 두 가지 기본 옵션 이 있습니다. 둘 다 .desktop파일로 결합되어 실행기 역할을합니다.

-m사용되는 상기 알릴-OSD가 차단되기 전에 최종 통지를 보낼 것이다. 다른 스크립트 인스턴스가 실행중인 경우 스크립트가 이미 작업을 수행하고 있음을 사용자에게 알려주는 그래픽 팝업이 표시됩니다.

-u옵션으로 호출 하면 스크립트는 알림 차단을 중지하고 알림을 표시하여이를 확인합니다. 이전 스크립트 인스턴스가 실행되고 있지 않으면 사용자에게 현재 차단 된 것이 없다는 알림이 표시됩니다.

스크립트 소스

스크립트 소스는 여기에 있습니다. 더 최신 버전의 경우 항상 내 github 에서 찾을 수 있습니다 . git을 설치 sudo apt-get install git하고 전체 저장소를 복제 git clone https://github.com/SergKolo/sergrep.git하거나 사용 하여 복제 할 수 있습니다

wget https://raw.githubusercontent.com/SergKolo/sergrep/master/notify-block.sh  && chmod +x notify-block.sh

스크립트 자체를 가져옵니다.

#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: 1047481448@qq.com 
# Date: May 10th 2016
# Purpose: Notification blocker for Ubuntu
# Written for: 
# Tested on:  Ubuntu 14.04 LTS
###########################################################
# Copyright: Serg Kolo ,2016 
#    
#     Permission to use, copy, modify, and distribute this software is hereby granted
#     without fee, provided that  the copyright notice above and this permission statement
#     appear in all copies.
#
#     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.

ARGV0="$0"
ARGC=$#

mute_notifications()
{ 

  self=${ARGV0##*/}
  CHECK_PID_NUMS=$(pgrep -f  "$self -m" | wc -l )
  if [ "$CHECK_PID_NUMS" -gt 2 ]; then
     zenity --info --text "Notifications already disabled"
     exit 0
  else  
     killall notify-osd 2> /dev/null # ensure we have PID
     notify-send 'All notifications will be muted after this one' 
     sleep 1
     while true 
     do 
        PID=$(pgrep notify-osd)
        [  "x$PID" != "x" ]  && 
        kill -TERM $PID 
        sleep 0.25
     done
  fi
}

unmute()
{
  echo $0
  self=${0##*/}

  MUTE_PID=$(pgrep -f  "$self -m" ) #match self with -m option
  if [ "x$MUTE_PID" != "x"   ];then
     kill -TERM "$MUTE_PID" &&
     sleep 1 && # ensure the previous process exits
     notify-send "UNMUTED"
     exit 0
  else 
     notify-send "NOTIFICATIONS ALREADY UNMUTED"
     exit 0
  fi  
}

print_usage()
{
  cat > /dev/stderr <<EOF
  usage: notify-block.sh [-m|-u]
EOF
exit 1
}
main()
{
  [ $# -eq 0  ] && print_usage

  while getopts "mu" options
  do

     case ${options} in
          m) mute_notifications & ;;
          u) unmute ;;
          \?) print_usage ;;
     esac

  done
}
main "$@"

.desktop 바로 가기 템플릿

이것은 내가 개인적으로 사용하는 것의 예일뿐입니다. Exec=환경에서 각 줄을 적절한 스크립트 경로로 바꾸십시오. 물론 당신 Icon=도 바뀌어야합니다. 이 파일을 ~/.local/share/applications폴더 에 보관하십시오

[Desktop Entry]
Name=Notification Blocker
Comment=blocks any on-screen notifications
Terminal=false
Actions=Mute;Unmute
Type=Application
Exec=/home/xieerqi/sergrep/notify-block.sh -m
Icon=/home/xieerqi/Desktop/no-notif2.png

[Desktop Action Mute]
Name=Mute Notifications
Exec=/home/xieerqi/sergrep/notify-block.sh -m
Terminal=false

[Desktop Action Unmute]
Name=Unmute Notifications
Exec=/home/xieerqi/sergrep/notify-block.sh -u
Terminal=false

스크린 샷

이미지 1

실행기에 고정 된 바로 가기 파일

여기에 이미지 설명을 입력하십시오

뮤팅 전 최종 알림


음소거를 해제하는 데 문제가있는 것 같습니다 ... 매번 또는 수동으로 프로세스를 종료해야합니까?
Lamda

아니요, 음소거 해제 옵션을 사용하면 이전 프로세스 인스턴스가 종료됩니다. 무슨 일이 일어나고 있습니까?
Sergiy Kolodyazhnyy

메시지가 없습니다. 음소거 해제 버튼을 눌러 음소거 할 수 있지만 음소거 해제 할 수 없습니다.
Lamda

@Lamda OK, unmute함수 내에서 줄 set -x뒤에 추가 echo $0하고 프로그램을 터미널에서 실행할 수 있습니까? 특정 출력을 표시합니다. 해당 내용을 복사하여 paste.ubuntu.com에 붙여 넣고 여기에 의견에 해당 붙여 넣기에 대한 링크를 제공하십시오. 감사합니다
Sergiy Kolodyazhnyy

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