Interfaces

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...

Wayland desktopでキーバインドをOS横断に寄せる設計メモ

Wayland desktopでキーバインドをOS横断に寄せる設計メモ

目的

macOS、Windows、Linux で、アプリ起動、ウィンドウ移動、タイル配置、仮想デスクトップ移動の操作感を近づけたい。 ただし Linux Wayland では、X11 時代のように外部プロセスから任意ウィンドウを横断操作する前提にしていない。

Wayland では compositor が入力とウィンドウ管理の権限境界になる。 このため、キーボードの低レイヤ変換とウィンドウ操作を分ける。

一旦考えた基本方針

  • CapsLock/Ctrl や layer 的なキー変換は keyd に寄せる
  • アプリ起動、ウィンドウ移動、最大化、タイル配置は compositor / window manager 側に寄せる
  • KDE Plasma Wayland では KWin global shortcut と .desktop entry を使う
  • labwc では ~/.config/labwc/rc.xml の native action を使う
  • package install、service enable、設定配置は Ansible などの構成管理に寄せる

keyd は「キーを別のキーとして見せる」層に留める。 アプリ起動やウィンドウ制御まで keyd でやろうとすると、Wayland の compositor 境界を迂回する設計になりやすい。

責務分離

領域Linuxでの担当理由
CapsLockをCtrlにするkeydsession / compositor 非依存にしたい
Hyper風の修飾キーkeyd または keyboard firmware入力層で完結させたい
アプリ起動.desktop entry / compositor shortcutdesktop environment の仕組みに乗せる
ウィンドウのhalf snapKWin / labwc native actionWayland では compositor が正規の管理者
物理ディスプレイ間移動KWin / labwc native actionmonitor layout を compositor が持つ
同一アプリ内のwindow cyclecompositor native action外部プロセスで window list を触らない

KDE Plasma Wayland

KDE Plasma Wayland では、KWin の global shortcut と .desktop entry を中心にする。

Read more...

Ubuntu Studio(KDE)の日本語入力設定メモ

現行方針

Ubuntu Studio(KDE)環境の日本語入力は、現状 fcitx ではなく ibus + ibus-mozc へ寄せる。

fish から起動するプロセスでは、~/ghq/github.com/tin-machine/fishConfig/config.fish 側で次の方針にする。

set -x XMODIFIERS "@im=ibus"
set -e QT_IM_MODULE
set -e GTK_IM_MODULE
set -e DefaultIMModule

2026-05-15 の確認では、プロセスは ibus-ui-gtk3ibus-daemon --xim --panel disableibus-x11ibus-portalibus-engine-mozcmozc_server が動いており、fcitx は常駐していない。

im-config のログ上も次の形になっている。

GTK_IM_MODULE='' QT_IM_MODULE='' CLUTTER_IM_MODULE='' SDL_IM_MODULE='' XMODIFIERS='@im=ibus'

このため、旧 fcitx 前提の起動直後不調は現行設定の通常確認対象から外す。ただし ibus-ui-gtk3 の warning / coredump はログに残ることがあるため、実際に日本語入力が効かない場合だけ再調査する。

旧事象の要約

  • Ubuntu Studio(KDE)環境で、ログイン直後は日本語入力ができない。
  • pkill fcitx && sleep 1 && fcitx & の再起動を2回行うと使えるようになる。
  • 一度使えるようになると、その後は安定して動作する。
  • この事象は fcitx 前提の古い状態として扱う。

旧 fcitx 状態で確認していた設定/ログ

設定

  • ~/.config/fcitx/config
    • 入力切替キー: CTRL_SPACEZENKAKUHANKAKU
  • ~/.config/fcitx/profile
    • 現在のIM: mozc
    • 有効なIM: fcitx-keyboard-usmozc

ログ

  • ~/.config/fcitx/log/crash.log
    • fcitx: BadWindow (invalid Window parameter) が記録されている。
  • ~/.xsession-errors
    • fcitx が autostart され、各アドオン設定がロードされているログを確認。
    • QXcbConnection: XCB error: 3 (BadWindow) が大量に記録されているが、fcitx由来かは断定できない。
  • ~/.local/share/sddm/xorg-session.log
    • fcitx に関する記録は見当たらなかった。
  • journalctl はこの環境でログが見つからない (No journal files were found.)。

ibusへ寄せる場合のfish設定

ibus を使う場合は、QT_IM_MODULEGTK_IM_MODULE を明示的に設定しない。 ibus 側のエラーで「QT_IM_MODULE と GTK_IM_MODULE の環境変数を未定義にしてください。そして ‘ibus-daemon –panel disable’ は ibus-ui-gtk3 コンポーネントの子プロセスとして起動されるべきです。」と出る場合、シェル設定やデスクトップセッションの環境に古いIM設定が残っていないか確認する。

Read more...

Meta Quest 3

Meta Quest 3を買ってみた

40代後半以降の方にはわかる老眼のつらさ・・ HMDの場合、老眼の影響を受けにくいらしい(メガネ屋さんのサイトで、他にも興味深いエントリがある)

自宅環境は複数ディスプレイで画面の広さ自体には問題がないのだけれど、 普段は仕事に使っていて、プライベートPCの画面は貧弱なので、その点は悩ましい問題だった。 という訳でプライベートの環境をMeta Quest 3でできないか検証を始めた。

ヨドバシで購入した 2023/10/28

店舗であった方が良い追加デバイスの相談してから購入しようと店舗で相談してたら目の前で売り切れていた。 出かける前は店舗在庫が17個ある事は確認していたのだが… 錦糸町店に在庫があるというので移動して購入。結構、売れてる模様

初期セットアップ

IPD(黒目の間の距離)の調整

Meta Quest 3(メタクエスト 3)着弾!メガネ屋的視点からのファーストインプレッション 瞳孔間距離は眼鏡購入時の紙にある。 手元に以前、J!NSでメガネを作ったレシートがあったので確認した。 眼鏡に関するご質問

■P.D 瞳孔間距離(黒目と黒目の間の距離)のこと。保証書には÷2した数字が記載される(例:PD65の場合、32.5/32.5) 私は32.5だったので、Meta Quest 3上では、65に設定した。

試してる事

ガーディアン設定(壁などに近づくと現れるバーチャルな境界)のオフは開発者モードにするとできる

【Oculus Quest2】ガーディアン設定をオフにするには? – 株式会社スペースリー

  • [クイック設定]->[境界線]を静止モードに
  • [設定]->[開発者]->[ガーディアン設定]をオフ

スクリーンショットを撮る

Take a screenshot with Meta Quest headsets | Meta Store 右手のメニューボタンを長押ししてから、右トリガーを押す

ヘッドセットは13歳から使用できる

Meta Quest Safety Center: VR Safety Guidelines | Meta | Meta Store

Meta Questヘッドセットの対象年齢は13歳以上です。

参考

Meta Quest 3にF-Droid経由でアプリを追加する

Meta Quest 3だけでsshできるようにしたい。 ディスプレーの代わりに使うで試しているimmersedも便利だが、別途PCを立ち上げるのが手間ではある。 私の作業はターミナルとブラウザが多いのでMeta Quest 3だけでスタンドアローンで使えないか検証中。

構成

Mobile VR Station経由でアプリを追加してみる

  1. F-Droidのダウンロード

  2. Questのストアで「mobile vr station」で検索、インストール

  3. Questのストアで「Mobile VR Station」を検索してインストールする

参考

Read more...

Meta Quest 3上に作業環境を構築する

Meta Quest 3上に作業環境を構築する

現状は4つのリアルなマルチディスプレー環境で作業領域自体はある程度確保できている。 ただHMDであれば、より大きな視野で作業できるし、老眼の影響を受けにくいらしい。 あと事故で寝たきりになってもPCを使い続ける事ができるので、少し備えておきたい。

椅子で天井を見上げたようなリラックスした状態で作業したい。 いくつかの候補があり、向き不向きがありそう。

  • Immersed
    • Win, macOS, Linuxのエージェントが存在する
    • Linuxエージェントも動作した
    • MRモードも存在し、周囲の映像の上にデスクトップのオーバーレイ表示が可能
  • Virtual Desktop
    • Metaのサイト
    • デスクトップが1つしか使えない点を考えるとゲーム向けかもしれない
      • サイトにもゲームでの実績のページがある
    • 「このアプリに没入したい」という場合に向いていそう

現在の環境

  • Immersed

  • Ubuntu な環境で問題なく使えている。

  • 良かった点

    • 表示が凄く綺麗。物理のディスプレイより文字が読みやすい
    • 手軽にディスプレイの大きさを変えられるのが便利
    • キーボードは慣れたものをそのまま使うので差異は無い
  • 悪かった点

    • MRの部分の表示はそれほど良くない
      • カメラ性能が向上する事に期待したい
    • 重い(HMD初体験の感想)

すごい事に特に不具合なくLinuxデスクトップが使えている。 Linuxデスクトップにありがちな「導入するまでの苦労」みたいなものが無い(すでに3世代目だから、というのが大きい) 強いていうとLinuxの母艦側のディスプレーも電気が入っている(ミラーリングのように機能する) 物理ディスプレーの電気代が無駄なようにも思う。 自動ログインとダミーHDMIプラグを併用してHDMIディスプレイ無しで運用できると嬉しい、というのはある。

ImmersedをUbuntuで使う

Ubuntu Studio(KDE plasma)環境で使った。

  1. Immersed のサイト下部にある Linux 向けバイナリをダウンロード
  2. ダウンロードしたファイルは実行可能なバイナリなので、実行属性をつける
  3. ./Immersed-x86_64.AppImage を実行、ログイン
  4. Meta Quest 3のコントローラを持ち、手首を見るように傾けるとメニューが現れる。
  5. 手首を向けていない側のコントローラーでメニューを選択
  6. Mixed Reality を選択
  7. Settingで Lower Latency Mode を選択
  8. 複数デスクトップの位置を調整

Immersedの各種設定

https://immersed.com/account

ガーディアン設定(壁などに近づくと現れるバーチャルな境界)のオフは開発者モードにするとできる

私のPC環境が部屋の壁に非常に近い所にあってQuestのガーディアン設定がずっと出てしまう。 私は座って使うので危険性はあまりないのでオフにする。 だいたい20分程度で設定できた。

【Oculus Quest2】ガーディアン設定をオフにするには? – 株式会社スペースリー

Read more...

自作キーボード

Happy Hacking Keyboard (HHKB) を2台使って仕事をしていたのですが、自宅の机が狭いので自作キーボード Corne Cherry V3を導入。 42キーしかないので、101キー比較で40%程度。

キー数が少なくなるので組み合わせて入力することになるのですが意外となんとかなるものだった。 指の移動量がかなり減った。 HHKBの時はAutoHotKeyやHammerspoonでキーカスタマイズしていたが不要になった。 ただHHKのシリンドリカルステップスカルプチャ構造の再現はできておらず、この点は改善点。

キーボードレイアウト変更

  1. ChromeでREMAPにアクセス(2023/08時点、Firefoxは不可。Chromeの実装している機能に依存しているので)
  2. 下のボタンから上にドラッグアンドドロップ
  3. flush
  4. キーボードレイアウトをプリントアウト

私のレイアウト

QMKのバージョンが古い場合のアクセスするURL

ページ下部にリンクがあるが https://qmk018.remap-keys.app/ からキーリマップできる

Corne Cherry V3

下記の記事を参考に作成した。 作成には8時間程度かかったと思う。

Corne Cherry V3

Corne Cherry V3 を作ってみた | Blogicoffee

Corne Cherry v3ビルドログ【自作キーボード】|scop00

分割キーボードのCorne Cherry v3を組み立て、その使用感。 | no theme.

[自分史上ベスト3に入るキーボード] Corne Cherry v3を作った - プログラマのはしくれダイアリー

crkbd/corne-cherry/doc/v3/buildguide_jp.md at 381b68f7eb114318631a9a6c19645f3478516fb8 · foostan/crkbd

欲しいキーボード

Keyball39 – Shirogane Lab

【委託】Keyball39

Keyball39を使いこなすために必要なセッティング │ wonwon eater

Read more...

自分用キーボードショットカット

できればmacOS, Linux, Windowsでショートカットを揃えたい。 昨今のキーボードはWindowsキー(macだとcommand)はある、という前提で良い気がする。

WindowsはAutoHotKey、macOSはHammerspoon、LinuxはAutoKeyで行う。

Window操作

Windows(command)キーと組み合わせ

| + ctrl    | + shift          |

H | 左半分 | 左ディスプレーへ | L | 右半分 | 右ディスプレーへ | K | 上半分 | 上ディスプレーへ | J | 下半分 | 下ディスプレーへ |

セミコロンとエンターを入れ替える

デスクトップの特定スペースへの移動

  • デスクトップのスペースの移動はmacデフォルト機能に移動した
    • [システム環境設定]->[キーボード]->[ショートカット]->[Mission Control]

アプリの起動

ファイラー

Windowsキー + e

  • Windowsは標準
  • macはファインダー
  • UbuntuはDolphin

WezTerm

Windowsキー + n

Obsidian にフォーカス

Windowsキー + ,

Firefox にフォーカス

Windowsキー + m

Slack にフォーカス

Windowsキー + g

ToDo

Read more...

CLIツールのショートカットを統一していきたい

背景

CLI関連のツール、tmux, w3m, weztermのキーバインドを揃えたい。ひとまずリストを出す。 ローカルのマシン(macOSなりLinuxなどのデスクトップ環境)ではWezTermとtmuxを用いている。 (以前はgnome-terminal, mltermを用いていたが、sixel対応と設定がluaで書ける点からWezTermを始めた)

将来的に下記の条件が成立したらgnome-terminal, mltermに戻るかも

  1. tmuxのsixel対応が安定動作する
  2. macOS, Linuxの設定ファイルを共通にしたい(WezTermだとOSによってif文で設定を変えられる)
  • tmuxもif-shellで振る舞いを分岐できるようになった

関連ページ

WezTermtmuxneovimw3m
cheat sheetcheat sheet tmuxcheat sheet vimcheat sheet w3m
私のメモtmuxvimw3m
私の設定リポジトリ

現在のキーバインド

prefix

WezTerm(tmux1)tmux2(ローカルで用いる)tmux3(リモートで用いる)
ctrl + yctrl + tctrl + b

リモートサーバ上でtmuxを用いる場合はtmux3のprefixを使う。

ショートカット

weztermtmuxneovimw3m
新しいウィンドウ(タブ)を作るcctabnewCtrl + T
現在のウィンドウ(タブ)を閉じるCtrl + d でexitCtrl + d でexit:wqCtrl + Q
ウィンドウ(タブ)を右に移動nngt}
ウィンドウ(タブ)を左に移動ppgT{
ウィンドウ(タブ)のリストEsc + t

設定が被らないように既存の設定を確認する

環境表示方法設定ファイル
bashbind -P~/.inputrc
fishbind あるいは fish_key_reader~/.config/fish/functions/fish_user_key_bindings.fish
tmuxprefix -> :list-keys~/.config/tmux/tmux.conf
w3m起動中にHを押す~/.w3m/keymap
wezterm
Read more...

FirefoxのTridactyl関連のメモ

設定のサンプル

一時的に機能をオフにしたい

:set mode ignore とすると一時的にオフにできる。 :set mode normal で元に戻せる。

キーボードショートカットでは Shift + Insert に割り当てられている。

自動的にオフにする場合は設定ファイルでは下記の設定

autocmd DocStart https://example.com* mode ignore

ただ、オフにならないサイトもあった。esa.ioがそれで、Chromeで見るようにした。

Read more...

GUIツールのショートカットを統一していきたい

背景

macOSとLinuxのキーバインドを近づけていきたい。 macOSはHammerspoonで LinuxはKDEで設定していく.

Firefox、アクティブになっていなかったらをフロントに出したい

Linux

wmctrlをインストールした上で下記スクリプトを用意

#!/bin/bash

proc="Firefox" # プロセス名
cmd="firefox"  # 起動するコマンド名

# 現在のアクティブなワークスペースを取得
current_workspace=$(wmctrl -d | grep '*' | awk '{print $1}')

# 現在のワークスペースにあるウィンドウIDを取得
window_ids=$(wmctrl -l | grep ${proc} | awk '{print $1}')

found_in_workspace=false

# 現在のワークスペースにあるFirefoxのウィンドウをアクティブにする
for id in $window_ids; do
    window_workspace=$(wmctrl -lG | grep $id | awk '{print $2}')
    if [ "$window_workspace" == "$current_workspace" ]; then
        # ウィンドウをアクティブにする
        wmctrl -i -a $id
 # ウィンドウを最大化
        wmctrl -ir $id -b add,maximized_vert,maximized_horz
 found_in_workspace=true
        break
    fi
done

# 現在のワークスペースにウィンドウがない場合、新しいウィンドウを開く
if ! $found_in_workspace; then
    $cmd &
    echo "新しい${proc}ウィンドウを開きました。"
fi

KDEのシステム設定 -> ショートカット -> カスタムショートカット に追加。 私は「自分で設定」というショートカットのフォルダを作った上で、その中にショートカットを追加している。 フォルダの上で「New」「グローバルショートカット」「コマンド/URL」で指定する。

Read more...