Wprowadzenie
Poniższy skrypt umożliwia wyciszenie wszelkich powiadomień pojawiających się na ekranie. Istnieją dwie podstawowe opcje -m
wyciszania i -u
wyłączania wyciszenia . Oba są połączone w .desktop
plik, który ma służyć jako program uruchamiający.
Gdy -m
jest używany, not-osd wyśle ostateczne powiadomienie przed zablokowaniem. Jeśli uruchomiona jest inna instancja skryptu, wyświetli się graficzne wyskakujące okienko, które poinformuje użytkownika, że skrypt już wykonuje swoją pracę.
Po wywołaniu z -u
opcją skrypt przestanie blokować powiadomienia i potwierdzi to, pokazując jedno. Jeśli nie jest uruchomiona żadna poprzednia instancja skryptu, użytkownik zostanie powiadomiony, że w tej chwili nic nie jest blokowane.
Źródło skryptu
Źródło skryptu jest dostępne tutaj. Aby uzyskać bardziej aktualną wersję, zawsze możesz ją znaleźć na moim githubie . Możesz zainstalować git za pomocą sudo apt-get install git
i sklonować całe repozytorium za pomocą git clone https://github.com/SergKolo/sergrep.git
lub użyć
wget https://raw.githubusercontent.com/SergKolo/sergrep/master/notify-block.sh && chmod +x notify-block.sh
aby uzyskać sam skrypt.
#!/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 "$@"
Szablon skrótu .desktop
To tylko przykład tego, czego osobiście używam. Zastąp każdą Exec=
linię odpowiednią ścieżką do skryptu w swoim środowisku. Oczywiście Icon=
trzeba będzie również zmienić. Najlepiej przechowuj ten plik w ~/.local/share/applications
folderze
[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
Zrzuty ekranu
Plik skrótu zablokowany w programie uruchamiającym
Ostateczne powiadomienie przed wyciszeniem