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

推薦する

sed コマンドを使用して文字列を置換する Linux チュートリアル

文字列を置き換えるには、次の形式を使用する必要があります。 $ sed s/置換対象文字列/置換文字...

CSS パフォーマンスの最適化 - will-change の使用方法の詳細な説明

will-change は、要素にどのような変更が行われるかをブラウザに伝え、ブラウザが事前に最適化...

Docker のコンテナ データ ボリュームの概要

目次Dockerコンテナのデータ量データボリュームの使用方法1: コマンド-vを使用して直接マウント...

JSON.parse と JSON.stringify の使い方の詳細な説明

目次JSON.パースJSON.parse 構文リバイバーパラメータJSON.parse の機能その他...

MySQL無料インストール版のパスワードの設定と変更に関するチュートリアル

ステップ 1: 環境変数を構成する (解凍パス: G:\mysql\mysql-5.7.21-win...

ページの下部にHTMLフッターを配置する簡単な方法

要件:ページ コンテンツが短く、ブラウザーの高さをサポートできない場合でも、フッターをウィンドウの下...

Ember.js と Vue.js の詳細な比較

目次概要フレームワークを選択する理由は何ですか? js のエンバーEmber.js と Vue.js...

Linux クラウド サーバーに新しいディスクをマウントする方法

背景社内に新しいサーバーが追加され、2Tのハードディスクがマウントされました。sshでログイン後、マ...

MongoDB データベースの状態を監視する Zabbix3.4 メソッド

Mongodb には db.serverStatus() コマンドがあり、これを使用して Mongo...

MySQL共通ストレージエンジンの機能と使用方法の詳細な説明

この記事では、一般的な MySQL ストレージ エンジンの機能と使用方法を例を使って説明します。ご参...

Linux でファイルをあいまい検索するのに適したコマンドは何ですか?

1. はじめにこの記事では、主に Linux システムでコマンドライン ツールを使用してファイルを...

LeetCode の SQL 実装 (197. 気温上昇)

[LeetCode] 197.気温上昇Weather テーブルが指定されている場合、前の日付 (昨...

MySQL のロードバランサーとして nginx を使用する方法

注意: nginxのバージョンは1.9以上である必要があります。nginxをコンパイルするときに、-...

MySql 5.7.20 のインストールとデータおよび my.ini ファイルの構成

1. まずMySqlの公式サイトからダウンロードします参考: https://www.jb51.ne...

Vueは物流タイムライン効果を実現します

この記事では、物流タイムライン効果を実現するためのVueの具体的なコードを例として紹介します。具体的...