Beaucoup de fois j'ai besoin de Ctrl+C (ou Ctrl+Insert) plusieurs fois pour copier quelque chose. J'apprécierais les retours visuels indiquant "qu'une nouvelle chose a été copiée" ou quelque chose du genre. Est-il possible d'ajouter ceci à Ubuntu?
J'ai adapté mon script pour qu'il réagisse aux modifications du presse-papiers à partir de ici afin qu'il affiche une bulle de notification native à chaque fois que vous copiez quelque chose:
#!/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()
Enregistrez-le quelque part (par exemple, en tant que /usr/local/bin/clipboard-notifier
- vous avez besoin de Sudo
pour pouvoir écrire à cet emplacement, mais mettez-le dans ~/bin
) et exécutez-le à l'aide de la commande chmod +x FILENAME
.
Mon script utilise le package Python 3 notify2
pour afficher les bulles de notification natives. Ce paquet n'est normalement pas installé par défaut, vous devez d'abord l'ajouter avec la commande ci-dessous:
Sudo apt install python3-notify2
Si vous le souhaitez, vous pouvez modifier les valeurs des variables en majuscule au début du script, selon vos besoins, en particulier TITLE
et MAXLENGTH
peuvent être utiles.
Alors simplement ajoutez-le à vos applications de démarrage et il se lancera automatiquement lors de votre prochaine connexion. Vous pouvez également lancer le script manuellement à partir, par exemple, de le Alt+F2 HUD dans l'unité.
J'ai créé une solution plus standard en n'utilisant que des scripts bash sans bibliothèques supplémentaires:
Voici comment je l'ai fait:
Créez un fichier appelé: clp-notify
et rendez-le exécutable.
Enregistrez le fichier dans: /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
Ensuite, j'ai créé un deuxième fichier appelé start-clipboard-polling
qui appelle le script ci-dessus et c'est ce deuxième fichier qui est ajouté au démarrage:
#!/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
Ce deuxième fichier a pour but d’empêcher le clp-notify
original de démarrer plusieurs fois, car le script clp-notify
continuera de s’exécuter même si vous vous déconnectez et que vous redémarrez le serveur X.
Ensuite, vous devez ajouter ceci start-clipboard-polling
à vos applications de démarrage.
Il n'y a qu'un seul problème avec cela. Bien que le second script évite à clp-notify
de démarrer plusieurs fois lorsque vous vous déconnectez et vous connectez (car l'instance d'origine serait toujours en cours d'exécution depuis la session précédente), la deuxième fois que vous vous connectez, pour une raison quelconque, la condition suivante échoue:
if [[ ! ("$current_value" == "$new_value") ]];
et cela signifie que les notifications ne fonctionneront pas. La solution consiste à terminer l'instance d'origine à partir de start-clipboard-polling
et à redémarrer clp-notify
en tant qu'instance récente. Vous pouvez ensuite supprimer la section qui vérifie si clp-notify
est en cours d'exécution, mais Je ne veux pas utiliser le travail autour, je suis plus intéressé de savoir pourquoi il échoue.
Sinon, il continuera à fonctionner correctement jusqu'à ce que vous vous déconnectiez.
BTW, vous devez:
Sudo apt install xclip