Tag: Linux

MIDI controllerでLinux desktopのモニター入力と明るさを操作する

目的

KORG nanoKONTROL2 のような USB MIDI controller を、Linux desktop の物理操作盤として使いたいのでGolangで作った。

midi-switch

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 -laseqdump の結果をそのまま調査ログとして使える
  • MIDI button、knob、slider の note / controller 番号を目視で確定しやすい
  • ALSA sequencer port が見えていれば Go や shell からすぐ扱える
  • 仕様が固まってから gomidi / RtMidi などへ移行できる

ddcutil 側も、まずは ddcutil detectgetvcpsetvcp を外部 command として呼ぶ。 daemon 内で DDC/CI protocol を直接実装しないことで、モニター差分の切り分けを ddcutil に寄せられる。

Read more...