Hirsute Hippo(21.04) – matoken's blog https://matoken.org/blog Is there no plan B? Wed, 09 Jun 2021 22:29:13 +0000 ja hourly 1 https://wordpress.org/?v=7.0 https://matoken.org/blog/wp-content/uploads/2025/03/cropped-1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9-32x32.jpeg Hirsute Hippo(21.04) – matoken's blog https://matoken.org/blog 32 32 Debian/Ubuntuでawkを切り替える https://matoken.org/blog/2021/06/10/swatch-awk/ https://matoken.org/blog/2021/06/10/swatch-awk/#comments Wed, 09 Jun 2021 22:18:56 +0000 http://matoken.org/blog/?p=3259

Debian等でのインストール直後のawkは mawk が導入されます.
Debianのパッケージでは他にGNU awk(パッケージ名 gawk ), The One True Awk(パッケージ名 original-awk )というものもあります.*BSDなどでよく見る nawk もあるように見えますが,シンボリックリンクだけのようです.
(他にもあるかもしれない?)

mawk は初期状態で入っていて軽量.GNU awk はmawkに比べて多機能で既定値では導入されませんが, byobu などが依存を求めるので入っている人も多いと思います.

複数のawkパッケージが導入されているときに awk と実行したときは update-alternatives で管理されたシンボリックリンク先のいずれかのawkが実行されます.これを切り替えてみます.

切り替え前の状態です. awk , nawkgawk(GNU awk) に向いています.

$ ls -l /usr/bin/*awk
lrwxrwxrwx 1 root root     21 May 16 00:33 /usr/bin/awk -> /etc/alternatives/awk
-rwxr-xr-x 1 root root 694624 Feb 10 17:42 /usr/bin/gawk
-rwxr-xr-x 1 root root 158296 Feb 17  2020 /usr/bin/mawk
lrwxrwxrwx 1 root root     22 May 16 00:33 /usr/bin/nawk -> /etc/alternatives/nawk
-rwxr-xr-x 1 root root 135848 Dec 22 06:24 /usr/bin/original-awk
$ ls -l /etc/alternatives/*awk
lrwxrwxrwx 1 root root 13 May 16 04:27 /etc/alternatives/awk -> /usr/bin/gawk
lrwxrwxrwx 1 root root 13 May 16 04:27 /etc/alternatives/nawk -> /usr/bin/gawk

awk コマンドを切り替えてみます.ここでは gawk から mawk にしました.

$ sudo update-alternatives --display awk (1)
awk - auto mode
  link best version is /usr/bin/gawk
  link currently points to /usr/bin/gawk
  link awk is /usr/bin/awk
  slave awk.1.gz is /usr/share/man/man1/awk.1.gz
  slave nawk is /usr/bin/nawk
  slave nawk.1.gz is /usr/share/man/man1/nawk.1.gz
/usr/bin/gawk - priority 10
  slave awk.1.gz: /usr/share/man/man1/gawk.1.gz
  slave nawk: /usr/bin/gawk
  slave nawk.1.gz: /usr/share/man/man1/gawk.1.gz
/usr/bin/mawk - priority 5
  slave awk.1.gz: /usr/share/man/man1/mawk.1.gz
  slave nawk: /usr/bin/mawk
  slave nawk.1.gz: /usr/share/man/man1/mawk.1.gz
/usr/bin/original-awk - priority 0
  slave awk.1.gz: /usr/share/man/man1/original-awk.1.gz
$ sudo update-alternatives --config awk (2)
There are 3 choices for the alternative awk (providing /usr/bin/awk).

  Selection    Path                   Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gawk           10        auto mode
  1            /usr/bin/gawk           10        manual mode
  2            /usr/bin/mawk           5         manual mode
  3            /usr/bin/original-awk   0         manual mode

Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/bin/mawk to provide /usr/bin/awk (awk) in manual mode
$ sudo update-alternatives --set awk /usr/bin/mawk (3)
update-alternatives: using /usr/bin/mawk to provide /usr/bin/awk (awk) in manual mode
$ ls -l /etc/alternatives/*awk (4)
lrwxrwxrwx 1 root root 13 Jun  7 08:27 /etc/alternatives/awk -> /usr/bin/mawk
lrwxrwxrwx 1 root root 13 Jun  7 08:27 /etc/alternatives/nawk -> /usr/bin/mawk
  1. 現在の awk の設定を確認. gawk に向いている
  2. 対話モードで update-alternatives コマンドを起動して 2mawk に設定
  3. コマンドモードの場合
  4. awk , nawkmawk に向いたのを確認.

切り替えできました. :)

ちなみに update-alternatives で管理されているコマンドの一覧は以下のコマンドで表示できます.

$ update-alternatives --get-selections
環境1(Debian sid amd64)
$ dpkg-query -W mawk gawk original-awk dpkg
dpkg    1.20.9
gawk    1:5.1.0-1
mawk    1.3.4.20200120-2
original-awk    2018-08-27-1
$ lsb_release -dr
Description:    Debian GNU/Linux 11 (bullseye) (1)
Release:        11
$ arch
x86_64
  1. 実際はsid
環境2(Ubuntu 21.04 amd64)
$ dpkg-query -W mawk gawk dpkg
dpkg	1.20.9ubuntu1
gawk	1:5.1.0-1build1
mawk	1.3.4.20200120-2
$ lsb_release -dr
Description:	Ubuntu 21.04
Release:	21.04
$ arch
x86_64
環境3(Raspberry Pi OS buster armhf)
$ dpkg-query -W mawk gawk dpkg
dpkg    1.19.7
gawk    1:4.2.1+dfsg-1
mawk    1.3.3-17
$ lsb_release -dr
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
$ arch
armv7l

]]>
https://matoken.org/blog/2021/06/10/swatch-awk/feed/ 1
The Great SuspenderでサスペンドしていたURLをjsonで出力する https://matoken.org/blog/2021/02/05/output-the-url-suspended-by-the-great-suspender-with-json/ https://matoken.org/blog/2021/02/05/output-the-url-suspended-by-the-great-suspender-with-json/#respond Fri, 05 Feb 2021 09:15:16 +0000 http://matoken.org/blog/?p=2969

ということで削除されちゃったんですね.
自分は先月怪しいという話を聞いて削除していました.その時タブが消えてしまい悲しかったのですがこんな感じで復旧させました.
タイムスタンプとタイトル,URLをjsonで出力します.

$ sqlite3 ~/.config/google-chrome/Default/History "SELECT \"[\" || group_concat(json_object('timestamp', last_visit_time, title, url)) || \"]\" FROM urls WHERE url LIKE '%bkeccnjlkjkiokjodocebajanakg%';" | jq . | sed -e 's/chrome-extension:\/\/klbibkeccnjlkjkiokjodocebajanakg\/suspended.html.*&uri=//'

何をやっているかというと, ~/.config/google-chrome/Default/History がGoogle Chromeのsqlite3形式の履歴ファイルなので,この中からThe Great Suspenderのurlの含まれているurlを引っ張り出して整形しています.

Chromiumの場合は ~/.config/chromium/Default/History
Braveは ~/.config/BraveSoftware/Brave-Browser/Default/History でした.

Default以外のprofileは名前いろいろなのでfindとかで探すといいでしょう.

$ find ~/.config/chromium/ ~/.config/google-chrome/ ~/.config/BraveSoftware/Brave-Browser -name History

ここで紹介したのはLinuxでの場合ですが,パスを変えると他のOSでもいけるはずです.

環境1
$ dpkg-query -W jq sqlite3 chromium google-chrome-stable
chromium
google-chrome-stable    69.0.3497.100-1
jq      1.6-2.1ubuntu1
sqlite3 3.34.0-1
$ lsb_release -dr
Description:    Ubuntu Hirsute Hippo (development branch)
Release:        21.04
$ uname -m
x86_64
環境2
$ dpkg-query -W jq sqlite3 chrome brave-browser google-chrome-stable
brave-browser   1.19.90
google-chrome-stable    88.0.4324.146-1
jq      1.6-2.1
sqlite3 3.34.1-1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

]]>
https://matoken.org/blog/2021/02/05/output-the-url-suspended-by-the-great-suspender-with-json/feed/ 0
Gnome ShellでBitbar, SwiftBar代替のArgosを使う https://matoken.org/blog/2021/01/23/use-argos-instead-of-bitbar-swiftbar-in-gnome-shell/ https://matoken.org/blog/2021/01/23/use-argos-instead-of-bitbar-swiftbar-in-gnome-shell/#comments Sat, 23 Jan 2021 13:37:47 +0000 http://matoken.org/blog/?p=2939

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

]]>
https://matoken.org/blog/2021/01/23/use-argos-instead-of-bitbar-swiftbar-in-gnome-shell/feed/ 1