MIDI controllerでLinux desktopのモニター入力と明るさを操作する
Posted: | Tags: ddcutil, desktop, interface, linux, midi
目的
KORG nanoKONTROL2 のような USB MIDI controller を、Linux desktop の物理操作盤として使いたいのでGolangで作った。
MIDI event を ALSA sequencer で読み、ddcutil でディスプレイの入力ソース、明るさ、コントラストを操作し、必要なら pactl で音量も操作する。
構成は単純にする。
USB MIDI controller
-> ALSA sequencer event
-> small daemon
-> ddcutil / pactl
-> display input / brightness / contrast / volume
できた感想
リモートワークで窓際で作業してるのですが時間帯や天気によってディスプレーの明るさやコントラストを変えたくなるのですが MIDIのスライドバーとかボリュームボタンで変えられて嬉しいです あとラズパイの検証時、ディスプレー入力をちょいちょい変えたくなるので便利になった(稀に起動初期の画面がみたい事がある)
方針
初期実装では MIDI library へ直接つながず、aseqdump の stdout を読む方式で十分に価値がある。
理由:
aconnect -lとaseqdumpの結果をそのまま調査ログとして使える- MIDI button、knob、slider の note / controller 番号を目視で確定しやすい
- ALSA sequencer port が見えていれば Go や shell からすぐ扱える
- 仕様が固まってから gomidi / RtMidi などへ移行できる
ddcutil 側も、まずは ddcutil detect、getvcp、setvcp を外部 command として呼ぶ。
daemon 内で DDC/CI protocol を直接実装しないことで、モニター差分の切り分けを ddcutil に寄せられる。