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 の高メモリ使用量のトラブルシューティング実戦記録

推薦する

HTMLはWEB標準の開発の中心的な基盤です

HTML 中心のフロントエンド開発は、ほぼ Web 標準の意味です。共通しているのは「分離」という考...

MySql インポート CSV ファイルまたはタブ区切りファイル

別のライブラリから別のライブラリにデータをインポートする必要がある場合があり、このデータは CSV ...

JavaScriptにおけるこのポインティング問題の詳細な説明

序文JS の this ポインターは、初心者にとって常に頭痛の種でした。今日は、これが地面に落ちたと...

Dockerで新しいイメージを手動で構築する方法

この記事では、Docker で新しいイメージを手動で構築する方法を紹介し、皆さんと共有します。詳細は...

MySQL 制約の超詳細な説明

目次MySQL 制約操作1. 非ヌル制約2. ユニーク制約3. 主キー制約4. 外部キー制約5. カ...

node.js グローバル変数の具体的な使用法

グローバルオブジェクトすべてのモジュールは呼び出すことができますglobal: ブラウザの wind...

MySQL 5.7.17 のインストールと設定方法のグラフィック チュートリアル (Ubuntu 16.04)

公式 MySQL Web サイトから Ubuntu Linux 用の最新バージョンの MySQL を...

2つのボールが交差する粘着効果を実現するCSSサンプルコード

これは純粋に CSS のみを使用して作成されたエフェクトです。簡単に言うと、このエフェクトは画像処理...

カタツムリ映画システムのDocker展開の詳細なプロセス分析

環境に関する声明ホストOS: Cetnos7.9 最小インストールdocker バージョン: 20....

MySql ファジークエリ JSON キーワード取得ソリューションの例

目次序文オプション1:オプション2:オプション3:オプション4(最終的に採用されたオプション):要約...

インスピレーションを得るための7つのクールなダイナミックウェブサイトデザイン

デザインの分野では、毎年さまざまなデザインのトレンドや流行があります。たとえば、近年のレスポンシブデ...

XHTML 入門チュートリアル: XHTML Web ページ画像アプリケーション

<br />適度に画像を追加すると、Web ページがより美しくなります。 画像タグ &l...

カルーセルカルーセルケースのJS実装

この記事の例では、カルーセルカルーセルを実装するためのJSの具体的なコードを参考までに共有しています...

Linux lnコマンドの使用

1. コマンドの紹介ln コマンドは、ファイルのリンクを作成するために使用されます。リンクは、ハード...

Docker で Tomcat、MySQL、Redis をインストールするための詳細な手順

目次DockerでTomcatをインストールするtomcatイメージを使用してコンテナを作成する(イ...