Ubuntu Weekly Recipe

第494回 GNOME Shellの拡張機能を「シェルスクリプト」で作ってみよう

この記事を読むのに必要な時間:およそ 3.5 分

第492回ではGNOME Shellの拡張機能がJavaScriptとCSSで構成されていることを紹介しました。今回は拡張機能を「シェルスクリプト」で作成できるフレームワーク「Argos」を紹介します。

JavaScriptは人類には難しすぎる

GNOME Shellに搭載されている,JavaScriptやCSSを用いてコンパイルすることなくUIをカスタマイズできる機能は非常に便利です。しかしながらJavaScriptはその真の挙動を人類が理解するには難しい言語です※1)⁠もう少しわかりやすい言語で書けないものでしょうか※2)⁠

※1
あくまで個人の"undefined"です。
※2
本記事での「わかりやすい言語」とは「その言語をわかりやすいと主張する人が普段から好んで使っているプログラミング言語」を意味しています。万人にとってわかりやすいかどうかは一切関係ありません。

特にGNOME Shellの拡張機能はJavaScriptとCSSだけでなく,Shell ToolkitやTweenerといったあまりドキュメントが充実していないライブラリーも使う必要があるため,余計に難しく感じてしまいます。インジケーターにちょっとしたデータを表示したいだけなのに。

ArgosはそんなJavaScript恐怖症の利用者に向けた,GNOME Shell用インジケーター開発フレームワークです。好みのプログラミング言語を用いて「表示したいものを標準出力に出力する」だけで,任意のデータをインジケーター上に表示できます。対応しているのはインジケーターの拡張だけです。

ArgosはmacOSのメニューバーをカスタマイズするBitBarと完全に互換性があることを謳っています。つまりBitBar向けのスクリプトであれば,UbuntuのGNOME Shell上でもそのまま動くということです。ただし当然のことながら,そのBitBarスクリプトが依存するものは一通りUbuntu上に存在している必要はあります。

まとめるとArgosを使えばシェルスクリプトを使って任意の情報をインジケーターに表示できるということです。

Argosのインストール

ArgosそのものはGNOME Shellの拡張機能です。よってまずはArgosをインストールしましょう。方法はいくつかありますが,拡張機能のページからインストールするか,GitHubからクローンしてコピーするかの2択でしょう。今回は後者を利用します。

$ git clone https://github.com/p-e-w/argos.git
$ mkdir -p ~/.local/share/gnome-shell/extensions/
$ cp -a argos/argos@pew.worldwidemann.com/ ~/.local/share/gnome-shell/extensions/

あとは前回と同様にgnome-shell-extension-prefsを起動して,Argosをオンにします。さらにログインし直すと,拡張機能がロードされて次のような画面がインジケーターに表示されるはずです。

図1 初期状態のArgos

画像

図2 クリックするとドロップダウンメニューが表示される

画像

インジケーターの「Argos」をクリックするとドロップダウンメニューが表示されます。メニューとして備わっているのは次の3つです。

  • Argosのサイトへのリンク
  • インジケーターメニューのスクリプト用ディレクトリ~/.config/argos/へのリンク
  • インジケーターメニューのスクリプトファイル~/.config/argos/argos.shへのリンク

これらはすべて~/.config/argos/argos.shのみで実現しています。

インジケータースクリプトの追加方法

Argosは~/.config/argos/以下のスクリプトを実行し,その標準出力の内容をパースしてインジケーター領域に表示しています。つまり新規にインジケーターに何かを表示したい場合は,スクリプトを~/.config/argos/に追加することになります。

まずは標準でインストールされる,argos.shの中身について見てみましょう※3)⁠

※3
このスクリプトは拡張機能を起動したとき,~/.config/argos/ディレクトリが存在しないと自動的に生成されます。
#!/usr/bin/env bash

URL="github.com/p-e-w/argos"
DIR=$(dirname "$0")

echo "Argos"
echo "---"
echo "$URL | iconName=help-faq-symbolic href='https://$URL'"
echo "$DIR | iconName=folder-symbolic href='file://$DIR'"

非常にシンプルなスクリプトですね。このスクリプトが実行されると以下のような出力が得られます。

Argos
---
github.com/p-e-w/argos | iconName=help-faq-symbolic href='https://github.com/p-e-w/argos'"
/home/shibata/.config/argos | iconName=folder-symbolic href='file:///home/shibata/.config/argos'"

この出力結果がArgos本体に渡されて,インジケーター上のUIとして構築されます。標準出力の結果は次のようなフォーマットであることが期待されています。

インジケーターのタイトル部分(トップパネルに表示される部分)
---
ドロップダウンメニューの項目
ドロップダウンメニューの項目
ドロップダウンメニューの項目
ドロップダウンメニューの項目

各タイトルや項目をカスタマイズしたい場合は,パイプ記号|の後ろにプロパティを設定します。

echo "$URL | iconName=help-faq-symbolic href='https://$URL'"

たとえば上記の例の場合アイコン名がhelp-faq-symbolicになっていますので,/usr/share/icons/Adwaita/scalable/apps/help-faq-symbolic.svgがアイコンとして使われます。さらにhrefプロパティにURIを指定することでクリックしたときにそのアドレスのコンテンツが表示されることになるのです。非常に簡単ですね。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入