有馬総一郎のブログ

(彼氏の事情)

2021年09月04日 00:13:40 JST - 5 minute read - Linux

折角なのでalterlinux-i3-manager(Polybar)をいじって時刻表示から日時表示に、そしてfcitxのキーボード言語(InputMethod)を表示させる

alterlinux-i3-manager を起動すると以下のように、ある程度のカスタマイズはできるようにはなっているが、これだけだと若干不便である。

alterlinux-i3-manager
alterlinux-i3-manager

Polybar

以前rofiからターミナル経由のアプリが起動できない、とぼやいたとき、助けてくれたわたすけさんが作成したのが、この FascodeNet/alterlinux-i3-manager: A i3wm setting manager for Alter Linuxというもの。

You shouldn’t edit “~/.config/alterlinux-i3-manager”

とあるが、やるなといわれれば、やりたくなるのがダチョウ倶楽部でなくとも人間というもの。調べると2つのファイルが見つかった。

$ ls ~/.config/alterlinux-i3-manager
modules.conf polybar.conf

どちらも番号しか書いてなく、恐らく alterlinux-i3-manager の設定内容を保存しているだけのように見えるがpolybarという単語でググると Polybar - ArchWikiなるページを発見。

alterlinux-i3-manager のGitHubのページでも以下のようにある。

change polybar theme (color theme: dark or light, bar position: top or bottom, and more)
hide some modules

alterlinux-i3-manager はPolybarで動いてることを知る。

時刻表示を変更

$HOME/.config/polybar/launch.shから~/.config/polybar/config.iniを呼び出していることが分かる。

Configuration · polybar/polybar Wiki · GitHubなどチラ見して

$HOME/.config/polybar/config.ini

#modules-center = left-begin clock right-end
modules-center = left-begin date clock right-end

[module/date]
type = internal/date
date = %Y-%m-%d%

としてみる。するとこうなった↓

alterlinux-i3-manager

ただ、色が微妙に異なるが嫌だったので、先程の変更は取消して、以下のファイルだけ編集してモジュール時計の表示だけを変更した。

$HOME/.config/polybar/modules.ini

; clock
[module/clock]
inherit = module/base
type              = internal/date
padding           = 3
#time              = "  %I:%M %p  "
time              = " %Y-%m-%d(%a) %I:%M %p  "
time-alt          = " %Y-%m-%d "

これでクリックしなくても常時、年月日そして曜日が表示されるようになった。

alterlinux-i3-manager

詳しい仕様は以下を参照。

キーボード言語(InputMethod)を表示

正直、言うと英語キーボードかSKKだけでなくSKKの場合はモードまで表示させたかった。しかし、そこまでは叶わなかったことを白状したい。

ともあれググる。

polybar-fcitx5-script なるスクリプトがあることを知り、設定してみる。

$HOME/.config/polybar/config.ini

[module/fcitx]
type = custom/script
exec = ~/.config/polybar/polybar-fcitx5-script.sh
tail = true
interval = 0
format-prefix = "KBD"

を追記。

しかし、英語→SKK→英語と切り替えても、どうもキーボード言語の表示が変更されない。

alterlinux-i3-manager

polybar-fcitx5-script.shを調べると、そこまで複雑でなかったので、一つ一つ確認していく。

どうやら、$(cat /tmp/fcitx5-imlist | grep "^$(dbus-send --session --print-reply --dest=org.fcitx.Fcitx5 /controller org.fcitx.Fcitx.Controller1.CurrentInputMethod | grep -Po '(?<=")[^"]+')," | cut -d',' -f5)なことでキーボード言語(InputMethod)を取得している。

現在のキーボードのIuputMethodを取得するのが、このコマンド

$ dbus-send --session --print-reply --dest=org.fcitx.Fcitx5 /controller org.fcitx.Fcitx.Controller1.CurrentInputMethod 
method return time=1630653056.113559 sender=:1.15 -> destination=:1.335 serial=15621 reply_serial=2
   string "keyboard-us"

キーボードの言語一覧みたいなのを格納しているのが、このファイル

/tmp/fcitx5-imlist

・・・前略・・・
keyboard-bt,キーボード,,input-keyboard,dz,dz,true
keyboard-us-colemak,キーボード,,input-keyboard,us,en,true
skk,Skk,,fcitx-skk,SKK,ja,true
keyboard-us-carpalx,キーボード,,input-keyboard,us,en,true
keyboard-th,キーボード,,input-keyboard,th,th,true
・・・後略・・・

CapsLockのオンオフの判定をしているのがこの箇所。xset -q | grep Caps | grep -q on && { 省略 }

xsetを使うとCapsLock、NumLock、Kanaといったキーの状態が分かるらしく、このスクリプトではenENと切り替えることでCaps Lockの状態も表示している。

xsetコマンドの使い方: UNIX/Linuxの部屋

$ xset -q
Keyboard Control:
  auto repeat:  on    key click percent:  0    LED mask:  00000001
  XKB indicators:
    00: Caps Lock:   on     01: Num Lock:    off    02: Scroll Lock: off
    03: Compose:     off    04: Kana:        off    05: Sleep:       off
    06: Suspend:     off    07: Mute:        off    08: Misc:        off
    09: Mail:        off    10: Charging:    off    11: Shift Lock:  off
    12: Group 2:     off    13: Mouse Keys:  off
  auto repeat delay:  660    repeat rate:  25
  auto repeating keys:  00ffffffdffffbbf
                        fadfffefffedffff
                        9fffffffffffffff
                        fff7ffffffffffff
  bell percent:  50    bell pitch:  400    bell duration:  100
Pointer Control:
  acceleration:  2/1    threshold:  4
Screen Saver:
  prefer blanking:  yes    allow exposures:  yes
  timeout:  600    cycle:  600
Colors:
  default colormap:  0x22    BlackPixel:  0x0    WhitePixel:  0xffffff
Font Path:
  built-ins
DPMS (Energy Star):
  Standby: 600    Suspend: 600    Off: 600
  DPMS is Enabled
  Monitor is On

grepの-qオプションでターミナル(標準出力)への出力をしないようにする | ITを使っていこう

ほう、grep-qにそんな意味があったとは…とはいえ、ここは表示が切り替えされない部分とは関係なかった。

しかし、どうもキーボード言語表示の切り替えがCapsLockを押したときはされることが分かる。

辿りついたのが、スクリプトのここだ。dbus-monitor --session destination=org.freedesktop.IBus | grep --line-buffered '65505\|65509' | react

$ dbus-monitor --session destination=org.freedesktop.IBus
method call time=1630655647.128394 sender=:1.48 -> destination=org.freedesktop.IBus serial=5199 path=/org/freedesktop/IBus/InputContext_0; interface=org.freedesktop.IBus.InputContext; member=ProcessKeyEvent
   uint32 65509
   uint32 58
   uint32 0
method call time=1630655682.734785 sender=:1.48 -> destination=org.freedesktop.IBus serial=5231 path=/org/freedesktop/IBus/InputContext_0; interface=org.freedesktop.IBus.InputContext; member=ProcessKeyEvent
   uint32 65507
   uint32 29
   uint32 1073741828
method call time=1630655683.735440 sender=:1.48 -> destination=org.freedesktop.IBus serial=5232 path=/org/freedesktop/IBus/InputContext_0; interface=org.freedesktop.IBus.InputContext; member=ProcessKeyEvent
   uint32 32
   uint32 57
   uint32 0

キーコードの一覧はこちら↓
PS2 keyboard (helpOnPS2keyCodes.html)

押されたキーコードを取得していて、CapsLockか左Shiftが押されたときだけ、表示の切り替えを行っていた。同時押しとかは判別できなそうなので、左Ctrlと右Ctrlを追加した。

$HOME/.config/polybar/polybar-fcitx5-script.sh

# Need --line-buffered to avoid messages being hold in buffer
#dbus-monitor --session destination=org.freedesktop.IBus | grep --line-buffered '65505\|65509' | react
dbus-monitor --session destination=org.freedesktop.IBus | grep --line-buffered '65505\|65509\|65507\|65508' | react

これでとりあえず、今のキーボード言語(InputMethod)がどんな状態か、分かるようになった。ただ、SKKの場合、大文字で表示されるのでCapsLockのオンオフが分からないが…まあ、そこは良しとしよう。

org.fcitx.Fcitx.Controller1.CurrentInputMethod以外のメソッドどんなものがあるかを見てみた。

dbus monitorで呼び出せないような…うーん分からん。

キーボード言語が英語かSKKか分かるようになっただけでも、大分マシになった。

接頭辞の KBD は邪魔なのでformat-prefix = "KBD"はコメントアウトしてenからSKKと表示されるようにした。

alterlinux-i3-manager
alterlinux-i3-manager