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%
としてみる。するとこうなった↓
ただ、色が微妙に異なるが嫌だったので、先程の変更は取消して、以下のファイルだけ編集してモジュール時計の表示だけを変更した。
$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 "
これでクリックしなくても常時、年月日そして曜日が表示されるようになった。
詳しい仕様は以下を参照。
キーボード言語(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→英語と切り替えても、どうもキーボード言語の表示が変更されない。
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といったキーの状態が分かるらしく、このスクリプトではen
→EN
と切り替えることでCaps Lockの状態も表示している。
$ 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
以外のメソッドどんなものがあるかを見てみた。
- fcitx5/dbusmodule.cpp at master · fcitx/fcitx5 · GitHub
- fcitx5-skk/skk.cpp at master · fcitx/fcitx5-skk · GitHub
dbus monitor
で呼び出せないような…うーん分からん。
キーボード言語が英語かSKKか分かるようになっただけでも、大分マシになった。
接頭辞の KBD は邪魔なのでformat-prefix = "KBD"
はコメントアウトしてen
からSKK
と表示されるようにした。