Я использую привязки ruby-libappindicator для управления индикаторами приложений Ubuntu .
Я хочу указать, используется ли порт 3000 каким-либо приложением. Проверка порта не является проблемой, но мне также нужно обновить индикатор (я хочу показать зеленый или красный круг), когда порт становится занятым / свободным.
Я могу создать новый индикатор, подобный этому:
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
Но после вызова Gtk.main
код «зависает», поэтому я не могу вызвать любой другой метод.
Как я могу обновить значок приложения после его создания?
Используйте g_timeout_add_seconds () из GLib , чтобы определить функцию, которая вызывается через регулярные промежутки времени, и в этой функции проверьте, нужен ли порт и вызов indicator.set_status(...)
.
Чтобы сэкономить на написании собственного индикатора ...
... вы можете установить индикатор-системный монитор , затем создать сценарий оболочки для мониторинга порта и добавить свой сценарий к индикатору.
Вместо того, чтобы красную / зеленую иконку, вам придется согласиться на текстовую метку, указывающую состояние.
Вам нужно создать таймер, используя GLib::Timeout.add_seconds
, (или просто add
, если вы хотите использовать миллисекунды)
# ...
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