是否像OSX设备那样存在“请勿打扰模式”,您可以在其中决定通知何时会打扰您或不打扰您。
我刚安装了chrome,通常会收到群组文本和其他通知,这在我尝试工作时可能会很烦。 Ubuntu是否存在类似的东西?
是否像OSX设备那样存在“请勿打扰模式”,您可以在其中决定通知何时会打扰您或不打扰您。
我刚安装了chrome,通常会收到群组文本和其他通知,这在我尝试工作时可能会很烦。 Ubuntu是否存在类似的东西?
Answers:
刚刚完成了指标的完全重写版本(0.9.0)。现在的选项包括:
此外,还对界面和行为进行了许多改进。
安装未更改(ppa):
sudo apt-add-repository ppa:vlijm/nonotifs
sudo apt-get update
sudo apt-get install nonotifs
使用下面的指示器,您可以选择临时关闭通知:
或显示通知:
技巧很简单,dbus-monitor
用于拦截即将到来的通知并在它们出现之前将其停止。
该指示器是一个用户友好的“包装器”,用于打开和关闭它。
按照现在(对于忠实的,生动的,老谋深算,Xenial):
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
使此脚本可执行
三个图标;右键单击它们,然后将它们与两个脚本一起保存为(准确):
而已。现在,使用以下命令测试指标:
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
您可以将指示符添加到“启动应用程序”:Dash>“启动应用程序”>“添加”。添加命令:
/bin/bash -c "sleep 15 && python3 /path/to/nonotif_indicator.py"
脚本下面允许屏蔽任何通知,使其不会出现在屏幕上。-m
静音和-u
取消静音有两个基本选项。两者都放在一起.desktop
作为启动器。
当-m
被使用时,通知-OSD将被阻塞之前发送一个最后通知。如果有另一个脚本实例正在运行,它将显示一个图形弹出窗口,该弹出窗口将通知用户该脚本已在执行其工作。
当使用-u
option 调用时,脚本将停止阻止通知,并通过显示一个来确认。如果没有以前的脚本实例在运行,则将通知用户当前没有任何阻塞。
脚本源在这里可用。对于最新版本,您可以随时在我的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 "$@"
这只是我个人使用的示例。将每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
快捷方式文件已锁定到启动器
静音前的最终通知
unmute
函数内,您可以在行set -x
后添加echo $0
并在终端中运行程序吗?它将显示某些输出。将其复制并粘贴到paste.ubuntu.com,并在此处的注释中提供该粘贴的链接。谢谢