drivetempでハードディスクの温度を確認する

先日Debian sid amd64環境でapt upgradeしたときにhddtempのNEWSがあることに気づきました.

$ zcat /usr/share/doc/hddtemp/NEWS.Debian.gz
hddtemp (0.3-beta15-54) unstable; urgency=medium

  hddtemp has been dead upstream for many years and is therefore in a minimal
  maintenance mode. It will be shipped in the Debian Bullseye release, but
  will not be present in the Debian Bookworm release.

  Nowadays the 'drivetemp' kernel module is a better alternative. It uses the
  Linux Hardware Monitoring kernel API (hwmon), so the temperature is returned
  the same way and using the same tools as other sensors.

  Loading this module is as easy as creating a file in the /etc/modules-load.d
  directory:

    echo drivetemp > /etc/modules-load.d/drivetemp.conf

 -- Aurelien Jarno <aurel32@debian.org>  Tue, 02 Feb 2021 20:27:44 +0100

hddtempは対応しているストレージの温度を取得できます.

$ sudo hddtemp /dev/sda
/dev/sda: Seagate BarraCuda SSD ZA0100MC0100 2    : 41°C

しかしこのNEWSによると hddtemp はもう上流でメンテナンスされていないのでDebianの次期バージョンの Bullseye には入るけどその次の Bookworm からは除かれる予定のようです.

そして drivetemp というカーネルモジュールが代替になるとのこと.

てことで少し試してみました.

drivetempについてはkernelのドキュメントを確認します.

例 1. zcat /usr/share/doc/linux-doc-5.10/Documentation/hwmon/drivetemp.rst.gz | rst2html | w3m -T text/html

Kernel driver drivetemp

References

ANS T13/1699-D Information technology – AT Attachment 8 – ATA/ATAPI Command Set
(ATA8-ACS)

ANS Project T10/BSR INCITS 513 Information technology – SCSI Primary Commands –
4 (SPC-4)

ANS Project INCITS 557 Information technology – SCSI / ATA Translation – 5
(SAT-5)

Description

This driver supports reporting the temperature of disk and solid state drives
with temperature sensors.

If supported, it uses the ATA SCT Command Transport feature to read the current
drive temperature and, if available, temperature limits as well as historic
minimum and maximum temperatures. If SCT Command Transport is not supported,
the driver uses SMART attributes to read the drive temperature.

Usage Note

Reading the drive temperature may reset the spin down timer on some drives.
This has been observed with WD120EFAX drives, but may be seen with other drives
as well. The same behavior is observed if the ‘hdtemp’ or ‘smartd’ tools are
used to access the drive. With the WD120EFAX drive, reading the drive
temperature using the drivetemp driver is still possible after it
transitioned to standby mode, and reading the drive temperature in this mode
will not cause the drive to change its mode (meaning the drive will not spin
up). It is unknown if other drives experience similar behavior.

A known workaround for WD120EFAX drives is to read the drive temperature at
intervals larger than twice the spin-down time. Otherwise affected drives will
never spin down.

Sysfs entries

Only the temp1_input attribute is always available. Other attributes are
available only if reported by the drive. All temperatures are reported in
milli-degrees Celsius.

┌─────────────┬───────────────────────────────────────────────────────────────┐
│temp1_input │Current drive temperature │
├─────────────┼───────────────────────────────────────────────────────────────┤
│temp1_lcrit │Minimum temperature limit. Operating the device below this │
│ │temperature may cause physical damage to the device. │
├─────────────┼───────────────────────────────────────────────────────────────┤
│temp1_min │Minimum recommended continuous operating limit │
├─────────────┼───────────────────────────────────────────────────────────────┤
│temp1_max │Maximum recommended continuous operating temperature │
├─────────────┼───────────────────────────────────────────────────────────────┤
│temp1_crit │Maximum temperature limit. Operating the device above this │
│ │temperature may cause physical damage to the device. │
├─────────────┼───────────────────────────────────────────────────────────────┤
│temp1_lowest │Minimum temperature seen this power cycle │
├─────────────┼───────────────────────────────────────────────────────────────┤
│temp1_highest│Maximum temperature seen this power cycle │
└─────────────┴───────────────────────────────────────────────────────────────┘

drivetempを読み込むとSysfs で temp1_input として出てくるようです.

現在のセンサーの一覧を取得します.
$ find /sys/ -name "temp1_input" > /tmp/before.list 2>/dev/null
$ cat /tmp/before.list
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon3/temp1_input
/sys/devices/platform/coretemp.0/hwmon/hwmon4/temp1_input
/sys/devices/virtual/thermal/thermal_zone0/hwmon0/temp1_input
drivetemp モジュールの読み込み
$ sudo modprobe -v drivetemp
insmod /lib/modules/5.10.0-3-amd64/kernel/drivers/hwmon/drivetemp.ko
Note
永続化したい場合は
$ echo drivetemp | sudo tee /etc/modules-load.d/drivetemp.conf
増えたセンサを確認
$ find /sys/ -name "temp1_input" 2>/dev/null | diff -u /tmp/before.list -
--- /tmp/before.list    2021-02-05 01:45:58.691517588 +0900
+++ -   2021-02-05 01:46:00.178371154 +0900
@@ -1,3 +1,4 @@
 /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon3/temp1_input
 /sys/devices/platform/coretemp.0/hwmon/hwmon4/temp1_input
+/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/hwmon/hwmon6/temp1_input
 /sys/devices/virtual/thermal/thermal_zone0/hwmon0/temp1_input
温度を確認
$ cat /sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/hwmon/hwmon6/temp1_input
44000
$ sudo hddtemp /dev/sda
/dev/sda: Seagate BarraCuda SSD ZA0100MC0100 2    : 44°C

hddtemp と同じ結果が取得できました.同じなので drivetemp の値は摂氏のようですね :)

とりあえず温度は取得できましたがデバイスから温度を取得したりデーモンなどは使えないのでそのへんは少し考えないといけなさそうです.

GNU coreutilsのcatで改行コードなどを確認する

最近知りました.

LC_MESSAGES=ja_JP.UTF-8のcat(1)
$ LC_MESSAGES=ja_JP.UTF-8 man cat | grep '\-A' -A25
       -A, --show-all           -vET と同じ

       -b, --number-nonblank
              空行以外に行番号を付ける。-n より優先される

       -e                       -vE と同じ

       -E, --show-ends
              行の最後に $ を付ける

       -n, --number
              全ての行に行番号を付ける

       -s, --squeeze-blank
              連続した空行の出力を行わない

       -t                       -vT と同じ

       -T, --show-tabs
              TAB 文字を ^I で表示

       -u     (無視)

       -v, --show-nonprinting
              ^ や M- 表記を使用する (LFD と TAB は除く)
LC_MESSAGES=Cのcat(1)
$ LC_MESSAGES=C man cat | grep '\-A' -A26
       -A, --show-all
              equivalent to -vET

       -b, --number-nonblank
              number nonempty output lines, overrides -n

       -e     equivalent to -vE

       -E, --show-ends
              display $ at end of each line

       -n, --number
              number all output lines

       -s, --squeeze-blank
              suppress repeated empty output lines

       -t     equivalent to -vT

       -T, --show-tabs
              display TAB characters as ^I

       -u     (ignored)

       -v, --show-nonprinting
              use ^ and M- notation, except for LFD and TAB
テストファイル作成
$ echo 'hoge
>       fuga
> ' | unix2dos > /tmp/test
odで中身確認
$ od -xc /tmp/test
0000000    6f68    6567    0a0d    6609    6775    0d61    0d0a    000a
          h   o   g   e  \r  \n  \t   f   u   g   a  \r  \n  \r  \n
0000017
普通にcat
$ cat /tmp/test
hoge
	fuga
-T でTABを ^I として表示
$ cat -T /tmp/test
hoge
^Ifuga
-v で\nやTABを除く制御コードを表示ここでは\rが^Mとして表示されている
$ cat -v /tmp/test
hoge^M
	fuga^M
^M
-t-vT と同じ
$ cat -t /tmp/test
hoge^M
^Ifuga^M
^M
-E で行末に$を表示.\rがあると頭に付いてしまうよう
$ cat -E /tmp/test
$oge
$	fuga
$
Note
追記 2020-02-10)
Debianでreportbugしたらpatchが :)
Debian 11 BullseyeやUbuntu 21.04に入るかな?
https://bugs.debian.org/cgi-bin/bugreport.cgi?att=1;bug=982208;filename=cat—​show-ends.diff;msg=10
-A-vET と同じ
$ cat -A /tmp/test
hoge^M$
^Ifuga^M$
^M$
-n で行番号を表示
$ cat -n /tmp/test
     1	hoge
     2		fuga
     3
-An で行番号と記号
$ cat -An /tmp/test
     1	hoge^M$
     2	^Ifuga^M$
     3	^M$

vimでは :set list, :set number でだいたい同じ感じでしょうか.

vim
  1 hoge$
  2 ^Ifuga$
  3 $

vim

環境
$ cat --version
cat (GNU coreutils) 8.32
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Torbjorn Granlund and Richard M. Stallman.
$ dpkg-query -W coreutils
coreutils	8.32-4+b1
$ lsb_release -dr
Description:	Debian GNU/Linux bullseye/sid
Release:	unstable
$ uname -m
x86_64

素早く絵文字や顔文字を選択するSplatmoji

最近絵文字や顔文字を探すのにはMozcやemojを利用しています.

似たものとしてSplatmojiというものを見つけたので試してみました.

導入はsourceか,パッケージが利用できます.パッケージ利用の場合はReleasesページからrpm, debが利用可能です.

sourceから
$ sudo apt install rofi xdotool xsel jq (1)
$ git clone https://github.com/cspeterson/splatmoji (2)
$ cd splatmoji
$ ./splatmoji copy
  1. 必要なパッケージを導入
  2. Splatmojiをclone
debパッケージから
$ wget https://github.com/cspeterson/splatmoji/releases/download/v1.2.0/splatmoji_1.2.0_all.deb (1)
$ sudo apt install ./splatmoji_1.2.0_all.deb (2)
$ splatmoji copy
  1. .debファイルをダウンロード
  2. .debファイルをaptコマンドでインストール

splatmoji copy として実行するとコピーモードでSplatmojiが起動して,絵文字や顔文字を選択するとクリップボードに貼り付けられます.
emojと違い,GUIのポップアップメニューとして起動するのでSplatmojiをショートカットキーに設定しておくと便利そうです.SplatmojiのREADMEにいくつかの環境のショートカットキーの登録方法も載っています :)

awesome wmではこんな感じで設定ファイルに登録してみました.

~/.config/awesome/rc.lua
    -- Emoji(Splatmoji)
    awful.key({ modkey,  "Control" }, "e", function () awful.util.spawn("splatmoji copy") end),
追記)
i3 wmでも設定しました.
~/.config/i3/config
# Emoji(Splatmoji)
bindsym $mod+Ctrl+e exec "splatmoji copy"
動いている様子

環境
$ dpkg-query -W rofi xdotool xsel jq splatmoji
jq      1.6-2.1
rofi    1.5.4-1+b1
splatmoji       1.2.0
xdotool 1:3.20160805.1-4
xsel    1.2.0+git9bfc13d.20180109-3
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

オライリージャパンで公開されている「GNU Make 第3版」のpdfをダウンロードして1つのpdfファイルにまとめる

以下のTweetで知ったので

読んでみようと以下のページからダウンロードしようとしたら章ごとにファイルが分割されていました.

ダウンロードしてpdftkで結合して1つのファイルにまとめてみました.

$ w3m -o display_link_number=1 https://www.oreilly.co.jp/library/4873112699/ | grep \\.pdf$ | grep -v catalog | cut -f2 -d\  | wget --wait=30 --random-wait -i - (1)
$ wget https://www.oreilly.co.jp/books/images/picture_large4-87311-269-9.jpeg (2)
$ convert ./picture_large4-87311-269-9.jpeg ./hyoushi.pdf (3)
$ ls *.pdf
appA.pdf  ato.pdf   ch03.pdf  ch06.pdf  ch09.pdf  ch12.pdf      index.pdf
appB.pdf  ch01.pdf  ch04.pdf  ch07.pdf  ch10.pdf  contents.pdf  mae.pdf
appC.pdf  ch02.pdf  ch05.pdf  ch08.pdf  ch11.pdf  hyoushi.pdf   maegaki.pdf
$ pdftk ./hyoushi.pdf ./mae.pdf ./maegaki.pdf ./contents.pdf ./ch01.pdf ./ch02.pdf ./ch03.pdf ./ch04.pdf ./ch05.pdf ./ch06.pdf ./ch07.pdf ./ch08.pdf ./ch09.pdf ./ch10.pdf ./ch11.pdf ./ch12.pdf ./appA.pdf ./appB.pdf ./appC.pdf ./index.pdf ./ato.pdf cat output "./GNU Make 第3版.pdf" (4)
$ pdfinfo ./GNU\ Make\ 第3版.pdf
Creator:        pdftk-java 3.1.1
Producer:       itext-paulo-155 (itextpdf.sf.net-lowagie.com)
CreationDate:   Tue Jan 26 07:56:56 2021 JST
ModDate:        Tue Jan 26 07:56:56 2021 JST
Tagged:         no
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          298
Encrypted:      no
Page size:      516 x 660 pts
Page rot:       0
File size:      20356655 bytes
Optimized:      no
PDF version:    1.6
$ rm ./hyoushi.pdf ./mae.pdf ./maegaki.pdf ./contents.pdf ./ch01.pdf ./ch02.pdf ./ch03.pdf ./ch04.pdf ./ch05.pdf ./ch06.pdf ./ch07.pdf ./ch08.pdf ./ch09.pdf ./ch10.pdf ./ch11.pdf ./ch12.pdf ./appA.pdf ./appB.pdf ./appC.pdf ./index.pdf ./ato.pdf
  1. pdfファイルをダウンロード
  2. 表紙画像をダウンロード
  3. 表紙画像をpdfに変換
  4. pdftkで全ファイルを結合
Oreilly GNU MAKE V3

pdftkはsnapでも導入できるそうです.

環境
$ dpkg-query -W pdftk imagemagick wget w3m
imagemagick     8:6.9.11.58+dfsg-1
pdftk   2.02-5+b1
w3m     0.5.3+git20210102-2
wget    1.21-1+b1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

デスクトップ/デスクトップアプリ共有ソフトのDeskreen

デスクトップ/デスクトップアプリ共有ソフトのDeskreenというものを知りました.

LinuxだとTopページには「🐧LINUX(.DEB)」となっていますが, OTHERS から飛ぶと,.rpmや.AppImageもあります.

今回は AppImage版で試しました.Linux x86_64環境なら大抵動くはずです.

ダウンロードして実行権限を付与して起動します.

$ wget https://github.com/pavlobu/deskreen/releases/download/v1.0.0/Deskreen-1.0.0.AppImage (1)
$ chmod u+x ./Deskreen-1.0.0.AppImage (2)
$ ./Deskreen-1.0.0.AppImage (3)
  1. ダウンロード(ウェブブラウザでダウンロードしてもOK)
  2. 実行権限付与(ファイラーで付与してもOK)
  3. 実行(ファイラーから起動してもOK)

起動すると同じネットワークで利用できる共有用のアドレスとQR codeが表示されます.画面を表示したいマシンのウェブブラウザでこれを開きます.

起動画面

20210125 00:01:08 583360

QR codeをクリックすると拡大されます.スキャンするときに便利.

QR code拡大

20210125 00:01:23 583735

スマートフォンで開くとこういう画面が表示されます.

スマートフォンで開いた画面

Screenshot 20210125 005010

Deskreen側で接続端末を確認して接続許可を与えます.

Deskreenで許可を与える

20210125 00:01:22 594120

次にDeskreenでスクリーンを共有するかアプリケーションウィンドウを共有するかを選択します.

フルスクリーン共有かアプリケーション画面共有かを選択する

20210125 00:01:31 594337

アプリケーションウィンドウを共有してみます.アプリケーションウィンドウの一覧が表示されるので共有したい画面を選択します.

アプリケーション選択画面

20210125 00:01:40 594581

共有する画面のプレビューが表示され,ここで「Confirm」を押すことで共有が開始されます.

最終確認画面

20210125 00:01:22 595609

Deskreenの共有中の画面です.「Connect New Device」を押すと現在の共有が切断され,新しい共有が開始されます.

共有中画面

20210125 00:01:46 596233

スマートフォンのGoogle Chromeで共有中の画面です.

共有された

Screenshot 20210125 005152

ビデオ画質が選択できます.

ビデオ画質選択

Screenshot 20210125 005202

歯車の右の四角いアイコンでフルスクリーンに出来ます.この画面にしておいておくと良さそうです.フルスクリーン解除は上にスワイプです.

フルスクリーン共有

Screenshot 20210125 005225

Deskreenの設定画面です.今のところほとんど設定変更は出来ません.

設定画面

20210125 00:01:36 602017

ダークモードにしてみました.

ダークモードを選択

20210125 00:01:41 602162

バージョン表記です.

version

20210125 00:01:53 602458

この手のソフトウェアは各種ありますが,最近よく使われているビデオミーティングの画面共有と同じような手順で操作(多分中身も)できるのでとっつきやすいかもしれません.クライアント側に専用アプリケーションを導入する必要がないのもいいですね.アドホックな利用には便利そうです.

固定の場所で毎日タブレットをサブモニタ代わりに使いたいと行った場合は毎回設定が必要なので少し面倒かもしれません.この辺はこれからのバージョンアップに期待したいです.

環境
$ ls -l ./Deskreen-1.0.0.AppImage
-rwxr--r-- 1 matoken matoken 82343060 Jan 21 21:48 ./Deskreen-1.0.0.AppImage
$ sha512sum ./Deskreen-1.0.0.AppImage
dccbe840f64cd335f13e12673ab12196ae52af14c64ae3fdbbcd3233cca988d6d663bf2bca622f32dca24571d2658737f965bca0006a34bb3d2758bcf9a9cb5e  ./Deskreen-1.0.0.AppImage
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

ミュートアンミュートスクリプトを修正

以前Awesome wmでボリュームコントロールをするのにscriptを書いてこれまで使っていました.

しかし,最近アンミュートにしても音が出なくなりました.

amixerではonになっているけど音が出ない
$ amixer -c 0 get Master
Simple mixer control 'Master',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 87
  Mono: Playback 36 [41%] [-38.25dB] [on]

pavucontrolで見るとミュートになっています.

pavucontrol mute

これをアンミュートすると音が出ます.
scriptで制御できるようコマンドで試します. pactl set-sink-mute コマンドで制御できました.

$ pactl set-sink-mute
You have to specify a sink name/index and a mute action (0, 1, or 'toggle')
$ pactl set-sink-mute 0 1 (1)
$ pactl set-sink-mute 0 0 (2)
  1. ミュート
  2. アンミュート

ということでscriptに追記しました.動作も問題なさそうです.これでビデオチャット時にアンミュートしたのに音が聞こえない??とならないといいな.

$ git -C ~/.config/awesome/ diff ~/.config/awesome/bin/awesome-audio.sh
diff --git a/bin/awesome-audio.sh b/bin/awesome-audio.sh
index 440f399..9c30d3d 100755
--- a/bin/awesome-audio.sh
+++ b/bin/awesome-audio.sh
@@ -22,6 +22,7 @@ case "$1" in
       amixer -q -c 0 set Master unmute
       amixer -q -c 0 set Speaker unmute
       amixer -q -c 0 set Headphone unmute
+      pactl set-sink-mute 0 0
       xset b
       echo -e "🔊\nunmute!"
       amixer -c 0 get Master | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-high.svg' numute
環境
$ dpkg-query -W pulseaudio pulseaudio-utils pavucontrol alsa-utils
alsa-utils      1.2.4-1
pavucontrol     4.0-2
pulseaudio      14.2-1
pulseaudio-utils        14.2-1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

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

フォントワークスのOFL-1.1 LicenseのフォントをLinuxデスクトップで利用する

ライセンスは著作権表示などを行なうことで商用/非商用を問わず無料で利用可能な「SIL Open Font License 1.1」。Google Fontsへの提供に伴い、GitHubでもフォントの公開を開始している。

この記事を書いている現在はまだGoogle Fontsでは公開されていないようです.

GitHubからは.ttfが入手できるので試してみます.

$ wget \ (1)
https://github.com/fontworks-fonts/Klee/raw/master/fonts/ttf/KleeOne-Regular.ttf \
https://github.com/fontworks-fonts/Klee/raw/master/fonts/ttf/KleeOne-SemiBold.ttf \
https://github.com/fontworks-fonts/Train/raw/master/fonts/ttf/TrainOne-Regular.ttf \
https://github.com/fontworks-fonts/Stick/raw/master/fonts/ttf/Stick-Regular.ttf \
https://github.com/fontworks-fonts/RocknRoll/raw/master/fonts/ttf/RocknRollOne-Regular.ttf \
https://github.com/fontworks-fonts/Reggae/raw/master/fonts/ttf/ReggaeOne-Regular.ttf \
https://github.com/fontworks-fonts/Rampart/raw/master/fonts/ttf/RampartOne-Regular.ttf \
https://github.com/fontworks-fonts/DotGothic16/raw/master/fonts/ttf/DotGothic16-Regular.ttf
$ mkdir -p ~/.local/share/fonts/fontworks (2)
$ mv *.ttf ~/.local/share/fonts/fontworks/ (3)
$ fc-cache -fv (4)
$ fc-list | grep -i fontworks (5)
/home/matoken/.local/share/fonts/fontworks/Stick-Regular.ttf: ステッキ,Stick:style=Regular
/home/matoken/.local/share/fonts/fontworks/DotGothic16-Regular.ttf: ドットゴシック16,DotGothic16:style=Regular
/home/matoken/.local/share/fonts/fontworks/TrainOne-Regular.ttf: トレイン One,Train One:style=Regular
/home/matoken/.local/share/fonts/fontworks/RampartOne-Regular.ttf: ランパート One,Rampart One:style=Regular
/home/matoken/.local/share/fonts/fontworks/KleeOne-Regular.ttf: クレー One,Klee One:style=Regular
/home/matoken/.local/share/fonts/fontworks/KleeOne-SemiBold.ttf: クレー One,Klee One,Klee One SemiBold:style=SemiBold,Regular
/home/matoken/.local/share/fonts/fontworks/RocknRollOne-Regular.ttf: ロックンロール One,RocknRoll One:style=Regular
/home/matoken/.local/share/fonts/fontworks/ReggaeOne-Regular.ttf: レゲエ One,Reggae One:style=Regular
  1. 利用したいフォントをダウンロード(ここではすべて)
  2. フォント格納ディレクトリ作成
  3. ダウンロードしたフォントを移動
  4. フォントが使えるようにキャッシュファイルを更新
  5. フォントが登録されているか確認
Note
システムワイドの場合は /usr/share/fonts/ 以下にフォントを配置します.
$ sudo mkdir /usr/share/fonts/truetype/fontworks
$ sudo mv *.ttf /usr/share/fonts/truetype/fontworks

早速試してみます.LibreOffice Writerで表示したところです.普通に使えていそうです :)

fontworks

さて,ライセンス的には著作権表示をすれば商用,非商用問わず無料で利用できるようなのですが,記憶力に自信がないのでしばらくすると著作編表示を忘れて使ってしまいそうです.ということで一旦消しておきます…….

$ rm -r ~/.local/share/fonts/fontworks
$ fc-cache -fv
$ fc-list | grep -i fontworks
環境
$ dpkg-query -W fontconfig
fontconfig      2.13.1-4.2
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

追記 2021-02-07

Debian sid adm64にDebianパッケージとして提供されました.

apt installで簡単に導入できるようになりました :)

パッケージでの導入例
$ sudo apt update (1)
$ apt-cache search fontworks (2)
fonts-dotgothic16 - TrueType font based on the old 16x16 Gothic bitmap
fonts-klee - script font handwritten by pencil or pen
fonts-rampart - unique outline shadow font made in the image of 3-D blocks
fonts-reggae - display font often used in Japanese boys' magazines and digital content
fonts-rocknroll - pop-style font
fonts-stick - font designed with straight lines, wide versatility for use
fonts-train - gothic-style typeface made with an outer and inner line
$ sudo apt install fonts-dotgothic16 fonts-klee fonts-rampart fonts-reggae fonts-rocknroll fonts-stick fonts-train (3)
$ dpkg-query -W fonts-dotgothic16 fonts-klee fonts-rampart fonts-reggae fonts-rocknroll fonts-stick fonts-train  (4)
fonts-dotgothic16       1.000-20210120-2
fonts-klee      1.000-20210121-2
fonts-rampart   1.000-20210120-2
fonts-reggae    1.000-20210120-2
fonts-rocknroll 1.000-20210120-2
fonts-stick     1.000-20210120-2
fonts-train     1.000-20210120-2
$ fc-list | grep -i fontworks (5)
/home/matoken/.local/share/fonts/fontworks/Stick-Regular.ttf: ステッキ,Stick:style=Regular
/home/matoken/.local/share/fonts/fontworks/DotGothic16-Regular.ttf: ドットゴシック16,DotGothic16:style=Regular
/home/matoken/.local/share/fonts/fontworks/TrainOne-Regular.ttf: トレイン One,Train One:style=Regular
/home/matoken/.local/share/fonts/fontworks/RampartOne-Regular.ttf: ランパート One,Rampart One:style=Regular
/home/matoken/.local/share/fonts/fontworks/KleeOne-Regular.ttf: クレー One,Klee One:style=Regular
/home/matoken/.local/share/fonts/fontworks/KleeOne-SemiBold.ttf: クレー One,Klee One,Klee One SemiBold:style=SemiBold,Regular
/home/matoken/.local/share/fonts/fontworks/RocknRollOne-Regular.ttf: ロックンロール One,RocknRoll One:style=Regular
/home/matoken/.local/share/fonts/fontworks/ReggaeOne-Regular.ttf: レゲエ One,Reggae One:style=Regular
  1. パッケージ情報の更新
  2. フォントの検索
  3. フォントパッケージの導入
  4. フォントパッケージの確認
  5. フォントの確認

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

Nextcloudが Internal Server Error を返すようになって困った

NextcloudのWeb版にアクセスすると Internal Server Error が帰ってくるようになっていました.

20210119 00:01:55 1076844

Internal Server Error

The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the server log.

別のユーザで試すとログイン画面は表示されて認証機能は動作します.しかしログイン後同じように Internal Server Error このときAndroid版アプリでは普通に利用できていそうです.

よくあるのがサポート対象外になったレガシーなアプリを導入すると同じような状態になることがあります.
しかし,前回利用できていたときと現在の間に特にディストリビューション, Nextcloud, Nextcloudアプリ共にアップデートはしていないはずです.

ログを確認するとhttpdのaccess/errorのlogは特に問題なさそう.
nextcloud.logでそれらしいのは file_put_contents failed でしょうか?

logはNextcloudの設定ファイルの config.php で確認できる.
$ grep log config/config.php
  'log_type' => 'file',
  'logfile' => '/var/log/nextcloud.log',
  'loglevel' => 0,
$ tail -f /var/log/nextcloud.log | jq .
errorっぽいところ?
{
  "reqId": "DVQsgBekfOCY3dvjYO6w",
  "level": 3,
  "time": "2021-01-18T14:59:53+00:00",
  "remoteAddr": "180.131.110.140",
  "user": "matoken",
  "app": "core",
  "method": "GET",
  "url": "/index.php/apps/files/",
  "message": {
    "Exception": "OCP\\Files\\GenericFileException",
    "Message": "file_put_contents failed",
    "Code": 0,
    "Trace": [
      {

まずは手動でファイルとデータベースのバックアップを取っておきます.

バックアップ例
$ sudo -u www-data php /var/www/files.matoken.org/occ maintenance:mode --on (1)
$ sudo -u www-data tar cvf - ${NEXTCLOUD_PATH} | xz > ${BACKUP_PATH}/nextcloud-`date +%F_%T`.tar.xz (2)
$ sudo -u www-data tar cvf - ${NEXTCLOUD_DATA_PATH} | xz > ${BACKUP_PATH}/nextcloud-data-`date +%F_%T`.tar.xz (3)
$ mysqldump --opt --all-databases --events | xz > ${BACKUP_PATH}/nextcloud-`date +%F_%T`.sql.xz (4)
$ sudo -u www-data php /var/www/files.matoken.org/occ maintenance:mode --off (5)
1 メンテナンスモードにする
2 Nextcloud自体のバックアップ
3 Nextcloudデータのバックアップ
4 データベースのバックアップ
5 メンテンスモードを終了

occmaintenance:repair コマンドを試します.

$ sudo -u www-data php ${NEXTCLOUD_PATH}/occ maintenance:repair
 - Repair MySQL collation
     - All tables already have the correct collation -> nothing to do
 - Repair mime types
  : 以下略

コマンド終了後webを再読込するとエラーは解消されました. :)

しかしファイルの一覧が表示されません.最新ファイルは表示されるのでそのファイルを確認すると表示されます.

次に occ files:scan を試してみました.

$ sudo -u www-data php ${NEXTCLOUD_PATH}/occ files:scan --all
Starting scan for user 1 out of 7 (user1)
  : ※省略
+---------+-------+--------------+
| Folders | Files | Elapsed time |
+---------+-------+--------------+
| 20752   | 34164 | 00:04:33     |
+---------+-------+--------------+

これでは変わらなかったようです.多分必要なかった.

次に occ files:scan-app-data を試します.

$ sudo -u www-data php ${NEXTCLOUD_PATH}/occ files:scan-app-data
Scanning AppData for files

+---------+-------+--------------+
| Folders | Files | Elapsed time |
+---------+-------+--------------+
| 84      | 97    | 00:00:01     |
+---------+-------+--------------+

これが当たりだったようで復活しました!

ログを見るとこの問題が発生している間も他のNextcloudアプリは動作していたようだし,Androidアプリ版ではファイルの自動アップロードも動いていたようなので恐らくNextcloud Web版の部分が壊れていたのではないかと思います.

しかし治ったのはいいけどなぜこれが起こったかが謎なのが気持ち悪いです…….

環境
$ sudo -u www-data php /var/www/files.matoken.org/occ -V
Nextcloud 20.0.5
$ dpkg-query -W php mariadb-server
mariadb-server  1:10.3.27-0+deb10u1
php     2:7.3+69
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ uname -m
x86_64