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

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

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

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

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

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はうまく動かないようです.

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

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

旧バージョンを削除
$ gnome-extensions disable argos@pew.worldwidemann.com (1)
$ gnome-extensions uninstall argos@pew.worldwidemann.com (2)
  1. 拡張機能無効化
  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)
  1. リポジトリclone
  2. 拡張機能コピー
  3. Gnome Shell 3.36+向けの修正を適用

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

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

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

argos argos

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

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

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

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

argos wego

~/.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温度が上がってサーマルスロットリングされてしまうのでこれは結構実用的です.

argos cputhermal

~/.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 "<span color='${COLOR}' weight='normal'><tt>🌡${THERMAL}℃ </tt></span>"
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を利用できるか試してみます.

ただし,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 hackernews

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

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

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

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

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

PodcastのRebuildfmで出てきたmacOS用のBitBar, SwiftBar というツールバーに任意のコマンドの結果を表示できたりするユーティティのことを知りました.

Linuxで動く似たようなものないかな?と少し探してみました.🐦

Gnome Shellのextentionでargosというものが,KDEにはkargosというものが,MateにはMargosというものがありました.

しかし現在利用しているWMはAwesomeなのでどれも使えなさそうです.
別の端末に子の中で一番小さそうなMateを導入してMargosを試してみました.

Mate 1.18以上,gtk-3,Python 3.6以上,pipが必要です.

margos導入
$ sudo pip3 install -U margos (1)
$ sudo margos install (2)
$ killall mate-panel (3)
  1. pipコマンドでmargosを導入
  2. デスクトップ環境で利用できるようにする
  3. mate-panelを再起動する
margosアプレット登録

後はパネルにアプレットを登録します.
パネルで右クリックしてアプレットの追加をします.
アプレット内の「コマンド」を選択して追加します.

margos addpanel

登録されたmargosは既定値で時計になっています.これを右クリックして「Prefarence」で設定画面に移動します.
「Command」部分に任意のコマンドを,「Interval」にコマンドを実行する間隔の秒数を指定します.

margos setting

以下はansiweatherというコマンドで天気を表示しているところです.

margos ansiwather

ansiweather -l chiyoda,JP -u metric -f 1 -a false -s true

これで色々と任意のコマンドを表示できるといくつか試してみましたが,いくつか問題が.

以下はwegoで天気予報を表示しようとした結果にエスケープシーケンスが含まれていた場合です.エスケープシーケンスで文字色を設定しているのですがそのまま出力されています.colorなどは使わないようにしましょう.

margos esc

wego -d 1 -f emoji | head -4 | tail -1

以下は九州電力の消費電力を表示しようとしたのですが,⚡21時/84% と表示したいところの`時`部分が`?になり,%`が消えてしまっています.絵文字がOKで日本語がNGなパターンは初めて見た気がします.

margos kanji par

echo -n ⚡$`date +%H-1時/;curl -s https://www.kyuden.co.jp/td_power_usages/csv/juyo-hourly-date +%Y%m%d.csv | head -38 | tail -24 | grep ,$date +%H -1:00 | cut -z -d, -f5;echo %`

Note
タイミングによりうまく動かないのに気づいた><

その他, | でつないだりするとうまく動きませんが, sh -c "command1 | command2" のようにsh経由で動かすと大丈夫でした.ファイルに書き出してそれを指定したほうがいいかもしれません.

という感じでmargosは他のツールに比べると機能が少ないですが最低限の機能はあるかなと思います.bitbar, swiftbarのpluginを流用することもできそうです.
watchコマンドをMateパネルに置く感じですね.

Gnome Shell/KDEのargos,kargosの方が機能が多くbitbar,swiftbarに近そうなのでそちらも試してみたいところです.しかし常用環境のawesome wmではどれも動かないので汎用的なものがないかな…….

環境
$ pip3 list | grep -i margos
Margos                       0.0.2
$ pacman -Qi python-pip | grep Version
Version         : 20.2.2-1
$ pacman -Qi mate-desktop | grep Version
Version         : 1.24.1-1
$ mate-about -v
MATE Desktop Environment 1.24.1
$ lsb_release -dr
Description:	Manjaro ARM Linux
Release:	20.12
$ uname -m
aarch64