是否有“请勿打扰”选项来暂时隐藏通知,例如在Macbook上?


13

是否像OSX设备那样存在“请勿打扰模式”,您可以在其中决定通知何时会打扰您或不打扰您。

我刚安装了chrome,通常会收到群组文本和其他通知,这在我尝试工作时可能会很烦。 Ubuntu是否存在类似的东西?


firefox有一个选项,但是我不是Chrome用户,所以无法告诉您
Sergiy Kolodyazhnyy

问题不是特定于镀铬的,而是通知的一般
。.– Lamda


2
已经制定了脚本。到目前为止,它在我的github上:github.com/SergKolo/sergrep/blob/master/notify-block.sh 我将在今天有时间的情况下尽快更新答案。还将包括一个不错的快捷方式,您可以将其固定到启动器
Sergiy Kolodyazhnyy,2016年

1
答案已编辑,请检查。让我知道您是否要添加其他功能
Sergiy Kolodyazhnyy,2016年

Answers:


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用于拦截即将到来的通知并在它们出现之前将其停止。
该指示器是一个用户友好的“包装器”,用于打开和关闭它。

如何设定


按照现在对于忠实的,生动的,老谋深算,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真高兴见到你!
雅各布·弗利姆

另一个伟大的剧本,雅各布!想法:脚本是否还可以阻止与notify-osd一起进行的音频通知?
orschiro '16

@orschiro谢谢!那些同样是notify-osd的通知吗?不确定您指的是什么通知。
Jacob Vlijm '16

1
@RobertOrzanna就是在1.0版中更改的内容之一:)
Jacob Vlijm 2016年

11

介绍

脚本下面允许屏蔽任何通知,使其不会出现在屏幕上。-m静音和-u取消静音有两个基本选项。两者都放在一起.desktop作为启动器。

-m被使用时,通知-OSD将被阻塞之前发送一个最后通知。如果有另一个脚本实例正在运行,它将显示一个图形弹出窗口,该弹出窗口将通知用户该脚本已在执行其工作。

当使用-uoption 调用时,脚本将停止阻止通知,并通过显示一个来确认。如果没有以前的脚本实例在运行,则将通知用户当前没有任何阻塞。

脚本源

脚本源在这里可用。对于最新版本,您可以随时在我的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

快捷方式文件已锁定到启动器

在此处输入图片说明

静音前的最终通知


我似乎在取消静音方面遇到问题吗?..我应该每次手动终止进程吗?
拉姆达

不,取消静音选项正是这样做的,它会杀死前一个流程实例。到底是什么问题?
Sergiy Kolodyazhnyy,2016年

没有消息,发生。我可以通过按下静音按钮来静音,但不能取消静音。–
Lamda

@Lamda OK,在unmute函数内,您可以在行set -x后添加echo $0并在终端中运行程序吗?它将显示某些输出。将其复制并粘贴到paste.ubuntu.com,并在此处的注释中提供该粘贴的链接。谢谢
Sergiy Kolodyazhnyy 2016年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.