複天一流:どんな手を使ってでも問題解決を図るブログ

宮本武蔵の五輪書の教えに従い、どんな手を使ってでも問題解決を図るブログです(特に、科学、数学、工学の問題についてですが)

ASUSノートPCをHackintoshにする(part 3): Raspberry PI OS DesktopでASUSのWiFi設定(Realtek 8821CE chip)

前回のあらすじ

5万円未満の激安ASUSノートPC(E410KA-EK207WS)は非力すぎてWindows 11が快適に利用できず、Linuxマシン、そして可能であればHackintoshとして生まれ変わらせるためのプロジェクトを始めた我々であった。が、予想以上の様々な困難が生じ、その進捗はなかなかはかどらなかった。それでも粘っていろいろやってみた結果、なんとかUSB flash memoryによるブートに成功。その後、Debian 11(bullseye)ベースのLinux distributionである、Raspberry PI OS DesktopをSDカードにインストールすることにも成功した。ところが、ASUSマザーボードに組み込まれているWiFiチップのドライバがない、という問題に突き当たり、ネットワークにRaspberry PI Desktopを繋げた状態で利用できないことが判明したのであった。

今回はこの問題解決について考察を行う。

Realtek RTL8821CE WLAN chipとは

大雑把な説明はRealtekのHPに書かれている。 www.realtek.com

WiFiの機能をコンピュータに持たせるマイクロチップであるが、マザーボードに組み込んでしまえるほど小さくなったという。記憶装置ですら、eMMCとしてマザーボードに組み込んでしまうのが現代の薄型ノートPCである。WiFiのチップがあったって不思議ではない。

もちろん、買ってきた状態のままWindows 11を使い続けていれば何の問題もない。しかし、メーカーが想定していない使い方をし始めた途端に、ドライバという面倒な問題が持ち上がってくるのだ。メーカーの中にはEPSONVAIOのようにLinuxへの変更を想定しているところもあり、ドライバが無料で公開されている場合もある。しかし、RealtekASUSはそうではなかったということだ。

Linuxが流行り始めた頃、つまりバブルの頃からその破綻にかけての時代、あるいは富士通のFMVが日本で大流行りし、そこにDoomをインストールして無料で楽しんでいたバブル崩壊後の数年後くらいまでの時代においては、ドライバをいかに組み込むかがLinux利用の大きなポイントだった。lsmodを利用して組み込まれたモジュールを調べたり、いろいろやったものである。しかし、その後21世紀になってから、世界的なLinux普及の時代がやってきて、メーカーの協力もあって、ドライバ探し、あるいはドライバ作成の動きは止まった。自分でやらなくてもディストリビューションの中にデフォルトで入っているものだけでなんとかなったのだ。

久しぶりにLinuxを導入して、再びドライバの問題にぶち当たるとは予想外であった。しかもRealtekとは!この会社は昔はモデムのチップで有名であって、やはりLinux用のドライバを巡っていろいろとやった記憶がある。WiFiのチップメーカーとして生き残っていたとは。

そこで昔のようにいろいろとググってみることにした。

Linux用のRTL8821CEのドライバ

どうもこの問題はLinuxユーザーにとっては「有名な」問題だったようで、ググるといろいろと情報が出てきた。

最初の情報

まず見つかったのはこちらのHPである。

miloserdov.org

この解説記事はとても参考にはなったのだが、最終的な解決はもたらしてくれない。その理由を時系列に沿って以下で説明しよう。

まずは、Linuxカーネルのブート時に、マザーボードや周辺機器の情報を探るので(利用できるかどうかは無関係)、その情報を確認してみようというアドバイスが書かれている。RealtekチップセットRTL8821CEはPCI機器に属するらしい(これは昔の差し込みボードと同じカテゴリだ)。

lspci | grep Network

とやってみよ、という。lspciはdmesgのようなもので、PCI周辺機器に特化したブート情報を表示してくれるのであろう。man lspciとやると、

lspci - list all PCI devices

と出た。上のコマンドはPCIバイスの中でNetwork関連のものだけを抜き出せ、という意味になる。やってみると、

01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8821CE 802.11ac PCIe Wireless Network Adapter

という結果が出た。つまり、ASUSがRTL8821CEのマイクロチップを利用していることが確認できたのである。 ということで、これからは腹をくくってRTL8821CE用のドライバーを組み込まねばならないことが明らかとなった。

ちなみに、lspciに類似のコマンドで、lsusbというのがある。これをやるとUSB接続の機器がすべてリストアップされる。やってみたら、今まで気がつかなかったのだが、小型のカメラが内蔵されていることがわかった。よくみてみたらスクリーンの上真ん中に小さなレンズがついていた。これをRaspberry PI OS desktopで動かすには、また別のドライバが必要となることであろう。この問題は緊急ではないので、しばらくは放っておくことにする。(しかし、どうやらLinuxユーザーたちはこのWebCamのドライバをすでに書いて公開しているようである。)

情報を読み進めると、次のステップとしてはRTL8821CEのドライバを含むdebianパッケージをネットに繋がった別のマシンを使ってダウンロードし、USBフラッシュメモリなどを利用してASUSにコピーせよ、とある。対象となるのは、

rtl8821ce-dkms_5.5.2.1-0ubuntu4_all.deb

という名前のファイルである。情報にはURLがフルパスで書いてあるので、これをダウンロードすることはできた。USBメモリにコピーし、ASUSのRapsberry PI OS desktopにコピーする。このファイルを展開するには

sudo apt install ./rtl8821ce-dkms_5.5.2.1-0ubuntu4_all.deb

とやる。すべての依存関係に問題がなければスッとインストールされるはずであるが、問題が生じると不足分をネットワークを通じてダウンロードしようとするはずで、その段階でインストール手続きはエラーメッセージを吐いて止まってしまうだろう。神に祈りながら、展開コマンドを叩く。そして、案の定、エラーが出たのである。しかし、その理由は意外なものであった。

dpkg-deb: Error: .... 'control.tar.zst'は未知の圧縮を利用しています。終了します。

どうやら, debianパッケージのなかに、zstという形式で圧縮されたファイルがあり、それを展開できないのである。zstは、zstdというコマンドによって制御される圧縮技術のようである。つまり、Raspberry PI OSにはこのコマンドがインストールされてないのである。

そこで同じようにして、別のネットワーク接続されたマシンで、zstd_1.4.8+dfsg-2.1_amd46.debというパッケージをダウンロードしてきて、ASUSにコピーし、これに対してapt installをかけてみたのである。そうすると、無数の依存性関連のエラーが画面を埋め尽くしたのであった!絶望である。こんなたくさんのファイルをいちいちすべてダウンロードして、コピーして、ASUSでローカルにインストールすることなどできっこない。実際に五つくらいは試してみたのだが、その度に新たな依存問題が生成され、もはやお手上げである。

この情報に書かれているやり方では、もう解決は無理そうであった。

二つ目の情報

このHPに書かれている情報だけでは解決できそうもないので、ふたたび検索をかけた。そうすると、githubにドライバのソースファイルが固めておいてあることがわかった。とはいえ、これをどうやって使うのかはよくわからない。githubはあまり使ったことがないのだ。

そこでさらに検索を進めると、二つ目の情報ファイルが見つかった。いわゆる「メッセージボードによる質問フォーラム」である。しかもDebianのユーザーによるものであり、これはドンピシャな解決法が期待できる、と小躍りしたのである。

forums.debian.net

このフォーラムに書かれていたのは、実際にはgithubの利用法についてであった。先に見つけたgithubから、必要なファイルを一括転送し、ソースコードコンパイルしてインストールする手段である。まずは、ネットワークに繋がったマシンでファイルの一括転送を行い、それをUSB flash memoryなどにコピーしてASUSへ移し、そこにいれたRapsberry PI OS desktopでコンパイルするのである。

たとえば、下のgithubプロジェクトに行くと、緑色のCodeというボタンが現れる。 github.com

そのボタンを押すと、関連するgitパッケージのURLが手に入るので、そのアドレスを使ってダウンロードするのだ。具体的には、

git clone https://github.com/tomaspinho/rtl8821ce.git

とする。こうすると、すべてのソースコードがネットワーク接続されたマシンにダウンロードされる。これをコピーしてASUSRaspberry PI OS desktopに移動させ、そこで

make
make install

とやるのである。これを実行したところ、見事にrtl8821ceのドライバーがインストールされたのである!

恐る恐るWiFi設定のパネルを開くと...おー!電波が来ている。 コマンドラインで確認するときは、

ip link show

で確認できるそうである。ここでwlan0の項目が出ていればWiFiが動き出したことの証明となる。

また、ip addressを確認するには

ip addr show

で確認することもできる。しかし個人的には

ifconfig |grep wlan0
ifconfig | grep broad

を使うことの方が多い。

ということで、あとはパスワードを打ち込んで接続完了である。

Web browserを開くと、ちゃんと閲覧することもできた!

そして、さっそくgfortranとg++、それにtexliveをダウンロードして、システムに組み込んだのである。このとき、若干の注意が必要である。特に最初のパッケージを展開するときは、

sudo apt update
sudo apt install gfortran

とするべきである。つまり、依存性の最新状況を反映させてからインストールするとエラーが防げる。

以上をもって、ASUSノートPCにRaspberry PI OS (desktop)をインストールし、利用することを目指すプロジェクトは完了である。大成功であった。

ただし、この状態では日本語は読めるのだが、書けない。この状況を打破するには、次の情報を利用して設定する必要があるが、今回は省略する。

tamnology.com