Introdução
O script abaixo permite que as notificações sejam desativadas na tela. Existem duas opções básicas -m
para ativar e -u
desativar o som. Ambos são reunidos em um.desktop
arquivo para servir como iniciador.
Quando -m
usado, o notify-osd envia uma notificação final antes de ser bloqueado. Se houver outra instância do script em execução, ele mostrará um pop-up gráfico que informará ao usuário que o script já está fazendo seu trabalho.
Quando chamado com -u
opção, o script para de bloquear as notificações e confirma isso mostrando uma. Se nenhuma instância anterior do script estiver em execução, o usuário será notificado de que nada está bloqueado no momento.
Origem do Script
A fonte do script está disponível aqui. Para uma versão mais atualizada, você sempre pode encontrá-la no meu github . Você pode instalar o git sudo apt-get install git
e clonar todo o repositório git clone https://github.com/SergKolo/sergrep.git
ou usar
wget https://raw.githubusercontent.com/SergKolo/sergrep/master/notify-block.sh && chmod +x notify-block.sh
para obter apenas o próprio script.
#!/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 "$@"
Modelo de atalho .desktop
Este é apenas um exemplo do que eu pessoalmente uso. Substitua cada Exec=
linha pelo caminho apropriado para o script em seu ambiente. Claro que você Icon=
também terá que mudar. De preferência, mantenha esse arquivo na sua ~/.local/share/applications
pasta
[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
Screenshots
O arquivo de atalho bloqueado para o iniciador
Notificação final antes de silenciar