2025/08/12(火) [n年前の日記]
#2 [linux][ubuntu] サブPC A8-3850機のNICやWi-Fi関係を設定
サブPC A8-3850機を Ubuntu 20.04 LTS から 24.04 LTS にしたところ、無線LAN子機がネットワークに接続できない状態になってしまったので、関連設定を色々試した。
ちなみに、Ubuntu Linux 20.04 LTS の頃に行った作業は以下。
_mieki256's diary - Ubuntu 20.04 LTS上でr8169ドライバが使われてしまう問題
_mieki256's diary - ELECOM WDC-300SU2SWH を Ubuntu 20.04 で利用
ちなみに、Ubuntu Linux 20.04 LTS の頃に行った作業は以下。
_mieki256's diary - Ubuntu 20.04 LTS上でr8169ドライバが使われてしまう問題
_mieki256's diary - ELECOM WDC-300SU2SWH を Ubuntu 20.04 で利用
◎ 有線LANの設定 :
A8-3850機のM/B は GIGABYTE GA-A75M-UD2H (rev. 1.0) なので、有線LAN用のチップは Realtek RTL8111E が使われている。以前の日記上では間違って Realtek RTL8111C と書いてしまったようだけど、本当は RTL8111E だった…。
_GA-A75M-UD2H (rev. 1.0) スペック | マザーボード - GIGABYTE Japan
RTL8111E は、Linuxの場合 r8168 ドライバを使えば利用できるようになるらしい。それについては以前の作業を繰り返してみたところ、LANに接続できるようになった。
/etc/modprobe.d/r8168-dkms.conf 内の特定の行のコメントアウトを外して、r8169ドライバが使われないように指定する。
sudo reboot で再起動。
lsmod と打って、もしも r8169 が表示されていたら相変わらず誤認識されてる。r8168 が表示されていたらOK。
_GA-A75M-UD2H (rev. 1.0) スペック | マザーボード - GIGABYTE Japan
RTL8111E は、Linuxの場合 r8168 ドライバを使えば利用できるようになるらしい。それについては以前の作業を繰り返してみたところ、LANに接続できるようになった。
sudo apt install r8168-dkms sudo vi /etc/modprobe.d/r8168-dkms.conf
/etc/modprobe.d/r8168-dkms.conf 内の特定の行のコメントアウトを外して、r8169ドライバが使われないように指定する。
#blacklist r8169 ↓ blacklist r8169
sudo reboot で再起動。
lsmod と打って、もしも r8169 が表示されていたら相変わらず誤認識されてる。r8168 が表示されていたらOK。
$ lsmod | grep r8 r8168 675840 0
◎ 無線LAN子機の設定 :
今回使いたい USB接続の無線LAN子機は、ELECOM WDC-300SU2SWH (WDC-300SU2S)。使用チップは Realtek RTL8192CU らしい。
本当なら、RTL8192CU を使っている無線LAN子機は rtl8xxxuドライバを使うと安定動作するらしいのだけど、rtl8xxxu ドライバに WDC-300SU2S のIDは記述されていないので、認識してくれない…。
ベンダーID(メーカー名を示すID)とプロダクトID(製品型番を示すID)を確認。
WDC-300SU2S のID は `056e:4009` らしい。このIDが出てきたらこのドライバを使え、とLinuxに指定できれば、WDC-300SU2S をLinuxで使えるようになる。
Linuxのカーネルには rtl8192cu というドライバが入ってるらしいけど、このドライバはちゃんと動作しないというのが定評で…。別のドライバを使うようにアレコレしないといけない。
ググっていたら、昨今は rtl8*-dkms というパッケージがPPAで配布されていると知った。利用させてもらおう…。
_How to Install Realtek Wifi Drivers in Ubuntu 22.04 | Linux Mint 22/21 - FOSTips
_kablosuz-wireless : Butterfly
リポジトリを追加。
rtl8192cu-dkms というパッケージがあるか確認。
インストールしてみる。
rtl8192cu ドライバをロード。
rtl8192cu というディレクトリがあるのでロードできたのかな。
WDC-300SU2S のIDを、/sys/bus/usb/drivers/rtl8192cu/new_id に追記する。
この状態にしたら、無線LAN子機が即座に認識された。iwconfig で状態を確認。wlx* という機器?が増えている。
認識はされたけれど、OSを再起動するとこのあたりの設定は初期化されてしまうらしいので永続化したい。さて、どうすればいいのやら。
/etc/modules にモジュール名を記述しておけば、必ずロードされるようになるのだろうか? 分からないけど。
/etc/rc.local を作成してみる。OS起動時に、このファイルを実行するように設定することができるらしい。
WDC-300SU2S のIDを /sys/bus/usb/drivers/rtl8192cu/new_id に追記する処理を記述。
/etc/rc.local の最後に exit 0 を記述している事例も見かけたけれど、今回それを書いてしまうと、rc-local.service とやらで不具合が出たので記述しないことにした。
rc-local とやらを再起動。
_Ubuntu 20.04 LTS でも rc.local は使える systemd - Qiita
_ubuntu 18.04 で rc.local を使う Ubuntu - Qiita
sudo reboot でOSを再起動して、WDC-300SU2S が認識されているのか確認。
デスクトップのタスクバー上にあるネットワーク接続アイコンをクリックして、ルータに接続するための設定を入力。
ただ、この作業でロードされる rtl8192cu って、カーネルが持っているという、古いドライバだったりしないのだろうか…? 本当に rtl8192cu-dkms で導入した版が使われているのだろうか? そのことをどうやって確認すればいいのだろう…?
本当なら、RTL8192CU を使っている無線LAN子機は rtl8xxxuドライバを使うと安定動作するらしいのだけど、rtl8xxxu ドライバに WDC-300SU2S のIDは記述されていないので、認識してくれない…。
ベンダーID(メーカー名を示すID)とプロダクトID(製品型番を示すID)を確認。
$ lsusb ... Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 002: ID 056e:4009 Elecom Co., Ltd WDC-300SU2S Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub ...
WDC-300SU2S のID は `056e:4009` らしい。このIDが出てきたらこのドライバを使え、とLinuxに指定できれば、WDC-300SU2S をLinuxで使えるようになる。
Linuxのカーネルには rtl8192cu というドライバが入ってるらしいけど、このドライバはちゃんと動作しないというのが定評で…。別のドライバを使うようにアレコレしないといけない。
ググっていたら、昨今は rtl8*-dkms というパッケージがPPAで配布されていると知った。利用させてもらおう…。
_How to Install Realtek Wifi Drivers in Ubuntu 22.04 | Linux Mint 22/21 - FOSTips
_kablosuz-wireless : Butterfly
リポジトリを追加。
sudo add-apt-repository ppa:kelebek333/kablosuz sudo apt update
rtl8192cu-dkms というパッケージがあるか確認。
$ sudo aptitude search 8192cu i rtl8192cu-dkms - rtl8192cu driver in DKMS format.
インストールしてみる。
sudo apt install rtl8192cu-dkms
rtl8192cu ドライバをロード。
sudo modprobe rtl8192cu
$ ls -al /sys/bus/usb/drivers/ 合計 0 drwxr-xr-x 7 root root 0 8月 12 01:03 . drwxr-xr-x 4 root root 0 8月 12 01:03 .. drwxr-xr-x 2 root root 0 8月 12 01:03 hub drwxr-xr-x 2 root root 0 8月 12 01:04 rtl8192cu drwxr-xr-x 2 root root 0 8月 12 01:03 usb drwxr-xr-x 2 root root 0 8月 12 01:03 usbfs drwxr-xr-x 2 root root 0 8月 12 01:03 usbhid
rtl8192cu というディレクトリがあるのでロードできたのかな。
WDC-300SU2S のIDを、/sys/bus/usb/drivers/rtl8192cu/new_id に追記する。
$ echo "056E 4009" | sudo tee /sys/bus/usb/drivers/rtl8192cu/new_id
この状態にしたら、無線LAN子機が即座に認識された。iwconfig で状態を確認。wlx* という機器?が増えている。
$ iwconfig
lo no wireless extensions.
enp1s0 no wireless extensions.
wlxXXXXXXXXXXXX IEEE 802.11bgn ESSID:"XXXXX-XXXXXX-g" Nickname:"<WIFI@REALTEK>"
Mode:Managed Frequency:2.462 GHz Access Point: XX:XX:XX:XX:XX:XX
Bit Rate:144.4 Mb/s Sensitivity:0/0
Retry:off RTS thr:off Fragment thr:off
Power Management:off
Link Quality=100/100 Signal level=100/100 Noise level=0/100
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
認識はされたけれど、OSを再起動するとこのあたりの設定は初期化されてしまうらしいので永続化したい。さて、どうすればいいのやら。
/etc/modules にモジュール名を記述しておけば、必ずロードされるようになるのだろうか? 分からないけど。
echo "rtl8192cu" | sudo tee -a /etc/modules
/etc/rc.local を作成してみる。OS起動時に、このファイルを実行するように設定することができるらしい。
sudo touch /etc/rc.local sudo chmod 700 /etc/rc.local sudo vi /etc/rc.local
WDC-300SU2S のIDを /sys/bus/usb/drivers/rtl8192cu/new_id に追記する処理を記述。
#!/bin/sh echo "056E 4009" > /sys/bus/usb/drivers/rtl8192cu/new_id
/etc/rc.local の最後に exit 0 を記述している事例も見かけたけれど、今回それを書いてしまうと、rc-local.service とやらで不具合が出たので記述しないことにした。
rc-local とやらを再起動。
_Ubuntu 20.04 LTS でも rc.local は使える systemd - Qiita
_ubuntu 18.04 で rc.local を使う Ubuntu - Qiita
sudo systemctl restart rc-local.service sudo systemctl status rc-local.service
sudo reboot でOSを再起動して、WDC-300SU2S が認識されているのか確認。
デスクトップのタスクバー上にあるネットワーク接続アイコンをクリックして、ルータに接続するための設定を入力。
ただ、この作業でロードされる rtl8192cu って、カーネルが持っているという、古いドライバだったりしないのだろうか…? 本当に rtl8192cu-dkms で導入した版が使われているのだろうか? そのことをどうやって確認すればいいのだろう…?
◎ dkmsって何だろう :
dkms というワードを目にするけれど、コレって何だろう…?
_動的カーネルモジュールサポート - ArchWiki
Dynamic Kernel Module Support の略らしい。
カーネルに後から何かしらを追加できる機能とでも思っておけばいいのだろうか?
_動的カーネルモジュールサポート - ArchWiki
Dynamic Kernel Module Support の略らしい。
Dynamic Kernel Module Support (DKMS) はカーネルのソースツリーの外にソースが存在する Linux カーネルモジュールの生成を可能にするプログラム/フレームワークです。新しいカーネルがインストールされたときに DKMS モジュールは自動的にリビルドされます。
カーネルに後から何かしらを追加できる機能とでも思っておけばいいのだろうか?
[ ツッコむ ]
以上です。