先日業務マシンを変えた。VAIO SX14-Rである。もともとプライベートで持っていたのだが、かなり出来が良かったので業務PCとしても採用したのだ。
で、一つ問題があった。キーボードバックライトが点灯しないのだ。
バックライトを点灯させる旅
もともとLinuxにはvaio-laptopというデバイスドライバがあるのだが、これがちょっと古いのか、最新モデルであるSX14-Rには対応していないようで、うまくバックライトを認識しなかった。
とはいえ薄暗い場所などでは困ってしまうので、なんとかならないか、という点をOpusに尋ねたところ、色々な方法でリバースエンジニアリングを開始した。
/sys/class/leds/vaio::kbd_backlight/brightnessに何かないか- ACPIテーブル(DSDT)の情報はないか
- Embedded Controller経由の情報はないか
すると、OpusはDSDTに KBBL という4ビットのフィールドがあることを発見した。
sudo cat /sys/firmware/acpi/tables/DSDT > /tmp/dsdt.dat sudo zypper install acpica iasl -d /tmp/dsdt.dat grep -i -E "kbd|backlight|KBBL|keyboard.*light" /tmp/dsdt.dsl KBBL, 4, PKBD, 8,
Opusによれば、これはKeyBoard BackLight、すなわちキーボードバックライト用のフラグだという。
するとOpusはこのオフセットを計算しはじめた。
grep -n -B 10 -A 5 "KBBL" /tmp/dsdt.dsl 41251- LCKV, 8, 41252- RCKV, 8, 41253- SFLV, 8, 41254- GBCC, 8, 41255- Offset (0xE8), 41256- SLMD, 8, 41257- , 1, 41258- F101, 1, 41259- Offset (0xEB), 41260- BTP1, 8, 41261: KBBL, 4, 41262- , 3, 41263- KEXE, 1, 41264- WLID, 2, 41265- WLD3, 1, 41266- RTS4, 1,
Opusは KBBL がEC(Embedded Controller)のレジスタ オフセット 0xEC の下位4ビット にあることを突き止めた。ここまでで既にすごい。
試しにここに値を入れてみろ、と急かすので、実際に値を入れてみると(値のセットの仕方まで教えてくれた):
sudo modprobe ec_sys write_support=1 printf '\x01' | sudo dd of=/sys/kernel/debug/ec/ec0/io bs=1 seek=$((0xEC)) count=1 conv=notrunc 2>/dev/null
するとあっさりバックライトが光ったではないか。偉すぎる。
デバイスドライバ作成編
ここで良い気になった自分は、Opusに無茶振りすることにした。Linux用のデバイスドライバを作れ。
するとご丁寧にC言語を書き始め、DKMSに対応したドライバが上がってきた。ビルドしてインストールすると、あっさり動いている。
メインのCファイル、DKMS用の定義ファイル、Makefileが吐き出された。
普通に有用だったので、リポジトリとして公開しておく。
VAIO SX14-Rを使っている人で、Linuxをインストールしている人がいたら、ぜひ試してみてほしい。
感想
Opus賢すぎである。相当深い知識でもって自分を助けてくれた、というかほぼやってもらったようなものである。自分は単に作業者としてClaudeが指示するコードを実装するだけだ。
ありがたいことに、自分もデバイスドライバまわりの知識が深まった。ACPIこう読んだらいいのか〜とか、こういう感じでDKMSは動くのか〜、とか。
まったく糸口がないような状態でも、LLMはなんとか脱出路を探そうとしてくれる。 高級なLLMになるほど、その確度が上がっていく。高級なLLMは困難なタスクでこそ活きるなあ、と思った。