มีตัวเลือก“ ไม่รบกวน” เพื่อซ่อนการแจ้งเตือนชั่วคราวเช่นบน macbooks หรือไม่?


13

มี "อย่ารบกวนโหมด" เช่นเดียวกับที่ใช้กับอุปกรณ์ OSX ซึ่งคุณสามารถตัดสินใจได้ว่าเมื่อใดที่การแจ้งเตือนจะรบกวนคุณหรือไม่ ..

ฉันเพิ่งติดตั้ง Chrome และฉันมักจะได้รับสแปมจากข้อความกลุ่มและการแจ้งเตือนอื่น ๆ ซึ่งน่ารำคาญเมื่อฉันลองทำงาน .. บน macbook ของฉันฉันมีตัวเลือกในการเปิด "ห้ามรบกวน" ซึ่งปิดการแจ้งเตือนทุกรูปแบบ .. มีบางอย่างที่เป็นเช่นนี้สำหรับ Ubuntu หรือไม่?


มีตัวเลือกสำหรับ Firefox เป็น แต่ฉันใช้โครเมี่ยมไม่มีจึงไม่สามารถบอกได้เกี่ยวกับว่า
Sergiy Kolodyazhnyy

ปัญหาไม่ได้อยู่ที่เฉพาะเจาะจงโครเมี่ยม แต่การแจ้งเตือนในทั่วไป ..
Lamda


2
ได้พัฒนาสคริปต์ จนถึงตอนนี้มันอยู่ใน gitub ของฉัน: github.com/SergKolo/sergrep/blob/master/notify-block.sh ฉันจะอัปเดตคำตอบของฉันทันทีที่ฉันมีเวลาในวันนี้ จะรวมถึงทางลัดที่ดีที่คุณสามารถปักหมุดเพื่อปล่อย
Sergiy 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เพื่อสกัดกั้นการแจ้งเตือนที่กำลังจะมาถึงและหยุดมันก่อนที่จะปรากฏขึ้น
ตัวบ่งชี้คือ "wrapper" ที่ใช้งานง่ายเพื่อสลับไปมาและเปิด

วิธีการตั้งค่า


ตามนี้ ( สำหรับ Trusty, Vivid, Wily, Xenial ):

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

สิ่งนี้จะติดตั้งทั่วโลก (รวมถึงตัวเรียกใช้งาน) แนะนำให้ทำการติดตั้งผ่าน ppa เนื่องจากเป็นเวอร์ชั่นล่าสุดและอัพเดทเป็นประจำ
ตัวบ่งชี้จะปรากฏใน Dash เป็น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

เพิ่มตัวบ่งชี้ไปที่แอปพลิเคชันเริ่มต้น

คุณสามารถเพิ่มตัวบ่งชี้ไปที่แอปพลิเคชันเริ่มต้น: Dash> แอปพลิเคชันเริ่มต้น> เพิ่ม เพิ่มคำสั่ง:

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

คุณน่าทึ่งมาก! :-)
Fabby

@Fabby เขายอดเยี่ยมมากที่ได้พบคุณ!
Jacob Vlijm

อีกหนึ่งบทภาพยนตร์ที่ยอดเยี่ยมยาโคบ! แนวคิด: สคริปต์สามารถบล็อกการแจ้งเตือนด้วยเสียงที่สอดคล้องกับการแจ้งเตือน osd ได้หรือไม่
orschiro

@orschiro ขอบคุณ! การแจ้งเตือน -osd เหล่านั้นด้วยหรือไม่ ไม่แน่ใจว่าคุณหมายถึงการแจ้งเตือนใด
Jacob Vlijm

1
@RobertOrzanna ที่เป็นหนึ่งในสิ่งที่มีการเปลี่ยนแปลงในรุ่น 1.0 :)
จาค็อบ Vlijm

11

บทนำ

ซอลเบลโลว์สคริปต์อนุญาตให้ปิดเสียงการแจ้งเตือนใด ๆ ไม่ให้ปรากฏบนหน้าจอ มีสองตัวเลือกพื้นฐาน-mสำหรับปิดเสียงและ-uเปิดเสียง ทั้งสองรวมกันเป็น.desktopไฟล์เพื่อใช้เป็นตัวเรียกใช้งาน

เมื่อ-mมีการใช้งาน notification-osd จะส่งการแจ้งเตือนครั้งสุดท้ายก่อนที่จะถูกบล็อก หากมีอีกตัวอย่างหนึ่งของการเรียกใช้สคริปต์สคริปต์จะแสดงป๊อปอัปแบบกราฟิกซึ่งจะแจ้งให้ผู้ใช้ทราบว่าสคริปต์กำลังทำงานอยู่

เมื่อเรียกด้วย-uตัวเลือกสคริปต์จะหยุดการบล็อกการแจ้งเตือนและจะยืนยันว่าโดยการแสดง หากไม่มีการเรียกใช้สคริปต์ก่อนหน้านี้ผู้ใช้จะได้รับแจ้งว่าไม่มีสิ่งใดถูกบล็อกในขณะนี้

แหล่งสคริปต์

ซอร์สสคริปต์มีอยู่ที่นี่ สำหรับรุ่นขึ้นไปวันที่คุณสามารถค้นหาได้ในของฉันGitHub คุณสามารถติดตั้งคอมไพล์ด้วย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

@ แลมดาตกลงในunmuteฟังก์ชั่นคุณสามารถเพิ่มset -xหลังจากecho $0บรรทัดแล้วรันโปรแกรมในเทอร์มินัลได้หรือไม่? มันจะแสดงผลบางอย่าง คัดลอกและวางเพื่อวาง. Ubuntu.com และให้ลิงค์ไปวางในความคิดเห็นที่นี่ ขอบคุณ
Sergiy Kolodyazhnyy

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.