Google Chrome/Chromium/Braveの履歴のタイムスタンプ形式を調べて1日分の履歴を手に入れる

たまに以前ウェブで見た情報が欲しくなることがあります.履歴に残っていればいいけど消えてしまっているかも.ウェブブラウザのアクセス履歴のタイトルとURLだけでもテキストファイルに残しておくと便利かもしれません.

履歴はHistoryファイルをsqlite3で叩くと取れるのですが,タイムスタンプがよくあるUNIX timeでもなくとても大きな値です.

$ sqlite3 ~/.config/chromium/Default/History "SELECT \"[\" || group_concat(json_object('timestamp', last_visit_time, title, url)) || \"]\" FROM urls;" | jq . | grep timestamp | sort
 -n | tail -1
    "timestamp": 13256542361632384,
UNIX timeの例
$ date +%s
1612703645

検索するとこのようなページを見つけました.

This timestamp format is used in web browsers such as Apple Safari (WebKit), Google Chrome and Opera (Chromium/Blink). It’s a 64-bit value for microseconds since Jan 1, 1601 00:00 UTC. One microsecond is one-millionth of a second.

このTimestampはUTC 1601-01-01からのマイクロセカンド秒らしいです.試してみます.

まずはUNIX timeの1601-01-01からの秒数に10^6を掛けてUNIX timeとの差を求めます.(GNU coreutilsのdateって1970-01-01より前の時間も計算できるんだ!)

UTC 1601-01-01のUNIX time?に10^6
$ echo "$( date --utc --date 1601-01-01 +%s ) * 10^6" | bc
-11644473600000000

Chrome時間とUNIX timeの差を引いてUNIX timeに変換します.

$ echo "( 13256542361632384 -11644473600000000 ) / 1000000" | bc
1612068761

UNIX timeを人間が読めるように変換

$ date --date="@1612068761"
Sun 31 Jan 2021 01:52:41 PM JST

1行にまとめる

$ date --date="@`echo "(13256542361632384/10^6-11644473600)"|bc`"
Sun 31 Jan 2021 01:52:41 PM JST

逆に今の時間をChromeのtimestampに変換

$ echo "(`date +%s`+11644473600)*10^6" | bc
13257218080000000

1日前のChrome時間

$ echo "(`date -d '1day ago' +%s`+11644473600)*10^6" | bc
13257336413000000

chrometime

ということで1日分Chrome/ChromiumのHistoryはこんな感じで取得できそうです.

$ sqlite3 /tmp/History "SELECT \"[\" || group_concat(json_object('timestamp', last_visit_time, title, url)) || \"]\" FROM urls WHERE last_visit_time >= $(((`date -d '1 day ago' +%s` +11644473600)*1000000));"
Note
該当プロファイルを利用中の場合このようなエラーになります.
Error: database is locked
ブラウザを終了するか,Historyファイルを適当な場所にコピーしてそちらを使います.
$ cp /home/matoken/.config/google-chrome/Default/History /tmp/

History ファイルは既定値ではこの辺にあります.

Chromium
~/.config/chromium/Default/History
Google Chrome
~/.config/google-chrome/Default/History
Brave Brouser
/.config/BraveSoftware/Brave-Browser/Default/History

既定値以外の場合はこんな感じで検索? ~/.config 以外にもできるけどその場合はパスがわかっていると思います.

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

Operaは買収されてから使っていないのですが,古いプロファイルを見るとこの辺のようです.現在は変わっている可能性があります.

Opera
~/.config/opera/History

Safariは環境がないので未確認ですがArchiveBoxのscriptを見ると既定値は恐らくこのあたりです.

Safari
~/Library/Safari/History.db
環境
$ dpkg-query -W bc google-chrome-stable chromium brave-browser coreutils sqlite3
bc      1.07.1-2+b2
brave-browser   1.19.92
chromium        88.0.4324.146-1
coreutils       8.32-4+b1
google-chrome-stable    88.0.4324.150-1
sqlite3 3.34.1-1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

The Great SuspenderでサスペンドしていたURLをjsonで出力する

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

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. フォントの確認