0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Meta Quest 3 に termux でスタンドアロン Linux 環境を作る方法

Last updated at Posted at 2025-11-19

Meta Quest 3 に termux でスタンドアロン Linux 環境を作る方法

元ネタ

概要

  • meta quest 3 本体(ハンドトラッキングあるのでコントローラ不要)と lenovo thinkpad trackpoint keyboard ii (英字配列(※日本語配列は quest 3 が対応してないため非推奨)) を用意する
  • meta quest 3 に termux と termux-api, termux-x11 を入れて xfce4 環境を作る
  • termux 内の xfce4 に firefox やら tigervnc やらを入れる

するとこうなる

じつは proot というのを使うと下記のややこしいことをしなくてもいいが、実行時オーバーヘッドがかかるので、この記事では生 termux でデスクトップ環境を作る(下記参照)

セットアップ手順

meta quest 3 に f-droid を入れる

細かい説明は省くが、meta quest を開発者モードにして、

meta quest 3 に f-droid で termux と termux api を入れる

説明略

  • termux api は音を聞こえるようにするために必要

meta quest 3 に termux-x11 を入れる

termux-x11 の最新の termux-x11.apk (arm64)をリリースからダウンロードして、

  • 方法1. Windows から SideQuest でインストールする
  • 方法2. Oculus Browser で termux-x11 の apk をダウンロードしてインストールする

Android の Phantom Process Killer を止める

  • これを止めておかないと X 内でプロセスぱかぱか立ててる Termux が丸ごと死ぬ
  • termux から adb を使うには sidequest とか入れればできる
  • むろん termux からじゃなく windows に adb を入れて実行しても ok
$ pkg install android-tools
$ adb devices
$ adb shell "/system/bin/device_config set_sync_disabled_for_tests persistent"
$ adb shell "/system/bin/device_config put activity_manager max_phantom_processes 2147483647"
$ adb shell settings put global settings_enable_monitor_phantom_procs false

出典

termux のセットアップ

パッケージの更新と 必要なリポジトリの追加

$ termux-change-repo
$ pkg update
$ pkg upgrade
$ pkg install termux-tools x11-repo root-repo tur-repo termux-api
$ pkg update
$ pkg upgrade

termux-x11 のセットアップ

$ pkg install termux-x11-nightly xfce4
$ termux-x11 :1 -xstartup xfce4-session

ここで termux-x11 のアプリを開いたら xfce4 のデスクトップが表示されるはず

日本語入力 (fcitx5 + anthy) のセットアップ

  • mozc は termux 上で bazel ビルド構築するのが死ぬほど面倒なので anthy にする。

まず fcitx5 入れる

$ pkg install fcitx5 fcitx5-configtool

↑だけで十分なはずだが、この先の工程が動かなかったら↓も入れる

$ pkg install fcitx5-gtk2 fcitx5-gtk3 fcitx5-gtk4 fcitx5-qt

次にanthy-unicode を git pull して anthy-unicode.termux.patch あててビルドする

$ pkg install git libtool wget autoconf build-essential make binutils-is-llvm
$ git clone https://github.com/fujiwarat/anthy-unicode.git
$ cd anthy-unicode
$ wget https://gist.githubusercontent.com/kazuho/453311b4fba9b4c987a7edc7fe0ae7e4/raw/e7a8bd967116acbb51fd8b38528c8c22dedb2857/anthy-unicode.termux.patch
$ git apply anthy-unicode.termux.patch
$ autoreconf --install
$ ./configure --prefix=$PREFIX && make && make install

fcitx5-anthy もビルドする。パッチは不要。

$ pkg install extra-cmake-modules gettext
$ git clone https://github.com/fcitx/fcitx5-anthy.git
$ cd fcitx5-anthy
$ cmake -DCMAKE_INSTALL_PREFIX=$PREFIX && make && make install

このまま fcitx5 を terminal から起動すると /anthy.dic がないというエラーが出るはず。
これは termux 環境の dir 構成が通常の linux と異なるため anthy-unicode.conf を違うところへ探しにいってるからなので symlink で対処

$ ln -s $PREFIX/etc/anthy-unicode.conf $PREFIX/share/anthy-unicode 
$ ln -s $PREFIX/share/anthy-unicode $PREFIX/share/anthy

再度 fcitx5 を terminal から実行してうまくいくこと確認。
うまくいかないなら strace fcitx5 2>&1 | grep unicode.conf とかして、どこに何を探しにいってるか確認するとよい。

xfce4 起動時に dbus が必要なので xfce4 を起動するときに以下の設定が必要。

startx.sh とか名前をつけておくとよい

startx.sh
#!/bin/bash
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export INPUT_METHOD=fcitx
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus

dbus-run-session termux-x11 :1 -xstartup xfce4-session

xfce4 デスクトップ内の fctix 5 configuration アプリで IME に anthy を追加

変換候補が表示されなかったりするが、とりあえずこれで日本語入力はできる。

thinkpad keyboard の ctrl-space で変換できないとき

termux-x11 アプリのバージョンによっては一秒くらい押しっぱなしにしないと反応しないことがある
↓対策してみること。

ちなみに かな-カナ-カナ 切り替えは anthy では Ctrl + .

GPUアクセラレーション(VirGL)

virgl_test_server_android を有効にすると x11 サーバの描画が高速化されるらしい

pkg install virglrenderer-android

meta quest3のチップ向けに設定した気がするが、この大量のオプションがどれほど有効なのかは不明。

virgl 関連だけ抜き出した start.sh はこうなる

start.sh
#!/bin/bash
export MESA_NO_ERROR=1 MESA_GL_VERSION_OVERRIDE=4.3COMPAT MESA_GLES_VERSION_OVERRIDE=3.2 LIBGL_DRI3_DISABLE=1 

virgl_test_server_android &

sleep 1

export XDG_RUNTIME_DIR=${TMPDIR}
export XDG_CONFIG_DIRS=/data/data/com.termux/files/usr/etc/xdg
export VK_ICD_FILENAMES=/data/data/com.termux/files/usr/share/vulkan/icd.d/wrapper_icd.aarch64.json
export MESA_SHADER_CACHE=512MB
export MESA_SHADER_CACHE_DISABLE=false
export vblank_mode=0
export GALLIUM_DRIVER=virpipe 

termux-x11 :0 -xstartup "dbus-launch --exit-with-session xfce4-session"

サウンド (pulseaudio)

必要なパッケージのインストール

$ pkg install vim pulseaudio pavucontrol

次に vim $PREFIX/etc/pulse/default.pa を開いて以下が有効になるように編集

load-module module-device-restore
load-module module-stream-restore
load-module module-card-restore

### Enable ALSA sink/source (local, optional)
load-module module-alsa-sink device=default
load-module module-alsa-source device=default

### Enable TCP connections for clients
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1

足りないとおぼしきディレクトリの追加

mkdir -p $PREFIX/etc/pulse/default.pa.d

ここで、termuxをフロントで実行したままtermux-x11に切り替えるとX側でも音がなるはず。

pulseaudio 関連の設定だけ抜き出した start.sh はこうなる。

start.sh
pulseaudio --start --verbose --exit-idle-time=-1&
export PULSE_SERVER=tcp:127.0.0.1:4713

termux-x11 :0 -xstartup "dbus-launch --exit-with-session xfce4-session"

マイクが使えない問題

まず前提として termux api のマイクアクセスを quest の設定アプリで許可する必要ある

しかし現状の horizon os v81 では termux-api は quest 3 のマイクをうまく扱えない

termux 単体で termux-microphone-record も無音になる

当然 pulseaudio で入力デバイスは認識していても無音になる

残念

startx.sh 最終形態

ここまで最低限使える termux desktop 環境が手に入る

startx.sh
#!/bin/bash

# fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export INPUT_METHOD=fcitx
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus

# pulseaudio
pulseaudio --start --verbose --exit-idle-time=-1&

# virgl
export PULSE_SERVER=tcp:127.0.0.1:4713
export MESA_NO_ERROR=1 MESA_GL_VERSION_OVERRIDE=4.3COMPAT MESA_GLES_VERSION_OVERRIDE=3.2 LIBGL_DRI3_DISABLE=1 
virgl_test_server_android &
sleep 1
export XDG_RUNTIME_DIR=${TMPDIR}
export XDG_CONFIG_DIRS=/data/data/com.termux/files/usr/etc/xdg
export VK_ICD_FILENAMES=/data/data/com.termux/files/usr/share/vulkan/icd.d/wrapper_icd.aarch64.json
export MESA_SHADER_CACHE=512MB
export MESA_SHADER_CACHE_DISABLE=false
export vblank_mode=0
export GALLIUM_DRIVER=virpipe 

# xfce
termux-x11 :0 -xstartup "dbus-launch --exit-with-session xfce4-session"

capslock を無効化したい

  • 現状方法不明

各種アプリケーションのセットアップ

firefox

これでそのままつかえる

$ pkg install firefoz

中ボタンクリックで paste になる問題の対策

thinkpad trackpad keyboard だとマウスの wheel click が firefox 上で paste になるので、それを防ぐ方法

about:config -> middlemouse.pastefalse にする

meta quest 3 上の termux 環境に ssh server を立てて pc からログインする方法

$ pkg install openssh

# OpenSSHサーバーの起動
$ sshd

# IP確認
$ pkg install iproute2
$ ip -4 a
## inet 192.168.1.x/24 という表記の192.168.1.xの部分がIPになります

# ユーザー名確認
$ id
## uid=xxxxx(u0_axxxxx) という表記のu0_axxxxxがユーザー名になります

# パスワード設定 これでパスワードを設定します、適当なパスワードを設定してください
$ passwd

pc から以下のようにすればログインできます

ssh u0a159@192.168.1.x -p 8022

参考

xfce4 の keyboard shortcut

変更方法は以下参照

chromium browser

chrome は arm64 ビルドがなくて動かないので chromium

pkg install chromium-browser

brave-browser

  • proot じゃないと動かない
  • proot環境設定は別途調べて
proot-distro login --user legokichi "ubuntu" --shared-tmp -- eval "env DISPLAY=:0 XDG_RUNTIME_DIR=${TMPDIR} brave-browser --no-sandbox"

vscode

  • proot じゃないと動かない
  • proot環境設定は別途調べて
proot-distro login --user legokichi "ubuntu" --shared-tmp -- eval "env DISPLAY=:0 XDG_RUNTIME_DIR=${TMPDIR} code --verbose --no-sandbox"

quest3 から linux の VNC を使う方法

  • ここまでデスクトップ環境を構築しても quest 3 の性能の限界を感じるとき(特にfirefox で notion.so などの超リッチな ui の web サイトを触っているとき)に使う
  • cpuとメモリつよつよ linux 母艦に tigervnc を使う
  • (termux repo にはなぜか tigervnc しか入ってない)

母艦 linux 側

母艦 linux には xfce4 と fcitx5-mozc を入れたデスクトップ環境 tiger vnc server で配信する想定

自宅のつよつよ母艦との ssh には tailscale とか cloudflare tunnel とか ssh over tor とか softether vpn azure とか使えば良い

インスコ

sudo apt install tigervnc-standalone-server xfce4 xfce4-goodies -y

サーバパスワード指定

vncpasswd
vncserver :1
vncserver -kill :1

vnc で Xfce4 を使うように設定

vim ~/.vnc/xstartup
chmod +x ~/.vnc/xstartup

~/.vnc/xstartup の内容

#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export INPUT_METHOD=fcitx
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus
export XKL_XMODMAP_DISABLE=1
dbus-launch --exit-with-session xfce4-session

(母艦 linux pc の日本語環境は fcitx でなくともご自由に)

サーバ起動 (:1 は port 5901)

vncserver :1 -geometry 480x640 -depth 16 -FrameRate 15 -CompareFB 2 -ImprovedHextile 1

上記設定なら(LANではなく)インターネット超しでもそこそこ早くて通信量が少ないはず

quest 側

termux でサーバへつなぎ ssh ポートフォワーディングする

ssh hoge -L 5901:127.0.0.1:5901

termux-x11 の xfce4 の中で tigervnc をインストールして

$ sudo apt install tigervnc-viewer

起動

vncviewer -compresslevel 9 -qualitylevel 0 -lowcolourlevel 0 -PreferredEncoding tight -autoselect=0 -FullScreen -FullscreenSystemKeys 127.0.0.1:5901

こちらも 通信量が少なくなるような設定

  • -FullScreen -FullscreenSystemKeys で win key なども転送される
  • f8 key で FullScreen 解除できる

quest3 から android を操作する方法

quest3 の中で vnc で linux マシンをリモート操作するだけでは飽き足らず android もリモート操作したくなったときに使う

  • quest3 に https://github.com/zwc456baby/ScrcpyForAndroid を入れる
  • 操作対象の android で
    • 開発者モードをon にする
    • usb デバッグとwifi デバッグをonにする
    • wifi デバッグの設定でpairing mode にする
  • quest3(quest3でなくてもよいが) の termux で
    • adb pair [HOST]:[PAIR PORT] して操作対象の android とペアにする
    • adb connect [HOST]:[ADB PORT] して操作対象の android にデバッグ接続する
    • adb devices して接続されているのを確認する
    • adb tcpip 5555 してポートを変える
  • quest3 の ScrcpyForAndroid で接続する
  • 参考: https://ivonblog.com/en-us/posts/termux-scrcpy/

この環境で 2 年ほど仕事をしてみた感想

  • quest3 はコスパ最高
  • でもそろそろメモリ足りないので Samsung Galaxy XR あたりが欲しいかも
  • この記事の内容はそのまま AndroidXR でも動くはず
  • 2026年に期待

参考情報

わからないことあったら↓を読むこと

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?