Есть ли опция "не беспокоить", чтобы временно скрыть уведомления, как на MacBook?

Существует ли режим "Не беспокоить", как для устройства OSX, где вы можете решить, когда уведомление может беспокоить вас или нет..

Я только что установил Chrome, и я обычно получаю спам от групповых текстов и других уведомлений, которые могут раздражать, когда я пытаюсь работать. На моем MacBook у меня есть возможность включить "Не беспокоить", который отключает все формы уведомлений.. Существует ли что-то подобное для Ubuntu?

2 ответа

Решение

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 предпочтительнее, так как она поддерживает последнюю версию и регулярно обновляется.
Индикатор появится в 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

Добавьте индикатор в Startup Applications

Вы можете добавить индикатор в Startup Applications: Dash > Startup Applications > Add. Добавьте команду:

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

Вступление

Скрипт ниже позволяет отключить отображение любых уведомлений на экране. Есть два основных варианта -m для немой и -u для включения звука Оба соединены в .desktop файл для запуска.

когда -m используется, notify-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

Скриншоты

Файл ярлыка заблокирован для запуска

Окончательное уведомление перед отключением звука

Другие вопросы по тегам