Existe-t-il un mode "Ne pas déranger" comme pour les appareils OSX, où vous pouvez décider quand une notification peut vous déranger, ou non.
Je viens d'installer Chrome et je suis habituellement spammé par des textes de groupe et d'autres notifications, ce qui peut être gênant lorsque j'essaie de travailler. Sur mon macbook, j'ai la possibilité d'activer "Ne pas déranger", qui coupe toutes les notifications. Est-ce que quelque chose comme ça existe pour Ubuntu?
Je viens de terminer une version complètement réécrite de l'indicateur (0.9.0). Les options incluent maintenant:
En outre, de nombreuses améliorations sur l'interface et le comportement.
L'installation est inchangée (ppa):
Sudo apt-add-repository ppa:vlijm/nonotifs
Sudo apt-get update
Sudo apt-get install nonotifs
Avec l'indicateur ci-dessous, vous pouvez choisir de désactiver temporairement les notifications:
ou afficher les notifications:
Le truc est une commande simple, en utilisant dbus-monitor
pour intercepter les notifications à venir et les arrêter avant qu'elles n'apparaissent.
L’indicateur est un "wrapper" convivial permettant de l’activer et de le désactiver.
Selon maintenant ( pour Trusty, Vivid, Wily, Xenial ):
Sudo apt-add-repository ppa:vlijm/nonotifs
Sudo apt-get update
Sudo apt-get install nonotifs
Cela installera globalement (y compris le lanceur). L'installation via ppa est préférable, car elle conserve la dernière version et est régulièrement mise à jour.
L’indicateur apparaîtra au tableau de bord sous la forme NoNotifications
Si vous effectuez l’installation à l’aide du ppa, mais que vous l’aviez précédemment installée manuellement, exécutez d’abord rm ~/.local/share/applications/nonotif.desktop
pour supprimer le fichier local .desktop
.
ou manuellement:
La solution consiste en un certain nombre d'éléments que vous devez simplement stocker ensemble dans un seul et même répertoire.
L'indicateur: Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous le nom 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()
Le script dbus-monitor
; enregistrez-le (exactement) sous le nom nonotifs.sh
dans un seul et même répertoire en tant que premier scénario:
#!/bin/bash
dbus-monitor "interface='org.freedesktop.Notifications'" | xargs -I '{}' pkill notify-osd
Rend ce script exécutable
Trois icônes; faites un clic droit sur chacun d’eux et sauvegardez-les avec les deux scripts comme (exactement):
C'est ça. Testez maintenant l'indicateur avec la commande:
python3 /path/to/nonotif_indicator.py
et activer/désactiver les notifications
Au cas où vous souhaiteriez un lanceur avec l'indicateur:
Copiez l'icône ci-dessous, enregistrez-la sous le nom nonotificon.png
:
Copiez le code ci-dessous dans un fichier vide:
[Desktop Entry]
Type=Application
Name=No Notifications
Exec=python3 /path/to/nonotif_indicator.py
Icon=/path/to/nonotificon.png
Type=Application
Editez les lignes:
Exec=python3 /path/to/nonotif_indicator.py
et
Icon=/path/to/nonotificon.png
en fonction des chemins d'accès réels et enregistrez le fichier sous le nom nonotif.desktop
dans ~/.local/share/applications
Vous pouvez ajouter l'indicateur à Applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:
/bin/bash -c "sleep 15 && python3 /path/to/nonotif_indicator.py"
Le script ci-dessous permet de désactiver toutes les notifications apparaissant à l'écran. Il existe deux options de base -m
pour le son muet et -u
pour le son muet. Les deux sont rassemblés dans un fichier .desktop
pour servir de lanceur.
Lorsque -m
est utilisé, notify-osd enverra une notification finale avant d'être bloqué. Si une autre instance de script est en cours d'exécution, une fenêtre contextuelle graphique informera l'utilisateur que le script fait déjà son travail.
Lorsqu'il est appelé avec l'option -u
, le script cesse de bloquer les notifications et le confirme en en affichant une. Si aucune instance précédente de script n'est en cours d'exécution, l'utilisateur sera averti que rien n'est bloqué pour le moment.
La source du script est disponible ici. Pour une version plus récente, vous pouvez toujours la trouver sur mon github . Vous pouvez installer git avec Sudo apt-get install git
et cloner l'intégralité du référentiel avec git clone https://github.com/SergKolo/sergrep.git
ou utiliser
wget https://raw.githubusercontent.com/SergKolo/sergrep/master/notify-block.sh && chmod +x notify-block.sh
pour obtenir uniquement le script lui-même.
#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: [email protected]
# 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 "$@"
Ceci est juste un exemple de ce que j'utilise personnellement. Remplacez chaque ligne Exec=
par le chemin d'accès approprié au script dans votre environnement. Bien sûr, votre Icon=
devra également être changé. De préférence, conservez ce fichier dans votre dossier ~/.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
Le fichier de raccourci verrouillé au lanceur
Notification finale avant la mise en sourdine