web-dev-qa-db-fra.com

Est-il possible de mettre à jour l'indicateur d'application à partir du code?

J'utilise Ruby-libappindicator les liaisons pour gérer indicateurs d'application ubunt .

Je veux indiquer si le port 3000 est utilisé par une application. La vérification des ports n'est pas un problème, mais je dois également mettre à jour l'indicateur (je veux afficher le cercle vert ou rouge) lorsque le port devient occupé/libre.

Je peux créer un nouvel indicateur comme celui-ci:

require "Ruby-libappindicator"
indicator = AppIndicator::AppIndicator.new("test", "indicator-messages", AppIndicator::Category::APPLICATION_STATUS)
indicator.set_menu(Gtk::Menu.new)
indicator.set_status(AppIndicator::Status::ACTIVE)
Gtk.main

Mais après Gtk.main appeler le code "se bloque" donc je ne peux pas appeler d'autre méthode.

Comment puis-je mettre à jour l'icône de l'indicateur d'appli après sa création?

6
freemanoid

Utilisez g_timeout_add_seconds () de GLib pour définir une fonction qui est appelée à intervalles réguliers et dans cette fonction, vérifiez le port et appelez indicator.set_status(...) est nécessaire.

1
Florian Diesch

Vous devez créer une minuterie à l'aide de GLib::Timeout.add_seconds, (ou simplement add si vous souhaitez utiliser des millisecondes)

# ...

GLib::Timeout.add_seconds(2) do # every two seconds....
    app_indicator.set_icon '/path/to/icon.svg'
    true # returning false cancels the timer
end

Gtk.main
0
aidan

Pour vous éviter d'écrire votre propre indicateur ...

... vous pouvez installer indicator-sysmonitor , puis créer un script Shell pour surveiller le port et ajouter votre script à l'indicateur.

Plutôt qu'une icône rouge/verte, vous devez vous contenter d'une étiquette de texte pour indiquer l'état.

0
Bernmeister