私がする必要がある多くの時間 Ctrl+C (または Ctrl+Insert)何かをコピーするために複数回。 「新しいものがコピーされました」などの視覚的なフィードバックをいただければ幸いです。これをUbuntuに追加する方法はありますか?
here からのクリップボードの変更に反応するようにスクリプトを調整し、何かをコピーするたびにネイティブ通知バブルが表示されるようにしました。
#!/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()
それをどこかに保存し(例:/usr/local/bin/clipboard-notifier
-Sudo
にその場所への書き込みを許可する必要がありますが、代わりに~/bin
に入れて)コマンドchmod +x FILENAME
を使用して実行可能にします。
私のスクリプトは、Python 3パッケージnotify2
を使用して、ネイティブ通知バブルを表示します。通常、このパッケージはデフォルトではインストールされません。最初に以下のコマンドで追加する必要があります。
Sudo apt install python3-notify2
必要に応じて、スクリプトの先頭近くにある大文字の変数の値を必要に応じて変更できます。特に、TITLE
およびMAXLENGTH
を変更すると便利です。
その後、単純に スタートアップアプリケーションに追加 すると、次回ログインしたときに自動的に起動します。また、スクリプトを手動で起動することもできます。その Alt+F2 UnityのHUD。
追加のライブラリなしでのみbashスクリプトを使用して、より標準的なソリューションを作成しました。
ここに私がそれをした方法があります:
clp-notify
というファイルを作成し、実行可能にします。
ファイルを保存する場所:/home/$USER/add-ons/scripts/clp-notify
#!/bin/bash
echo "Script $0 started..."
notify-send -u normal -t 3000 -i info 'Script Started!' $0
clip_command="xclip -selection clipboard -o"
current_value=`$clip_command`
while true
do
new_value=`$clip_command`
if [[ ! ("$current_value" == "$new_value") ]];
then
echo 'Clipboard Modified...'
notify-send -u normal -t 3000 -i info 'Clipboard Modified!' 'Your clipboard has been modified.'
current_value=$new_value
else
echo "Polliing..."
fi
sleep 1.5
done
次に、上記のスクリプトを呼び出すstart-clipboard-polling
という2番目のファイルを作成しました。この2番目のファイルがスタートアップに追加されます。
#!/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
この2番目のファイルの目的は、元のclp-notify
が複数回起動するのを防ぐことです。これは、Xサーバーをログアウトして再起動しても、clp-notify
スクリプトが実行し続けるためです。
次に、このstart-clipboard-polling
をスタートアップアプリケーションに追加する必要があります。
これには1つだけ問題があります。 2番目のスクリプトは、ログアウトおよびログイン時にclp-notify
が複数回開始するのを防ぐことに注意します(元のインスタンスは前のセッションから実行されているため)、何らかの理由で2回目のログインでは、次の条件は失敗します。
if [[ ! ("$current_value" == "$new_value") ]];
つまり、通知は機能しません。これを回避するには、start-clipboard-polling
内から元のインスタンスを終了し、clp-notify
を新しいインスタンスとして再起動します。それで、clp-notify
が実行されているかどうかをチェックするセクションを削除できますが、私は回避策を使いたくありません。なぜ失敗するのか興味があります。
それ以外の場合は、ログアウトするまで正常に機能し続けます。
ところで、あなたがする必要があります:
Sudo apt install xclip