rm -rf /*

rm -rf /*

忘れようとしても思い出せない

Crostini環境下のArch Linuxでcros-imを使えるようにする

CrostiniにArch Linuxを導入」で導入したArch LinuxではWaylandでの日本語入力はできない。できないと不便なので、ChromeOS IMEsをcros_im経由でWaylandでも利用できるようにする。ただし、ElectronとGTKのアプリ以外では使えない。

chromiumosの「cros_im」とQiitaの「ChromeOS IME on Crostini」を参考にした。

croetini-imeを有効化

chrome://flags/でcrostini-ime-supportなどをオンにする。ChromeOSのバージョンでキーがやや異なる。Qtサポートもあるみたい。

cros_im をビルド

便利なパッケージなどはないので、自分でソースを弄りながらビルドする。

Crostini上のArch Linuxに入って、コンパイルに必要なパッケージをインストール

$ yay -S clang gtest gtk3 gtkmm3 wayland meson pkgconf xorg-server-xvfb weston base-devel qt5-base qt5-xcb-private-headers
$ git clone https://chromium.googlesource.com/chromiumos/platform2
$ cd platform2/vm_tools/cros_im

ソースコードの修正

$ vim test/run_tests.py

run_tests.pyの88行目

# ここを
["dpkg-architecture", "-q", "DEB_BUILD_MULTIARCH"]

# こうする(pythonでsubprocessを呼び出しているだけなので同じことができれば方法は何でも良い)
["gcc", "-dumpmachine"]

ビルド&テスト

$ meson build && cd build && ninja
$ meson test

また、参考にしているDebianの場合とArch Linuxディレクトリ構成が違うので、このあとも少し方法が異なる

# Debianでは /usr/lib/*/libgtk-3-0/gtk-query-immodules-3.0 im-cros-gtk3.so > dev-immodules.cache だが、ディレクトリ構成が異なるので以下のようにする。
$ /usr/bin/gtk-query-immodules-3.0 im-cros-gtk3.so > dev-immodules.cache
$ export GTK_IM_MODULE_FILE=$(pwd)/dev-immodules.cache

インストール

$ meson configure --prefix /usr && sudo meson install
$ sudo /usr/bin/gtk-query-immodules-3.0 --update-cache

以下のコマンドの結果が「GTK_IM_MODULE=cros」とならない場合はFcitx Mozcなどの残骸がある。これがあるとcros_imが動かないので原因を潰す。(例えば、~/.config/environment.d/im.confなど)

$ env | grep -E 'XMOD|_IM'

US配列のキーボードを使っている場合

Redditの投稿を参考にして対処(LinuxChromeの日本語の切り替えが干渉する問題)

以下の内容の ~/.config/systemd/user/sommelier@.service.d/cros-sommelier-override.confと ~/.config/systemd/user/sommelier-x@.service.d/cros-sommelier-x-override.confを作成

[Service]
Environment="SOMMELIER_ACCELERATORS=Super_L,<Alt>bracketleft,<Alt>bracketright,<Control>space,<Control><Shift>space"
$ mkdir -p ~/.config/systemd/user/sommelier@.service.d/
$ vim .config/systemd/user/sommelier@.service.d/cros-sommelier-override.conf
$ mkdir -p ~/.config/systemd/user/sommelier@.service.d/
$ vim .config/systemd/user/sommelier-x@.service.d/cros-sommelier-x-override.conf

CrostiniにArch Linuxを導入

処分しようと思っていたPixelbookのCrostiniにArch Linuxを入れたら使いやすかったので、入れ方を忘れないようにメモ。Chrome OSのバージョンは132beta。Arch Linuxの日本語Wikiに方法が書いてあるが、内容が古いので英語版を見ながら進めた。

Linux開発環境の有効化とDebianコンテナの削除

Chrome OSの設定からLinux開発環境を有効化する。その後、croshターミナルをCtrl+Alt+tで開いて、既存のDebiaコンテナを削除する。

croshで以下を実行

$ vmc destroy termina
$ vmc start termina

Arch Linuxコンテナを作成

croshで以下を実行して、イメージを置き換え

$ vsh termina
$ lxc remote remove images
$ lxc remote add images https://images.lxd.canonical.com/ --protocol=simplestreams

Arch Linuxコンテナを作成(あまり覚えていない) 使用できるイメージの一覧はここ(https://images.lxd.canonical.com/)にある。チュートリアルなどはここ(https://documentation.ubuntu.com/lxd/en/latest/)にある。何かで少し戸惑った記憶があるが忘れた。

$ lxc launch images:archlinux arch --config security.privileged=true # archという名前でコンテナを作成
$ lxc list
$ lxc start arch # Arch Linuxコンテナを起動
$ lxc exec arch -- bash # Arch Linuxコンテナにbashでログイン

一般ユーザーの作成

Arch Linuxに入ったら、一般ユーザーを作成する。

# useradd -m -g wheel -s /bin/bash <username>

一般ユーザーをsudoerに設定

# pacman -S sudo
# passwd <username> # 一般ユーザーのパスワードを設定
# passwd root  # rootのパスワードも設定
# visudo

以下の行のコメントアウトを外す

%wheel ALL=(ALL:ALL) ALL

一般ユーザーにログインして諸々設定

yayをインストール

# su <username>
# yay をインストールする
$ sudo pacman -S git fakeroot binutils make gcc
$ sudo pacman -S --needed git base-devel
$ cd # ホームディレクトリへ移動
$ git clone https://aur.archlinux.org/yay.git
$ cd yay/
$ makepkg -si

ミラーサイトを最適化(ARMの場合は手動で選択した方が良い→ミラー一覧

# ミラーリストをバックアップ
$ sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bakup
$ sudo pacman -S pacman-contrib

# 早いミラーから10件取得
$ sudo rankmirrors -n 10 /etc/pacman.d/mirrorlist.bakup > /etc/pacman.d/mirrorlist

# reflectorをインストール
$ yay -S reflector

# systemdで自動化
$ vim /etc/xdg/reflector/reflector.conf
$ sudo systemctl enable reflector.service
$ sudo systemctl start reflector.service # 起動するとミラーリストが更新される

/etc/xdg/reflector/reflector.confの内容は以下の通り(Arch Wikiとおなじ)

--save /etc/pacman.d/mirrorlist
--country Japan,Australia
--protocol https
--latest 5

cros-container-guest-tools-git を導入

WaylandのGUIアプリケーションを使うためにcros-container-guest-tools-gitを導入。ここはWikiの通りでは上手く設定できなかったので注意。Redditの「What is the default password for the initial USERNAME@penguin ?」を参考にして対処した。

$ yay -S cros-container-guest-tools-git

# ここがWikiと違うところ
$ export XDG_RUNTIME_DIR=/run/user/$(id -u)
$ export DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus
$ systemctl --user enable sommelier@0.service # startではなくenableでないとエラーが出る
$ systemctl --user enable sommelier-x@0.service # startではなくenableでないとエラーが出る
$ exit # これで設定完了

"Failed to connect to user scope bus via local transport: No such file or directory"と言われることがあれば、以下のコマンドを実行

$ loginctl enable-linger <username>

デフォルトコンテナの置き換えと名前の変更

最後にコンテナの名前をarchからpenguinに変更して完了(croshで作業)

$ lxc stop --force arch
$ lxc rename arch penguin
$ lxc start penguin # これで作成したArch Linuxが起動する

Crostini環境下のArch Linuxでcros-imを使えるようにする」につづく

追記:日本語を美しく表示する

日本語の表示が美しくなかったので調べていたら、対処法があった。

zenn.dev

以下の内容の ~/.config/fontconfig/fonts.conf を作成

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!-- Default serif fonts -->
 <match target="pattern">
   <test qual="any" name="family"><string>serif</string></test>
   <edit name="family" mode="prepend" binding="same"><string>Noto Serif CJK JP</string> </edit>
 </match>
 <match target="pattern">
   <test qual="any" name="family"><string>sans-serif</string></test>
   <edit name="family" mode="prepend" binding="same"><string>Noto Sans CJK JP</string> </edit>
 </match>
 <match target="pattern">
   <test qual="any" name="family"><string>monospace</string></test>
   <edit name="family" mode="prepend" binding="same"><string>Noto Sans Mono CJK JP</string> </edit>
 </match>
</fontconfig>

あとは fc-cache を実行

WSL2にGentoo LinuxをインストールしてWSLgを使う

方法は公式ドキュメントに準拠。

WSL2 への Gentoo イメージのインポートと初期設定

Power Shell で stage3 のイメージをダウンロードしてWSLにインポート

PS > wsl --import Gentoo D:\WSL\Gentoo D:\WSL\stage3-amd64-desktop-systemd-20250119T170328Z.tar.xz --version 2

WSL上でGentooを起動

PS > wsl -d Gentoo

一般ユーザーを追加して、パスワードを設定

# useradd -m -G wheel <username>
# passwd <username>

ルートのパスワードを設定

# passwd

/etc/wsl.conf を作成し、以下の内容を追加(nano /etc/wsl.conf)

[boot]
systemd=true # systemdを有効にする

[user]
default=<username> # デフォルトのログインユーザーを設定

[network]
generateResolvConf = false # /etc/resolv.conf をWSL2のDNS設定に上書きしない(古い対処法)

ついでに後々面倒なことになるDNSの設定を済ませる(ただし、これは古い対処法)

# rm /etc/resolv.conf
# sh -c "echo 'nameserver 8.8.8.8' > /etc/resolv.conf" # 8.8.8.8 は Google 提供のネームサーバー

一旦、Power Shell に戻って WSL を再起動する(-u root を付けないとsudoが使えない状態で先ほど設定したデフォルトユーザーでログインする)

# exit
PS > wsl --shutdown
PS > wsl -u root -d Gentoo

パッケージ管理環境の構築

/etc/portage/make.conf に以下の設定を追加する(適当)

GENTOO_MIRRORS="http://ftp.iij.ad.jp/pub/linux/gentoo/ rsync://ftp.iij.ad.jp/pub/linux/gentoo/" # 一旦、国内のミラーを選択しておく
USE="X icu minizip inspector ibus dbus"

使用するミラーを選択

# emerge-webrsync
# emerge --ask --verbose --oneshot app-portage/mirrorselect
# mirrorselect -i -o >> /etc/portage/make.conf

環境全体と普段使用するユーザーの設定

プロファイルを選択

# systemd-firstboot --prompt # いらないかも
# systemctl preset-all --preset-mode=enable-only # いらないかも
# emerge --sync
# eselect profile list

タイムゾーンを選択

# ls -l /usr/share/zoneinfo
# ls -l /usr/share/zoneinfo/Asia/
# echo "Asia/Tokyo" > /etc/timezone 
# emerge --config sys-libs/timezone-data
# ln -sf ../usr/share/zoneinfo/Asia/Tokyo /etc/localtime

システム言語を設定

# nano /etc/locale.gen
# locale-gen
# eselect locale list
# eselect locale set 5
# env-update && source /etc/profile && export PS1="(chroot) ${PS1}"

一般ユーザーの設定

# emerge --ask app-admin/sudo
# visudo

# 以下の行をコメントアウト
%wheel ALL=(ALL:ALL) ALL

エディタを vim に変える

# emerge app-editors/vim
# eselect editor list
# eselect editor set 2
# . /etc/profile

システムを更新

# emerge-webrsync
# emerge --ask --verbose --update --deep --newuse @world
# exit

デフォルトの WSL イメージを変更

PS >  wsl -s Gentoo

WSLg の設定(公式ドキュメントに載っていない)

そのままでは動作しないので、wslg-linksを参考に設定。ここからは一般ユーザーで作業。

$ sudo ln -s /mnt/wslg/.X11-unix/X0 /tmp/.X11-unix/X0
$ sudo rm /run/user/$(id -u)/wayland-0
$ sudo ln -s /mnt/wslg/runtime-dir/wayland-0 /run/user/$(id -u)/wayland-0
$ exit

動作チェック

$ sudo emerge --ask x11-apps/xeyes
$ xeyes # 動作すれば完了

古くなったGoogle Pixel 3 XLをLineageOS 21で再利用

半年以上前のメモ。加筆の予定がないので公開。

サブ機として使用されていたが、2台持ちが面倒くさくなりXBox Cloud Gaming端末となった(写真)

準備

bootloaderのunloack

以下のコマンド(ターミナルで実行)でデバイス名の横に"device"と表示されればOK。("unauthorized"はUSBデバッグの許可忘れ)

adb devices

以下のコマンドで端末をFastboot Modeで起動

adb -d reboot bootloader

Device stateは"locked"

以下のコマンドを実行

fastboot devices

以下のコマンドでbootloaderをアンロック

fastboot flashing unlock

「FAILED (remote: 'flashing unlock is not allowed')」と言われる場合はOEMロック解除忘れ。

端末側を操作してbootloaderをアンロックを選択すると再起動する。

Device stateが"unlocked"になる。

ブートイメージの書き込み

fastboot modeで再起動するはずなので、以下のコマンドでイメージを書き込み。

fastboot flash boot boot.img

端末側でRecovery Modeを選択して再起動。

Factory Resetを選択してそのまま進める。

Data wipe complete. と表示されたら画面をタップしてメインメニューに戻る。

OS イメージの書き込み

メインメニューで“Apply Update”を選択 > Apply from ADB

以下のコマンドでイメージを書き込み。(イメージはsha256sum -c sha256.txtとかでチェックしておくこと)

adb -d sideload lineage-21.0-20240806-nightly-crosshatch-signed.zip

sha256.txtはスペース区切りの以下のファイル

69a05f36b9e4f1fa32d3a891bd339d75c8a3aacb738237b2e1c862b9c5b77775 lineage-21.0-20240806-nightly-crosshatch-signed.zip

書き込み時に進捗率が47%くらいで止まるが、待っていれば問題ないらしい。

エラー無く書き込みが終わったら「←」→「Advanced」→「Reboot to recovery」の順にタップします。この操作を行わないと後述のMindTheGapps書き込みに失敗する。

Add-Ons (MindTheGapps)のインストール

「Apply update」→「Apply from ADB」

adb -d sideload MindTheGapps-14.0.0-arm64-20240612_135921.zip

Signature verification failedと言われたら、とにかく進める「Yes」を選択する。

書き込みが終わったら「←」→「Reboot system now」

WaydroidがAnacondaのPythonが原因のModuleNotFoundErrorを返して困った話(解決)

Arch LinuxにAURからWaydroidをインストールしたときに「Index» AUR Issues, Discussion & PKGBUILD Requests» waydroid init does not start due to ModuleNotFoundError」と全く同じ問題に遭遇した。ネットを調べるとみんな無茶苦茶困っているようだ。

Waydroidのインストール自体は以下のコマンドで完了する。

$ yay -S waydroid

実行しようとすると、このエラーが発生した。

$ ModuleNotFoundError: No module named 'gbinder'

原因は私の環境がシステムのPythonを使用していないことによるものらしい。

私はminiforgeを利用しているので、システムのPythonではなくminiforgeのbaseのPythonが優先して使用されていた。ターミナルの起動時にcondaのbaseがactivateされないようにすることで問題を回避した。

$ which python # これでホームディレクトリ以下のpythonが出てくるはず
$ conda config --set auto_activate_base false

これで端末を再起動して、python-gbinder を再構築したらWaydroidが正常に起動した。

$ which python # これで/usr/bin/pythonが出てくればOK
$ yay -S --rebuild python-gbinder 

WaydroidはNVIDIAGPUでは動かないが回避策があるらしい。

あとはWaydroid Extras ScriptでARM互換にしたり、Google Play Storeを使えるようにすれば便利になる。以下の記事を参考にした。

【Waydroid】UbuntuでAndroidアプリを動かす話

また、ここの記事を参考にしてマルチウィンドウモードを有効にした。

$ waydroid prop set persist.waydroid.multi_windows true
$ sudo systemctl restart waydroid-container

Waydroidの起動よりも、Anacondaのbaseが勝手に起動しなくなる設定が有益だったので記録を残しておく。