2020-03-26 (Th)
_ Terminator が起動しない理由
Wayfire + Waybar を使ってて、Waybar 上のボタンをクリックして 端末の Terminator を起動するように設定してある。
が、Waybar 起動後、最初にボタンをクリックした時は問題ないのに、 2回目以降は Terminator が起動しない。
標準エラー出力に何か出てるかな、と思ってファイルにリダイレクトしてみたら、 以下の例外が発生していた。
Traceback (most recent call last):
File "/usr/bin/terminator", line 114, in <module>
TERMINATOR = Terminator()
File "/usr/lib/python2.7/site-packages/terminatorlib/terminator.py", line 72, in __init__
self.prepare_attributes()
File "/usr/lib/python2.7/site-packages/terminatorlib/terminator.py", line 97, in prepare_attributes
self.pid_cwd = get_pid_cwd()
File "/usr/lib/python2.7/site-packages/terminatorlib/cwd.py", line 42, in get_pid_cwd
system = platform.system()
File "/usr/lib/python2.7/platform.py", line 1303, in system
return uname()[0]
File "/usr/lib/python2.7/platform.py", line 1270, in uname
processor = _syscmd_uname('-p','')
File "/usr/lib/python2.7/platform.py", line 1005, in _syscmd_uname
rc = f.close()
IOError: [Errno 10] 子プロセスがありません
uname -p を実行してる……?
なんか知らんが、Terminator は platform.system() を使って環境がどんなシステム
なのかを取得している。そして platform.system() は uname -p を実行して、
パイプ経由で uname の出力を取得しているらしい。
が、f.close() が waitpid() してそこで子プロセスがなくて例外が発生する、と。
なんで子プロセスがないのだろう? 他のプロセスが waitpid() してるのだろうか…
と、ここしばらく探していた。
python2.7 の platform.system() に何か問題でもある? と思ってぐぐって見つけた。
SIGCHLD を SIG_IGN にしてるとそういうことが起きるらしい。
なるほど!!!! そりゃそうだ。忘れてた。
Waybar は最初に子プロセスを作った後、SIGCHLD を SIG_IGN に設定している。 これが原因か。exec する前に SIG_DFL に戻せば治る。
治った!!
1ヶ月程前に書いた Waybar の issue にコメント付けとこ。
2022-03-26 (Sa)
_ SIM 届いた
SIM を挿す。けど、細長い棒を持ってなかった。縫い針で代用。 尖った方を挿して力入れると折れて飛んでいって危なそうだったので、 反対側を挿した。が、側面を持って力入れても指が滑る。 尖ったところ押さえても怪我するだけで無意味だし… 悩んだ結果、ラジペンで針を挟むことに。 おぉ、取り出せた。あとは大丈夫。
プロファイルの設定方法がよくわからんなぁ、と思ったんだけど、 Firefox じゃだめなのね。Safari でやったらインストールできた。 そして「VPN とデバイス管理」に構成プロファイルが現れて、設定できた。
いや、そんなの用意しなくても、普通に入力させてくれたらいいんだけどな。
電話の発信と受信を確認。
2023-03-26 (Su)
_ 原神 - 険路怪跡
をプレイした。いや〜長かった… まぁ魔神任務ならこんなものか。
で、得た原石とガイドの魔神任務報酬でガチャを9回。
★4!と思ったらスクロースだった… それはもう完凸済み… あとはろくなものはなかった。
もらったスターライトを使って虹石に交換して、 もう1回。★3だった。
ディルック後60回。 だいぶん天井が近くなってきたけど、 ここからが難しいなぁ。
そういえば、来週、紀行が MAX になるかしら。 原石680個だな。ガチャ4回分。
あ、樹脂あと少し消費しておこう。
そういえば、今日じゃないんだけど、デイリーのツァレーヴィチ、 倒す順番なんてどうでもいいだろ… 報酬 1,000 モラって… (-.-#
2026-03-26 (Th)
_ Limine フォント作成
フォント文字の最大サイズは 32x64 らしいので、 これ以上大きな文字は使えない。
Noto Sans Mono CJK JP を Limine 用 bin に変換してみた。
import sys
from PIL import Image, ImageFont, ImageDraw
def convert_ttc_to_limine(ttc_path, out_path, font_index, width, height):
try:
# indexを指定して特定のフォント(JP)を読み込む
# サイズ(height)はピクセル単位で指定
font = ImageFont.truetype(ttc_path, height, index=font_index)
print(f"Using font: {font.getname()}") # 読み込んだフォント名を表示して確認
except IOError:
print("Font file not found or index out of range.")
return
with open(out_path, 'wb') as f:
# Limineの基本フォントは通常ASCII範囲(0-127)か256文字
for i in range(256):
# 1bit(モノクロ)モードでキャンバス作成
img = Image.new('1', (width, height), 0)
draw = ImageDraw.Draw(img)
# 文字を描画(中央寄せなどの調整が必要な場合はここで行う)
# Noto Sans Monoなので基本的にはそのまま描画でOK
draw.text((0, 0), chr(i), font=font, fill=1)
# Limineのビットマップ形式(行ごとのバイトデータ)として書き込み
f.write(img.tobytes())
if __name__ == "__main__":
TTC_PATH = "/usr/share/fonts/noto-cjk/NotoSansCJK-Regular.ttc"
OUT_PATH = "noto_mono_jp.bin"
# index=2 が JP であることが多いですが、実行後の表示で確認してください
convert_ttc_to_limine(TTC_PATH, OUT_PATH, font_index=2, width=32, height=64)
print(f"Successfully generated {OUT_PATH}")
実行すると noto_mono_jp.bin ができる。
/efi/ に置いて、limine.conf に以下を追加。
term_font: boot():/noto_mono_jp.bin
term_font_size: 32x64
reboot。
まぁまぁ綺麗だな。