Gnome ShellでBitbar, SwiftBar代替のArgosを使う

PodcastのRebuild.fm 292回でBitBar, SwiftBar というツールバーに任意のコマンドの結果を表示できるツールを知って

Rebuild: 292: Two Chickens, One Stone (hak)

GitHub – matryer/bitbar: Put the output from any script or program in your Mac OS X Menu Bar

SwiftBar

Linuxで動作するBitBar/SwiftBar Alternativeが無いかなと探して，Argos, Kargos, Margosというものを見つけました．

GitHub – p-e-w/argos: Create GNOME Shell extensions in seconds

GitHub – lipido/kargos: KDE Plasma port of GNOME Argos and OSX BitBar

GitHub – ssimono/margos: Create Mate applets from your script output

そして先日Margosを試してみたけどウィンドウ表示できなかったりと機能が少なかったです．

MATE環境のステータスバーに任意のコマンド結果を表示できるMargos – matoken’s meme

ということで今回はGnome Shell環境を用意してBitBarと互換性があるというArgosを試してみました．

p-e-w/argos: Create GNOME Shell extensions in seconds

ArgosはGnome shellの拡張機能として提供されています．
以下のページから入手できます．ブラウザから導入もしくは手動でダウンロードして展開します．

Argos – GNOME Shell 拡張機能

手動ダウンロード時はGnome shellのバージョンを求められるのでバージョンがわからない場合は以下のようなコマンドで確認できます．

Gnome Shellバージョン確認

$ gnome-shell --version
GNOME Shell 3.38.3

手動での導入の場合拡張機能ダウンロード後以下のような感じで展開します．

$ mkdir -p ~/.local/share/gnome-shell/extensions
$ unzip ./argospew.worldwidemann.com.v3.shell-extension.zip \
-d ~/.local/share/gnome-shell/extensions/argos@pew.worldwidemann.com/

このあとGnome Shell を Alt+F2 r↲ と操作して再起動して反映します．

ステータスバーにArgosは現れましたが，クリックしてもウィンドウが開きません．Gnome Shellが新しい(3.36以降?)とArgosはうまく動かないようです．

Argos menus won’t open on Ubuntu 20.04 – Is it a known issue? · Issue #120 · p-e-w/argos · GitHub

Gitリポジトリのmasterと以下のPRのpatchを利用して動作しました．

Use registerClass to make plugin compatible with gnome 3.36. by rammie · Pull Request #111 · p-e-w/argos · GitHub

一旦Argosを削除して導入し直します．

旧バージョンを削除

$ gnome-extensions disable argos@pew.worldwidemann.com (1)
$ gnome-extensions uninstall argos@pew.worldwidemann.com (2)

拡張機能無効化

アンインストール

続いてGit版ArgosのmasterとPRのファイルを適用します．

$ git clone https://github.com/p-e-w/argos (1)
$ cd argos
$ cp -r ./argos@pew.worldwidemann.com \
~/.local/share/gnome-shell/extensions/ (2)
$ wget https://raw.githubusercontent.com/p-e-w/argos/c4663d9d3e29ef33b7e9123ef0c095811c91cf5b/argos%40pew.worldwidemann.com/menuitem.js \
-O ~/.local/share/gnome-shell/extensions/argos@pew.worldwidemann.com/menuitem.js (3)

リポジトリclone

拡張機能コピー

Gnome Shell 3.36+向けの修正を適用

Alt+F2 r↲ でGnome Shellを再起動して反映してGnome Shell 3.38.3でも動作するようになりました．

Argosのデフォルトプラグインを確認してみます．

ステータスバーにArgosが現れているはずです．文字列をクリックでウィンドウが表示されます．最下部の argos.sh をクリックすると規定値のテキストエディタで開かれてそのまま編集できて便利です．

Argos Pluginは結構簡単に書けます．

~/.config/argos/ に実行可能プラグラムやスクリプトを置くと即実行されます．プログラムの出力結果1行目がバーに表示され，--- の後がウィンドウ内に表示されます．インターバルはファイル名で制御します．
例えば hoge.3s+.sh の場合は3秒毎に実行され， fuga.10m+.py は10分毎に実行されます．
その他色を付けたりアイコンを設定したり色々できるようです．詳しくはBitBar, Argosのドキュメントを参照してください．

試しに簡単なPluginを作ってみます．

まずは定番の天気表示をwegoコマンドで試します．
天気をバーに表示してクリックすると2日分の天気予報を表示されるようにしてみました．罫線は崩れちゃいました．

~/.config/argos/wego.1h+.sh

#!/bin/bash

STR=`wego -d 2 -f emoji`
echo "`echo "${STR}" | head -4 | tail -1`"
echo "---"
echo "${STR}" | awk 1 ORS="\\\\n"
echo " | font=monospace"

次にCPUの温度とtopを表示するものを書いてみました．1分毎にCPUの温度をバーに表示して，クリックするとtopコマンドの上の方をを表示します．手元のPCはよくCPU温度が上がってサーマルスロットリングされてしまうのでこれは結構実用的です．

~/.config/argos/cputhermal.1m+.sh

#!/bin/bash

THERMAL=`acpi -t | awk '{print $4}'`
COLOR="white"

if [ `echo "${THERMAL} >= 80" | bc` == 1 ] ; then
COLOR="red"
fi

#echo " ${THERMAL}℃ "
echo " ${THERMAL}℃ | color=${COLOR}"
echo "---"
if [ "${ARGOS_MENU_OPEN}" == "true" ]; then
TOP_OUTPUT=$(top -b -n 1 | head -n 20 | awk 1 ORS="\\\\n")
echo "${TOP_OUTPUT} | font=monospace bash=top"
else
echo "Loading..."
fi

本当は80度を超えていたらバーの文字列を赤くしたいのですがうまく行っていません．Argosのバグらしく，ワークアラウンドとして絵文字を表示すればOKというのを見かけましたがこれもうまく動いていません．(ちなみにエスケープシーケンスでの色変更は効くようです．)

次にArgosはBitBarと互換性があるということでBitBar Pluginを利用できるか試してみます．

GitHub – matryer/bitbar-plugins: Plugin repository for BitBar

ただし，PluginによりAPI keyや座標を記述したりと行った少しの修正は必要(これはBitBarでも)，更にBitBarはmacOS用なのでシステム周りのPluginは動かなかったりPATHが違ったりするので修正しなうと動かなかったりします．

そのまま動きそうなものとしてHackserNewsを表示するプラグインを試してみました．リポジトリをcloneしてシンボリックリンクを貼ると動作しました :)

$ git clone https://github.com/matryer/bitbar-plugins
$ cd bitbar-plugins
$ ln -s `pwd`/Web/HackerNews/hacker_news.1m.rb ~/.config/argos/

という感じでArgosはBitBarと互換性があるしShell Scriptなどをちょっと書くだけでステータスバーにいろいろな情報を表示来てとても便利です．Gnome Shell環境の方はぜひためしてみてください．

しかし，解像度が低いと表示領域が狭く一部しか表示されなくて視認性が悪くなるので大画面のモニタがほしいところです……．

ということでMargos, Argosを試して残りはKDE Plasma向けのKargosですが，WebのREADMEを見るとちょっと古そうなので試すのをためらっています．

GitHub – lipido/kargos: KDE Plasma port of GNOME Argos and OSX BitBar

A Plasma port of Argos and BitBar plugins to fast create custom plasmoids.

Note: This is an alpha project. By now, it only was tested on Kubuntu 16.04 LTS.

環境1

$ git -C ~/src/argos log | head -1
commit fcb475140bd9d0b4b95279ce56c4c28f36fb29d6
$ dpkg-query -W gnome-shell gnome-shell-extensions
gnome-shell 3.38.3-1
gnome-shell-extensions 3.38.2-1
$ lsb_release -dr
Description: Debian GNU/Linux bullseye/sid
Release: unstable
$ uname -m
x86_64

環境2

$ git -C ~/src/argos log | head -1
commit fcb475140bd9d0b4b95279ce56c4c28f36fb29d6
$ dpkg-query -W gnome-shell gnome-shell-extensions
gnome-shell 3.38.2-1ubuntu1
gnome-shell-extensions 3.38.2-1
$ lsb_release -dr
Description: Ubuntu Hirsute Hippo (development branch)
Release: 21.04
$ uname -m
x86_64

Note

※Margos/Argosについて「東海道らぐ　あひる焼きさんのライトニングトークダービー！」でBitbar/SwiftBarをLinuxでも使いたい | edocrとして発表しました．