Linux でタスク用のカスタム システム トレイ インジケーターを作成する

Linux でタスク用のカスタム システム トレイ インジケーターを作成する

システム トレイ アイコンは、今日でも魔法のような機能です。アイコンを右クリックして目的のアクションを選択するだけで、生活を大幅に簡素化し、日常の活動における不要なクリックを大幅に減らすことができます。

便利なシステム トレイ アイコンといえば、Skype、Dropbox、VLC が思い浮かびます。

ただし、システム トレイ アイコンは実際にはさらに便利であり、ニーズに応じて独自のシステム トレイ アイコンを作成できます。このガイドでは、いくつかの簡単な手順でこれを行う方法を説明します。

前提条件

Python を使用してカスタム システム トレイ インジケーターを実装します。 Python はおそらくすべての主要な Linux ディストリビューションにデフォルトでインストールされているため、インストールされていることを確認するだけです (ここではバージョン 2.7 が使用されています)。さらに、gir1.2-appindicator3 パッケージもインストールする必要があります。このライブラリを使用すると、システム アイコン インジケーターを簡単に作成できます。

Ubuntu/Mint/Debian へのインストール:

sudo apt-get install gir1.2-appindicator3

Fedora へのインストール:

sudo dnf install libappindicator-gtk3

他のディストリビューションの場合は、「appindicator」を含むパッケージを検索してください。

GNOME Shell 3.26 以降では、システム トレイ アイコンが削除されました。デスクトップでこの機能を有効にするには、この拡張機能 (または他の拡張機能) をインストールする必要があります。そうしないと、作成したインジケーターが表示されません。

基本コード

インジケーターの基本コードは次のとおりです。

#!/usr/bin/python
インポートOS
gi.repository から Gtk を gtk として、AppIndicator3 を appindicator としてインポートします。
main() を定義します:
 インジケーター = appindicator.Indicator.new("customtray", "semi-starred-symbolic", appindicator.IndicatorCategory.APPLICATION_STATUS)
 indicator.set_status(アプリインジケーター.IndicatorStatus.ACTIVE)
 インジケーター.set_menu(メニュー())
 gtk.main()
メニュー()を定義します:
 メニュー = gtk.Menu()
 command_one = gtk.MenuItem('マイノート')
 command_one.connect('activate', メモ)
 メニュー.append(command_one)
 exittray = gtk.MenuItem('トレイを終了')
 exittray.connect('activate', quit)
 menu.append(終了トレイ)
 メニュー.すべて表示()
 戻るメニュー
defノート(_):
 os.system("gedit $HOME/Documents/notes.txt")
def quit(_):
 gtk.main_quit()
__name__ == "__main__" の場合:
 主要()

このコードがどのように機能するかについては後ほど説明します。しかし今のところは、このテキストをtray.pyとして保存し、Pythonを使用して実行してみましょう。

python tray.py

以下のようにインジケーターが実行されます。

Linux でタスク用のカスタム システム トレイ インジケーターを作成する

さて、この魔法がどのように機能するかを説明しましょう。

コードの最初の 3 行は、Python パスを指定して必要なライブラリをインポートするだけです。

def main(): これはインジケーターのメイン関数です。この関数のコードは、インジケーターを初期化して作成するために使用されます。

インジケーター = appindicator.Indicator.new("customtray","semi-starred-symbolic",

appindicator.IndicatorCategory.APPLICATION_STATUS) : ここでは、customtray という名前の新しいインジケーターを作成することを指定します。これは、システムが他の実行中のインジケーターと混同しないようにするためのインジケーターの一意の名前です。同時に、インジケーターのデフォルト アイコンとして、semi-starred-symbolic というアイコンを使用します。これを、firefox (インジケーターで FireFox アイコンを使用する場合) などの他の値や、任意の他のアイコン名に変更できます。 APPLICATION_STATUSに関連付けられた最後の部分は、インジケーターのカテゴリ/範囲を示す一般的なコードです。
indicator.set_status(appindicator.IndicatorStatus.ACTIVE) : この行はインジケーターをアクティブにします。

indicator.set_menu(menu()) : ここでは、menu() 関数 (後で定義します) を使用して、インジケーターのメニュー項目を作成することを示します。これは、インジケーターを右クリックして実行可能なアクションのリストを表示できるようにするために重要です。

gtk.main() : GTK メイン ループを実行します。

menu() では、インジケーターに提供させたい動作または項目を定義します。 command_one = gtk.MenuItem('My Notes') は、単に最初のメニュー項目を「My notes」というテキストで初期化し、次に command_one.connect('activate', note) はメニューのアクティブ化信号を後で定義される note() 関数に接続します。つまり、システムに「このメニュー項目がクリックされたら、note() 関数を実行する」と指示します。最後に、menu.append(command_one) はメニュー項目をリストに追加します。
exittray 関連の行は、終了メニュー項目を作成するために存在し、必要に応じてインジケーターを閉じることができます。

menu.show_all() と return menu は、メニュー項目をインジケーターに返す通常のコードです。

メモ(_)の下には、「マイ メモ」メニュー項目がクリックされたときに実行されるコードがあります。ここではos.system("gedit $HOME/Documents/notes.txt")と記述します。 os.system 関数を使用すると、Python 内からシェル コマンドを実行できるため、ここでは、gedit を使用してホーム ディレクトリの Documents ディレクトリにある notes.txt というファイルを開くコマンド行を記述します。たとえば、これはこれからの毎日のメモ作成プログラムになるかもしれません。

必要なタスクを追加する

コード内の 2 か所を変更するだけです。

メニュー()

では、クリックすると VLC を使用してハードドライブから特定のビデオ/オーディオ ファイルを再生する新しいメニュー項目を作成したいとします。これを行うには、17 行目に次の 3 行を追加するだけです。

command_two = gtk.MenuItem('ビデオ/オーディオを再生')
command_two.connect('activate'、再生)
メニュー.append(command_two)

次に、30 行目に次のコードを追加します。

デフプレイ(_):
os.system("vlc /home/<ユーザー名>/Videos/somevideo.mp4")

/ home//Videos/somevideo.mp4`を、再生したいビデオ/オーディオ ファイルへのパスに置き換えます。次にファイルを保存し、インジケーターを再度実行します。

python tray.py

次のように表示されます:

Linux でタスク用のカスタム システム トレイ インジケーターを作成する

新しく作成されたメニュー項目をクリックすると、VLC の再生が開始されます。

他のプロジェクト/タスクを作成するには、上記の手順を繰り返します。ただし、変数間で競合が発生しないように、command_two を command_three などの別のものに置き換える必要があることに注意してください。次に、play(_) 関数と同じように新しい関数を定義します。

可能性は無限です。たとえば、このメソッドを使用して Web からデータを取得し (urllib2 ライブラリを使用)、表示します。また、mpg123 コマンドを使用してバックグラウンドで mp3 ファイルを再生するためにも使用し、いつでもオーディオを停止できるように killall mpg123 という別のメニュー項目を定義しました。たとえば、Steam で CS:GO を終了するのに時間がかかります (ウィンドウが自動的に閉じません)。そのため、回避策として、ウィンドウを最小化して、 killall -9 csgo_linux64コマンドを実行する自作のメニュー項目をクリックします。

このインジケーターを使用すると、システム パッケージのアップグレード、他のスクリプトの実行など、文字通り何でも実行できます。

自動スタート

システムの起動後にシステム トレイ インジケーターを毎回手動で実行しなくても自動的に起動できるようになることを期待しています。これを行うには、起動アプリケーションに次のコマンドを追加するだけです (ただし、tray.py へのパスを独自のものに置き換える必要があります)。

nohup python/home/<username>/tray.py&

次回システムを再起動すると、システムの起動後にインジケーターが自動的に動作を開始します。

結論は

これで、必要なタスク用の独自のシステム トレイ インジケーターを作成する方法がわかりました。毎日実行する必要があるタスクの性質と数に応じて、このアプローチによりかなりの時間を節約できます。コマンドラインからエイリアスを作成することを好む人もいますが、その場合、毎回ターミナル ウィンドウを開いたり、ドロップダウン ターミナル エミュレーターを使用できるようにする必要があります。一方、ここでは、このシステム トレイ インジケーターが常に機能し、使用可能です。

これまでにこの方法を使用してタスクを実行したことがありますか?あなたの考えを聞きたいです。

要約する

上記は、Linux でのタスク用のカスタム システム トレイ インジケーターの作成についてご紹介したものです。お役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • Linuxトレイが点滅し続ける問題を解決する方法

<<:  MySQL 外部キー制約の一般的な操作の例 [表示、追加、変更、削除]

>>:  NodeJs の高メモリ使用量のトラブルシューティング実戦記録

推薦する

Vue の NetEase Cloud Music Player インターフェースを模倣したシンプルな実装プロセス

仕事のプロジェクトのニーズにより、曲の再生が必要となり、さまざまな資料を参考にして、NetEase ...

Dockerのプロセスとイメージを実行するための基本コマンドの詳細な説明

目次1. ワークフローを実行する2. ミラーリングの基本コマンド1. ワークフローを実行するDock...

MySQL レプリケーションの詳細な説明と簡単な例

MySQL レプリケーションの詳細な説明と簡単な例マスタースレーブレプリケーション技術は、MySQL...

単一マシン上での Tomcat の複数インスタンスの実装

1. はじめにまず、1 台のマシンで複数のインスタンスを使用する理由という質問に答える必要があります...

Linux ソースコードの解析 epoll

目次1. はじめに2. シンプルなepollの例2.1、epoll_create 2.2、構造体イベ...

Linux で開いているポートへのリモート アクセスを許可する方法

1. ファイアウォール設定ファイルを変更する # vi /etc/sysconfig/iptable...

HTML iframe 使用状況の概要の収集

Iframe 使用状況の詳細な分析<iframe frameborder=0 width=17...

Vue で Baidu Map を呼び出して経度と緯度を取得する

プロジェクトでは、現在地の緯度経度を取得したり、場所を検索して緯度経度情報を取得したりする必要があり...

HTML における DTD の使用法の概要

DTD はマークアップの文法規則のセットです。これは XML 1.0 仕様の一部であり、HTML フ...

Vue3 非同期データ読み込みコンポーネントサスペンスの使い方

目次序文コンポーネントの作成要約する序文Vue3 には多くの注目すべき機能が追加されましたが、サスペ...

JS ES6 変数分割代入の詳細な説明

目次1. 脱構築とは何か? 2. 配列の分割3. 配列モードと代入モードの統一4. デフォルト値の構...

MySQLで適切なインデックスを選択する方法

まずは栗を見てみましょう EXPLAIN select * from employees where...

HTMLページ作成に関する私の経験の簡単な要約

Word of Mouth に入社して 3 ~ 4 か月が経ちました。仕事の中で一番の収穫は、ビジュ...

Alibaba Cloud に Docker をインストールする際の問題と解決策

質問Alibaba Cloud イメージを使用して Docker をインストールすると、次の図に示す...

Linux Centos7 に mysql8 をインストールするチュートリアル

1. RPMバージョンのインストールデータベースの他のバージョンがあるかどうかを確認し、ある場合は完...