#!/usr/bin/env python3
# Configuration:
APPNAME = "Clipboard Notifier" # an arbitrary application name
TITLE = "Clipboard modified" # the bold headline of each notification
ICON = "edit-paste" # name of the icon to show
MAXLENGTH = 100 # maximum message length
# Imports:
import gi
import signal
import notify2
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk
# Set up signal handler for killing the script with Ctrl+C from terminal:
signal.signal(signal.SIGINT, signal.SIG_DFL)
# Initialize the notifications library:
notify2.init(APPNAME)
# Callback function to handle clipboard modification events:
def callback(*args):
# Get new clipboard content:
text = clip.wait_for_text()
# Truncate long content to avoid huge notification bubbles:
body = text if len(text) < MAXLENGTH else text[:MAXLENGTH] + "..."
# Create and show notification bubble:
notify2.Notification(TITLE, body, ICON).show()
# Set up clipboard and register callback for change events
clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clip.connect("owner-change", callback)
# Start Gtk main loop and wait for events:
Gtk.main()
#!/bin/bash
script_path=/home/$USER/add-ons/scripts/clp-notify
function IsClipboardPollingRunning
{
if (ps -A | grep -q "clp-notify")
then
return 1;
else
return 0;
fi
}
if (IsClipboardPollingRunning == 0)
then
echo "Starting $script_path"
nohup $script_path &
else
echo "$script_path is already running"
notify-send -u normal -t 3000 -i info 'Clipboard Notify' "$script_path is already running."
fi
第二个文件的目的是防止原始文件clp-notify多次启动,因为clp-notify即使您注销并重新启动 X 服务器,脚本也会继续运行。
我调整了我的脚本以对此处的剪贴板更改做出反应,以便在您复制某些内容时显示本机通知气泡:
将其保存在某处(例如,
/usr/local/bin/clipboard-notifier
您需要sudo
被允许在该位置写入,或者将其放入~/bin
)并使用命令使其可执行chmod +x FILENAME
。我的脚本使用 Python 3 包
notify2
来显示本机通知气泡。默认情况下通常不安装此软件包,您必须先使用以下命令添加它:如果需要,您可以根据需要修改脚本开头附近的大写变量的值,尤其是
TITLE
更改MAXLENGTH
可能有用。然后只需将其添加到您的启动应用程序中,它将在您下次登录时自动启动。您还可以从 Unity 中的Alt+ F2HUD 等手动启动脚本。
我只使用 bash 脚本创建了一个更标准的解决方案,而无需额外的库:
这是我的做法:
创建一个名为:的文件
clp-notify
并使其可执行。将文件保存到:
/home/$USER/add-ons/scripts/clp-notify
接下来,我创建了一个
start-clipboard-polling
调用上述脚本的第二个文件,第二个文件被添加到启动中:第二个文件的目的是防止原始文件
clp-notify
多次启动,因为clp-notify
即使您注销并重新启动 X 服务器,脚本也会继续运行。然后您需要将其添加
start-clipboard-polling
到您的启动应用程序中。这只有一个问题。虽然,第二个脚本负责防止
clp-notify
在您注销和登录时多次启动(因为原始实例仍将从前一个会话运行),但由于某种原因,第二次登录时,以下条件失败:这意味着通知将不起作用。解决此问题的方法是从内部结束原始实例
start-clipboard-polling
并clp-notify
作为新实例重新启动,仅此而已,然后您可以删除检查是否clp-notify
正在运行但我不想使用该解决方法的部分,我更感兴趣为什么它失败了。否则它将继续正常工作,直到您注销。
顺便说一句,您需要: