Чи є варіант "не турбувати" тимчасово приховувати сповіщення, як на макбуках?


13

Чи існує режим "Не турбувати", як це стосується пристрою OSX, де ви можете вирішити, коли повідомлення може вас турбувати чи ні.

Щойно я встановив хром, і зазвичай я отримую спам від групових текстів та інших повідомлень, що може дратувати, коли я намагаюся працювати. На моїй книзі macbook у мене є можливість увімкнути "Не турбувати", що приглушує будь-яку форму повідомлення .. Чи існує щось подібне для Ubuntu?


Є варіант для firefox, але я не користувач хрому, тому не можу про це розповісти
Сергій Колодяжний

Проблема не хромована, але сповіщення взагалі ..
Lamda


2
Розробили сценарій. Поки що це на моєму github: github.com/SergKolo/sergrep/blob/master/notify-block.sh, я оновлю свою відповідь, як тільки встигну сьогодні. Також буде містити приємний ярлик, який можна прикріпити до пускової установки
Сергій Колодяжний

1
Відповідь відредаговано, перегляньте. Повідомте мене, чи є додаткові функції, які ви хочете додати
Сергій Колодяжний,

Відповіді:


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для перехоплення майбутніх сповіщень та зупинення їх до їх появи.
Індикатор - зручна для користувача "обгортка", щоб вимкнути та увімкнути.

Як налаштувати


На даний момент ( для Trusty, Vivid, Wily, Xenial ):

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 так здорово бачити вас навколо!
Яків Влійм

Ще один чудовий сценарій, Якобе! Ідея: Чи може скрипт також блокувати звукові сповіщення, які йдуть разом з оповіщеннями-osd?
orschiro

@orschiro дякую! Чи є і ці сповіщення-osd сповіщення? Не впевнені, на які сповіщення ви посилаєтесь.
Яків Влійм

1
@RobertOrzanna - це одна з речей, яка змінюється у версії 1.0 :)
Jacob Vlijm

11

Вступ

Нижче сценарій дозволяє вимкнути звук будь-яких сповіщень на екрані. Є два основні варіанти -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

Скріншоти

зображення1

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

введіть тут опис зображення

Остаточне повідомлення перед вимкненням звуку


У мене, здається, виникають проблеми з його вимкненням? .. Я повинен вручну вбивати процес щоразу або?
Ламда

Ні, опція без вимкнення робить саме це, вбиває попередній екземпляр процесу. Яке саме питання відбувається?
Сергій Колодяжний

Повідомлення не виникає. Я можу вимкнути звук, але не ввімкнути його, натиснувши кнопку ввімкнення звуку ..
Lamda

@Lamda Добре, всередині unmuteфункції ви можете додати set -xпісля echo $0рядка і запустити програму в терміналі? Він покаже певний вихід. Скопіюйте та вставте це на paste.ubuntu.com та надайте посилання на цю пасту в коментарях тут. Спасибі
Сергій Колодяжний

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.