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


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.