Arch Linuxの自分用雑録

需要は考慮していません。

# AURにあるmozc-utのビルドエラー (2024/12/03)

bazelが`qt_linux`リポジトリのビルドエラーを出す場合、`pkgconf`をインストールするとビルドが通りました。

```
ERROR: Traceback (most recent call last):
        File "/home/someone/.cache/bazel/_bazel_someone/7add4d5dc3f5244fd83059338167b91c/external/_main~_repo_rules~qt_linux/BUILD.bazel", line 8, column 16, in <toplevel>
                hdrs = glob([
Error in glob: pattern cannot be empty
ERROR: /home/someone/.cache/bazel/_bazel_someone/7add4d5dc3f5244fd83059338167b91c/external/_main~_repo_rules~qt_linux/BUILD.bazel: no such target '@@_main~_repo_rules~qt_linux//:qt_linux': target 'qt_linux' not declared in package '' defined by /home/someone/.cache/bazel/_bazel_someone/7add4d5dc3f5244fd83059338167b91c/external/_main~_repo_rules~qt_linux/BUILD.bazel
ERROR: /home/someone/.cache/yay/mozc-ut/src/mozc/src/gui/tool/BUILD.bazel:123:18: no such target '@@_main~_repo_rules~qt_linux//:qt_linux': target 'qt_linux' not declared in package '' defined by /home/someone/.cache/bazel/_bazel_someone/7add4d5dc3f5244fd83059338167b91c/external/_main~_repo_rules~qt_linux/BUILD.bazel and referenced by '//gui/tool:mozc_tool'
ERROR: Analysis of target '//gui/tool:mozc_tool' failed; build aborted: Analysis failed
```

情報ソースはAURのmozcパッケージのコメントです。
https://aur.archlinux.org/packages/mozc#comment-985540

# WI-U3-2400XE2のドライバの導入 (2025/01/09)

BUFFALOのWi-Fiアダプタである[WI-U3-2400XE2](https://www.buffalo.jp/product/detail/wi-u3-2400xe2.html "製品情報リンク")のドライバ導入の手順です。

1. `pacman -S usb_modeswitch`によりusb_modeswitchを導入する
2. `cyme`あるいは`lsusb`によりBUFFALOのWi-Fiアダプタとして認識されるようになることを確認する
変化がない場合はアダプタを挿し直す
3. AURからRTL8852CUドライバのリポジトリを取得
`git clone 'https://aur.archlinux.org/rtl8852cu-git.git'`
複数のカーネルを使うユーザは[rtl8852cu-dkms-git](https://aur.archlinux.org/rtl8852cu-dkms-git.git)の方がいいかも
4. `pacman -S bc`により`bc`をインストールする
**これがないと次の手順でビルドに失敗する**
5. `PKGBUILD`の`source`を以下のように書き換えて`makepkg -si`
```diff:PKGBUILD.diff
makedepends=('git' 'make' 'linux-headers')
conflicts=("${_pkgbase}" "${_pkgbase}-dkms-git")
-source=("git+https://github.com/lwfinger/rtw8852cu.git"
+source=("git+https://github.com/0xNOY/rtw8852cu.git"
        "$pkgname.install")
install=$pkgname.install
```

## USB 3.0で動作させる方法

単にドライバを導入しただけだとUSB 2.0での動作となってしまい、Wi-Fiアダプタ本来の性能を十全に発揮できません。
ドライバをカーネルモジュールとしてロードする際に、`rtw_switch_usb_mode=1`を指定することでをUSB 3.0での動作となります。
```
sudo modprobe 8852cu rtw_switch_usb_mode=1
```
常にUSB 3.0で動作させたい場合は`/etc/modprobe.d/`内に設定ファイルを作成すればよいです。
```text:/etc/modprobe.d/10-8852cu.conf
options 8852cu rtw_switch_usb_mode=1
```

----
以下、自分用の解説。

このアダプタは初期状態ではCD-ROMとして認識されているので、`usb_modeswitch`によりモードの切り替えを行う必要があります。
```text:初期状態でのlsusb出力
Bus 003 Device 003: ID 0bda:1a2b Realtek Semiconductor Corp. RTL8188GU 802.11n WLAN Adapter (Driver CDROM Mode)
Device Descriptor:
...（略）...
  idVendor          0x0bda Realtek Semiconductor Corp.
  idProduct         0x1a2b RTL8188GU 802.11n WLAN Adapter (Driver CDROM Mode)
```

```text:モード切り替え後のlsusb出力
Bus 003 Device 003: ID 0411:03a6 BUFFALO INC. (formerly MelCo., Inc.) 802.11ax WLAN Adapter
Device Descriptor:
...（略）...
  idVendor          0x0411 BUFFALO INC. (formerly MelCo., Inc.)
  idProduct         0x03a6 [unknown]
```

`usb_modeswitch`パッケージにはudevルールが含まれており、このアダプタを検出するとモードの切り替えが行われます。
```text:/lib/udev/rules.d/40-usb_modeswitch.rules
# D-Link DWA-171 Wifi Dongle
ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="usb_modeswitch '/%k'"
```

AURにあるRTL8852CUドライバは以下の2つです。
* [rtl8852cu-git](https://aur.archlinux.org/packages/rtl8852cu-git)
* [rtl8852cu-dkms-git](https://aur.archlinux.org/packages/rtl8852cu-dkms-git)

上記のAURはいずれも以下のリポジトリを参照します。
https://github.com/lwfinger/rtw8852cu
しかしWI-U3-2400XE2への対応は、PRまでは作成されているもののマージはされておらず未完了です。
https://github.com/lwfinger/rtw8852cu/pull/27
そこでPR作成者がフォークしたリポジトリを使い、ドライバをビルドします。
https://github.com/0xNOY/rtw8852cu

RealtekのLinuxドライバについてインターネットで検索すると、`rtw_switch_usb_mode`でUSBの速度を切り替える方法について解説している情報がヒットします。
このドライバも説明はないですが、同様の方法で切り替え可能なことがソースコードから見て取れます。

```c:os_dep/linux/usb_intf.c:L527
	/* registry not allow driver to switch usb mode */
	if (registry_par->switch_usb_mode == 0)
		goto exit;
	else if (registry_par->switch_usb_mode == 1 && pusb_data->usb_speed < RTW_USB_SPEED_SUPER)
		 ret = rtw_phl_cmd_force_usb_switch(dvobj->phl, RTW_USB_SPEED_SUPER, HW_BAND_0, PHL_CMD_DIRECTLY, 0);
	else if (registry_par->switch_usb_mode == 2 && pusb_data->usb_speed >= RTW_USB_SPEED_SUPER)
		 ret = rtw_phl_cmd_force_usb_switch(dvobj->phl, RTW_USB_SPEED_HIGH, HW_BAND_0, PHL_CMD_DIRECTLY, 0);
```

## 802.11axでの通信が出来ない（未解決）

どういう理由か6GHz帯が利用が出来ず、802.11axによる通信が出来ません。
ドライバが使用するチャンネルを[アメリカ仕様](https://en.wikipedia.org/wiki/List_of_WLAN_channels#6_GHz_(802.11ax_and_802.11be))にすると6GHz帯も使えるのですが、電波法的に問題ありと思われます。
```text:/etc/modprobe.d/10-8852cu.conf
options 8852cu rtw_switch_usb_mode=1 rtw_country_code=US
```
そもそも日本で使えるチャンネルが一部使えなくなるので、解決策とは言い難いです。
`rtw_country_code=JP`は効果無しでした。