Есть ли опция "не беспокоить", чтобы временно скрыть уведомления, как на 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
файл.
Или вручную:
Решение состоит из нескольких элементов, которые вам просто необходимо хранить вместе в одном и том же каталоге.
- Создайте каталог или папку (может быть где угодно в вашем домашнем каталоге, например)
Индикатор: скопируйте приведенный ниже скрипт в пустой файл, сохраните его как
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()
dbus-monitor
сценарий; сохранить его (точно) какnonotifs.sh
в одном каталоге с первым скриптом:#!/bin/bash dbus-monitor "interface='org.freedesktop.Notifications'" | xargs -I '{}' pkill notify-osd
Сделайте этот скрипт исполняемым
Три иконы; щелкните правой кнопкой мыши по каждому из них и сохраните их вместе с двумя сценариями как (точно):
<-
green.png
<-
red.png
<-
grey.png
Вот и все. Теперь протестируйте индикатор с помощью команды:
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
Скриншоты
Файл ярлыка заблокирован для запуска
Окончательное уведомление перед отключением звука