メインコンテンツまでスキップ

プロセスと環境変数

プロセスの起動

COMPOSITOR.process は外部プログラムを起動します。コンポジターがプロセスをどう 追跡するかによって、3つのメソッドがあります。

メソッドライフサイクル用途
once(id, spec)起動時に1回実行セッションと共に始まるデーモン/エージェント
service(id, spec)常駐・監視・再起動生かし続けたいウォッチャー
spawn(spec)起動して放置・追跡なしオンデマンド起動(キーバインド)

once

セッション起動時にコマンドを1回実行します。

COMPOSITOR.process.once('fcitx5', {
command: 'fcitx5 -d',
runPolicy: 'once-per-session',
});

runPolicy は再実行を制御します。

  • "once-per-session"(デフォルト) — ログインセッションごとに1回だけ実行。
  • "once-per-config-version" — 設定変更後(ホットリロード)にも再実行。

service

コンポジターが監視・再起動する常駐プロセスを起動します。

COMPOSITOR.process.service('cliphist-text', {
command: ['wl-paste', '--type', 'text', '--watch', 'cliphist', 'store'],
restart: 'on-exit',
});

restart ポリシー: "never""on-failure"(非ゼロ終了時のみ再起動)、 "on-exit"(常に再起動)。

spawn

プロセスを起動して放置します――追跡も再起動もしません。キーバインドのハンドラ内に 最適です。

COMPOSITOR.key.bind('terminal', 'Super+T', () => {
COMPOSITOR.process.spawn({command: ['kitty']});
});

コマンド spec

どのメソッドも command を持つ spec を取り、cwdenv を任意で指定できます。

フィールド意味
commandstring | string[]実行するプログラム(下記参照)
cwdstring作業ディレクトリ
envRecord<string, string | number | boolean>このプロセス向けの追加環境変数

command の解釈のされ方:

  • 単一文字列/bin/sh -lc <command> 経由で実行されるため、シェル機能(パイプ・ リダイレクト・~・環境変数展開)が使えます。
    COMPOSITOR.process.spawn({command: 'hyprshot -m region --raw | swappy -f -'});
  • 文字列配列はシェルを介さず直接 exec されます――各要素が1つの argv エントリとして そのまま渡されます(安全で、クォートの落とし穴がありません)。
    COMPOSITOR.process.spawn({command: ['kitty', '--title', 'My Terminal']});

環境変数

COMPOSITOR.env は、コンポジターが起動するプロセスが継承する環境を管理します。変更は 呼び出しに起動されるプロセスに反映されます。実行中のプロセスには publish しない 限り影響しません。

COMPOSITOR.env.set('QT_QPA_PLATFORM', 'wayland;xcb');

COMPOSITOR.env.apply({
QT_IM_MODULE: 'fcitx',
XMODIFIERS: '@im=fcitx',
MOZ_ENABLE_WAYLAND: 1,
});
メソッド意味
set(key, value)変数を1つ設定(値は string/number/boolean)
unset(key)変数を削除
get(key)現在値を取得(string | undefined
apply(values)一括設定。値に nullundefined を渡すとその変数を削除
publish(keys?)現在の環境を実行中サービスにブロードキャスト。省略時は全キー
ヒント

環境変数は、それを必要とするプロセスを起動するに設定してください。デフォルト 設定では、ファイル冒頭付近で Qt プラットフォームや入力メソッドの変数を設定し、その後に 関連アプリを起動しています。