※この記事はAIを使用して作成しています。
はじめに
ChromeOS のLinux環境(Crostini)でVS CodeやAntigravity、ObsidianなどのElectronアプリを使っていると、日本語入力(IME)に切り替えられないという問題に遭遇することがあります。そんな経験をした方も多いのではないでしょうか。
この記事では、その原因と解決方法を詳しく解説します。
環境
- ChromeOS Linux(Crostini / Debian bookworm, arm64)
XDG_SESSION_TYPE=wayland-
GTK_IM_MODULE=cros(ChromeOS IMEブリッジ)
原因
Electronのバージョンによるデフォルト表示プラットフォームの違い
ChromeOS Linux環境では XDG_SESSION_TYPE=wayland が設定されています。
| Electronバージョン | デフォルトの表示プラットフォーム | 日本語入力 |
|---|---|---|
| 〜25.x | X11(XWayland経由) | ✅ 動作する |
| 29.x〜 |
Wayland(auto優先) |
❌ 動作しない |
VS Code 1.82.0がなぜ動くのか?
VS Code 1.82.0 はElectron 25.8.0 を使用しているため、X11がデフォルトです。ChromeOS IME(GTK_IM_MODULE=cros)はXIM(X Input Method)プロトコル経由でXWayland上で動作するため、問題なく機能します。
注意: VS Code 1.87以降ではElectron 29以降を採用しており、同様の問題が発生する可能性があります。その場合は以下の手順で対応してください。
なぜ他のアプリで動かないのか?
Obsidian、Antigravity(v1.22.2)などの新しいElectronアプリはElectron 29以降を使用しており、XDG_SESSION_TYPE=wayland を検出してWaylandモードで起動します。ChromeOS IMEはこのモードでは機能しないため、日本語入力に切り替えられなくなります。
解決方法
Electronアプリを強制的にX11モードで起動するには、以下の2つを設定します。
- 環境変数:
ELECTRON_OZONE_PLATFORM_HINT=x11 - 起動フラグ:
--ozone-platform=x11
注意: デスクトップエントリ(
.desktopファイル)のExec=に直接env VAR=value ...と書く方法はChromOSのランチャーでは効かない場合があります。必ずラッパースクリプト経由で設定してください。
手順
ステップ1: ラッパースクリプトを作成する
/usr/local/bin/ にラッパースクリプトを作成します。
Obsidian の場合
sudo tee /usr/local/bin/obsidian > /dev/null << 'EOF'
#!/bin/sh
export ELECTRON_OZONE_PLATFORM_HINT=x11
exec /opt/obsidian/obsidian-<バージョン>-arm64/obsidian --no-sandbox --ozone-platform=x11 "$@"
EOF
sudo chmod +x /usr/local/bin/obsidian
汎用(他のElectronアプリ)
sudo tee /usr/local/bin/<アプリ名> > /dev/null << 'EOF'
#!/bin/sh
export ELECTRON_OZONE_PLATFORM_HINT=x11
exec /path/to/app/binary --ozone-platform=x11 "$@"
EOF
sudo chmod +x /usr/local/bin/<アプリ名>
ステップ2: デスクトップエントリを更新する
/usr/share/applications/<アプリ名>.desktop の Exec= をラッパースクリプトのパスに書き換えます。
# 変更前
Exec=/opt/obsidian/obsidian-1.12.7-arm64/obsidian --no-sandbox %u
# 変更後
Exec=/usr/local/bin/obsidian %u
ステップ3(VS Codeフォークのみ): argv.json を設定する
VS Codeフォーク(Antigravity、VSCodium など)はElectron起動設定ファイル argv.json にフラグを追加することもできます。
mkdir -p ~/.config/<AppName>
cat > ~/.config/<AppName>/argv.json << 'EOF'
{
"enable-crash-reporter": false,
"ozone-platform": "x11"
}
EOF
アプリ名(ディレクトリ名)は nameShort に対応します。/usr/share/<appname>/resources/app/product.json で確認できます。
cat /usr/share/antigravity/resources/app/product.json | grep nameShort
# → "nameShort": "Antigravity"
# → ~/.config/Antigravity/argv.json に配置
ステップ4: デスクトップデータベースを更新する
sudo update-desktop-database /usr/share/applications/
アプリを再起動して日本語入力が切り替えられるか確認してください。
実際の適用例
Obsidian 1.12.7
# ラッパースクリプト
sudo tee /usr/local/bin/obsidian > /dev/null << 'EOF'
#!/bin/sh
export ELECTRON_OZONE_PLATFORM_HINT=x11
exec /opt/obsidian/obsidian-1.12.7-arm64/obsidian --no-sandbox --ozone-platform=x11 "$@"
EOF
sudo chmod +x /usr/local/bin/obsidian
# デスクトップエントリ
sudo sed -i 's|Exec=.*|Exec=/usr/local/bin/obsidian %u|' /usr/share/applications/obsidian.desktop
sudo update-desktop-database /usr/share/applications/
VS Code(Electron 29以降の場合)
# ラッパースクリプト
sudo tee /usr/local/bin/code-x11 > /dev/null << 'EOF'
#!/bin/sh
export ELECTRON_OZONE_PLATFORM_HINT=x11
exec /usr/share/code/code --ozone-platform=x11 "$@"
EOF
sudo chmod +x /usr/local/bin/code-x11
# デスクトップエントリ(/usr/share/applications/code.desktop の Exec= を変更)
sudo sed -i 's|Exec=/usr/share/code/code|Exec=/usr/local/bin/code-x11|g' \
/usr/share/applications/code.desktop
# argv.json(VS Codeフォーク共通の設定)
mkdir -p ~/.config/Code
cat > ~/.config/Code/argv.json << 'EOF'
{
"enable-crash-reporter": false,
"ozone-platform": "x11"
}
EOF
sudo update-desktop-database /usr/share/applications/
VS Code 1.82.0(Electron 25.x)では上記の対応は不要です。インストール済みバージョンのElectronバージョンを確認してから適用してください。
Antigravity 1.22.2(VS Codeフォーク)
# ラッパースクリプト
sudo tee /usr/local/bin/antigravity-x11 > /dev/null << 'EOF'
#!/bin/sh
export ELECTRON_OZONE_PLATFORM_HINT=x11
exec /usr/share/antigravity/antigravity --ozone-platform=x11 "$@"
EOF
sudo chmod +x /usr/local/bin/antigravity-x11
# デスクトップエントリ
sudo sed -i 's|Exec=/usr/share/antigravity/antigravity|Exec=/usr/local/bin/antigravity-x11|g' \
/usr/share/applications/antigravity.desktop
# argv.json(二重の保険)
mkdir -p ~/.config/Antigravity
cat > ~/.config/Antigravity/argv.json << 'EOF'
{
"enable-crash-reporter": false,
"ozone-platform": "x11"
}
EOF
sudo update-desktop-database /usr/share/applications/
対応が不要なアプリ
- VS Code 1.82.0(Electron 25.x): X11がデフォルトのため対応不要。ただし 1.87以降はElectron 29以降を使用するため上記の対応が必要になる場合あり
-
GTKアプリ(Gedit、FileManager等):
GTK_IM_MODULE=crosがそのまま機能する
原因の調べ方
Electronのバージョンは以下のコマンドで確認できます。
# アプリのpackage.jsonを確認
grep '"electron"' /usr/share/<アプリ名>/resources/app/package.json
Electron 29以降ならこの記事の対応が必要です。
まとめ
| やること | 理由 |
|---|---|
ラッパースクリプトで ELECTRON_OZONE_PLATFORM_HINT=x11 を設定 |
WaylandモードをX11に強制切り替え |
--ozone-platform=x11 を直接バイナリに渡す |
環境変数より確実にX11を強制 |
.desktop の Exec をラッパースクリプトに変更 |
ChromeOSランチャーは env 構文を解釈しない |
ChromeOS + Linux環境でElectronアプリの日本語入力に悩んでいる方の参考になれば幸いです。