ThinkPad X220の無線LANカードをIntel 9260NGWに換装
ThinkPad X220に標準で搭載されている無線LANカードとBluetoothドーターカードでは、IEEE 802.11a/b/g/n、Bluetooth 2.0までしかサポートされていない。
そこで、これらをIntel 9260NGWに換装し、IEEE 802.11a/b/g/n/ac + Bluetooth 5に対応させる。
購入した商品
商品 | 価格 |
---|---|
Intel 9260NGW | $14.62 |
Fenvi M.2 NGFF Key A to Mini PCI E PCI Express Converter Adapter | $5.99 |
IPEX 4 IPEX MHF4 Gen4 UFL Female to IPEX 1 Connector Jack Male Pin | $3.68 |
最新の公式BIOSにアップデート
Intel 9260NGWを換装する前に、BIOSを最新のものにアップデートしておく。
この記事に沿って作業する。
- LinuxでThinkPad X220のBIOSをアップデートする - paz3のおもいつき
- How to update Lenovo BIOS from Linux without using Windows - nixCraft
ここからX220の最新のBIOS(1.4.6)をダウンロードする。
https://support.lenovo.com/jp/ja/downloads/DS018807
imgを作成する。
$ geteltorito.pl -o x220_bios.img 8duj31jp.iso
USBを挿してimageを書き込む。
$ sudo dd if=x220_bios.img of=/dev/sdb bs=64K
USBをX220に挿して起動する。起動画面でF12を押してUSBから起動し、「システム・プログラムの更新」を行う。
更新が終わり再起動し、F1でBIOS設定画面に入り、BIOSのバージョンが1.4.6になっていることを確認する。
もしくは以下をダウンロードしてWindows PEから実行、でもいいはず。(LinuxからのWindows PE環境の作成方法についてはこの記事を参照)
BIOS アップデート ユーティリティ (Windows 8 32bit, 64bit/ 7 32bit, 64bit/ Vista 32bit, 64bit/ XP) - ThinkPad X220, X220i, X220 Tablet - JP
Intel 9260NGWへの換装
キーボードの取り外しなどは、LenovoのThinkPad X220 ハードウェア保守マニュアルに則って行う。
購入したIntel 9260NGWと、変換アダプタ、アンテナ変換ケーブル。
元々挿さっている無線LANカードのIntel Centrino Advanced-N 6205とBluetoothドーターカードのBroadcom BCM2045Bを抜いて、Intel 9260NGWを挿す。
ただし、この状態で電源を入れると、公式BIOSのホワイトリストに阻まれて起動できない。
カスタムBIOSに変更する
公式BIOSのホワイトリストを回避して、Intel 9260NGWで起動できるようにBIOSをカスタムBIOSに変更する。
以下の記事を参考にして、USB起動のWindows PEから最新のBIOS(1.46)に更新し、カスタムBIOSのパッチを当てる。
Windows PEのUSBイメージの作成方法については以下を参照する。
Resources - ThinkPad X220 の "BIOS / FIRMWARE > WHITELIST REMOVED + ADVANCED MENU BIOS"の手順に従ってBIOSを入れ替える。
カスタムBIOSのX220_v1.46_Modified_BIOS.zipを以下からダウンロードする。
BIOS - ThinkPad X220
カスタムBIOS更新のための実行ファイルを含んだWindows PEイメージを作成する。
$ sudo mkdir /mnt/waik $ sudo mount KB3AIK_EN.iso /mnt/waik $ unzip X220_v1.46_Modified_BIOS.zip $ mv Lenovo\ X220\ v1.46\ Modified\ BIOS/ mod_bios $ mkwinpeimg --waik-dir=/mnt/waik --overlay=${PWD}/mod_bios winpe.img :: Copying primary boot files from the Windows Automated Installation Kit (/mnt/waik, X86 :: Extracting boot.wim from "/mnt/waik/WinPE.cab" :: Overlaying "/home/ryo/Downloads/bios/mod_bios" on the Windows PE filesystem :: Rebuilding WIM with changes made :: Making disk image "winpe.img" The image (winpe.img) is 139730944 bytes.
作成したイメージをUSBに焼く。
$ sudo dd if=winpe.img of=/dev/sdb bs=64K 2132+1 records in 2132+1 records out 139730944 bytes (140 MB, 133 MiB) copied, 15.3978 s, 9.1 MB/s $ sync
Windows PEを書き込んだUSBをX220に挿したまま電源を入れ、起動画面でF12を押して、USBから起動する。
WIndows PEが立ち上がる。
X直下まで移動し、LenovoカスタムBIOSのディレクトリに入り、flash.batを実行する。
実行中に3回くらいVerifyエラーになったが、その後通った。
再起動後、BIOSを確認するとAdvancedの項目が増えており、カスタムBIOSに変更できていることがわかる。
Linuxのlspciコマンドから、intel 9260が見えていることがわかる。
Intel 9260NGWを認識させる
lspciでIntel 9260NGWのモジュールは見えているが、ip linkでinterfaceが見えない。
$ lspci -k 03:00.0 Network controller: Intel Corporation Wireless-AC 9260 (rev 29) Subsystem: Intel Corporation Wireless-AC 9260 Kernel modules: iwlwifi $ ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
dmesgを確認すると、iwlwifiドライバのloadでエラーが出ているのがわかる。
$ dmesg | grep "iwlwifi" [ 5.264385] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-46.ucode failed with error -2 [ 5.264407] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-45.ucode failed with error -2 [ 5.264424] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-44.ucode failed with error -2 [ 5.264442] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-43.ucode failed with error -2 [ 5.264459] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-42.ucode failed with error -2 [ 5.264474] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-41.ucode failed with error -2 [ 5.264491] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-40.ucode failed with error -2 [ 5.264507] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-39.ucode failed with error -2 [ 5.264525] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-38.ucode failed with error -2 [ 5.264542] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-37.ucode failed with error -2 [ 5.264559] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-36.ucode failed with error -2 [ 5.264575] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-35.ucode failed with error -2 [ 5.264593] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-34.ucode failed with error -2 [ 5.264609] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-33.ucode failed with error -2 [ 5.264625] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-32.ucode failed with error -2 [ 5.264641] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-31.ucode failed with error -2 [ 5.264659] iwlwifi 0000:03:00.0: Direct firmware load for iwlwifi-9260-th-b0-jf-b0-30.ucode failed with error -2 [ 5.264662] iwlwifi 0000:03:00.0: no suitable firmware found! [ 5.265300] iwlwifi 0000:03:00.0: minimum version required: iwlwifi-9260-th-b0-jf-b0-30 [ 5.266585] iwlwifi 0000:03:00.0: maximum version supported: iwlwifi-9260-th-b0-jf-b0-46 [ 5.267823] iwlwifi 0000:03:00.0: check git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
以下の情報を参考に、intel 9260NGWのFirmwareを入れる。
drivers - Ubuntu 18.04 cannot recognized Intel Wireless-AC 9260 - Ask Ubuntu
$ yay -S linux-firmware
これで再起動後に、wlp3s0のwlanインターフェースが見えるようになる。
$ lspci -k 03:00.0 Network controller: Intel Corporation Wireless-AC 9260 (rev 29) Subsystem: Intel Corporation Wireless-AC 9260 Kernel driver in use: iwlwifi Kernel modules: iwlwifi $ ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff 3: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
この後に、 wicd
と bluetoothctl
を使用してWi-Fiへの接続及び、Bluetoothデバイスへのペアリングができることを確認した。
その他留意点
参考
ThinkPad X220 Full HDディスプレイ化
X220/X230 FHD mod kit (rev.6)を使って、ThinkPad X220のディスプレイをFull HDディスプレイに換装する。
ディスプレイの分解までは、LenovoのThinkPad X220 ハードウェア保守マニュアルに則って分解する。
X220 FHD mod kitの実装手順については、FHD mod kit overview and installation guideを参照する。
購入した商品
商品 | 価格 |
---|---|
X220/X230 FHD mod kit (rev.6) | $49.99 |
LG LP125WF2-SPB3 IPS Full HD | $68.00 |
Full HDディスプレイ換装
届いたFull HDディスプレイ。
マザーボードのカバーを切り取る。
X220 Core i7のマザーボードの場合はR318の抵抗を取り除く。
これがX220 FHD mod kit。
X220のマザーボードとFHD mod kitをジャンパでつなげる。同時にFHD mod kitの上部7箇所をマザーボードと半田づけする。
電源用の配線をする。
元々のディスプレイを取り外し、Full HDディスプレイを繋げる。
電源を入れると、Full HDディスプレイに起動画面が表示される。
Linux側からFull HDで見えていることがわかる。
ここで、ThinkPadロゴの起動画面やBIOS画面が暗い・映らないときには、FHD mod kitとマザーボードの半田づけ不良の可能性があるのでやり直してみるといい。
他にもFull HDディスプレイをディスプレイカバーに収めるために、ディスプレイパネルを切ったり、ディスプレイカバーを切ったりする。
ディスプレイが収まった。
Linuxの設定
Fakeディスプレイをミラーリング設定にする
X220/X230 FHD mod kitのページに以下の記述がある。
X220/X230 FHD mod kit (rev.6)
Q: Does the brightness control work?
A: Brightness control does work in dual display mode: FHD display + fake display for brightness control (appears as "Dummy Display"). Otherwise brightness is fixed at 100%. Linux users can apply this kernel patch. BIOS (or coreboot) patch is required to overcome this limitation (I'm working on it sorry, I don't have time for that).
FHD mod kitを使ってFull HDディスプレイを接続すると、確かにLVDS-1とDP-3の2つのディスプレイがLinuxから見える。
$ xrandr Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 8192 x 8192 LVDS-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 480mm x 270mm 1920x1080 60.03*+ 59.93 1680x1050 59.88 1400x1050 59.98 ... 320x240 60.05 360x202 59.51 59.13 320x180 59.84 59.32 VGA-1 disconnected (normal left inverted right x axis y axis) HDMI-1 disconnected (normal left inverted right x axis y axis) DP-1 disconnected (normal left inverted right x axis y axis) HDMI-2 disconnected (normal left inverted right x axis y axis) HDMI-3 disconnected (normal left inverted right x axis y axis) DP-2 disconnected (normal left inverted right x axis y axis) DP-3 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 276mm x 156mm 1920x1080 60.03*+
LVDS-1がプライマリディスプレイ扱いになっているが、実際のFull HDディスプレイに表示されるのはDP-3の方となる。(つまり、LVDS-1がFakeディスプレイとなる)
また、Full HDのディスプレイの輝度コントロールは以下のように行えるが、これはFakeディスプレイのLVDS-1がアクティブになっていないと制御できない。
$ sudo tee /sys/class/backlight/intel_backlight/brightness <<< 50
よって、ディスプレイ映像を出力するためにはDP-3が必要、輝度コントロールするためにはLVDS-1が必要となり、どちらもアクティブにしておかなくてはならない。
(LVDS-1の出力を無効にすると、Full HDディスプレイは常に最大輝度で表示されるようだ)
FakeディスプレイのLVDS-1で拡張されていると、存在しないディスプレイにマウスが移動してしまって混乱のもとになるので、.xinitrcの中で以下のコマンドを実行してX起動時にミラーリング設定を行う。
xrandr --output DP-3 --auto --primary --output LVDS-1 --auto --same-as DP-3
これでFakeディスプレイがミラーリングされ、ディスプレイが1つにまとまるようになる。
フタを閉じたときにサスペンドさせる
もともとsystemd-logindの HandleLidSwitch=suspend
の設定で、ThinkPadのフタを閉めたときにサスペンドするように設定していた。
電源管理 - ArchWiki
/etc/systemd/logind.conf
HandleLidSwitch=suspend
しかし、Full HDディスプレイ化してから、フタを閉じてもサスペンドしなくなっていた。
これは、FullHDディスプレイにするとディスプレイがLVDS-1とDP-3の2つが見えている状態になっており、HandleLidSwitchが実行されなくなっているためだ。
電源管理 - ArchWiki
外付けモニターが接続されている場合、フタが閉じられても HandleLidSwitch オプションはアクションを実行しません。
そこで、systemd-logindのHandleLidSwitchからサスペンドするのは諦めて、acpiイベントから直接サスペンドするように設定する。
acpi_listen
すると、フタを閉じたときには、 button/lid LID close
のイベントが呼ばれているのがわかる。
acpiにフタ閉じ検出イベントとそのハンドラを追加するために、以下2つのファイルを作成する。
/etc/acpi/events/lid_close
event=button/lid LID close action=/etc/acpi/handlers/sleep
/etc/acpi/handlers/sleep
#!/bin/env sh systemctl suspend
ハンドラに実行権限をつけて、acpidを再起動する。
$ sudo chmod a+x /etc/acpi/handlers/sleep $ sudo systemctl restart acpid
これでフタを閉じたらサスペンドされるようになった。
参考記事
- X220 X230 FHD化 組み込み | 電脳処方的絵巻 ←半田づけの前処理などはこちらを参考に。
ThinkPad X220マザーボード換装
ThinkPad X220のマザーボードを換装して、Core i5-2520MからCore i7-2640Mにアップグレードする。
LenovoのThinkPad X220 ハードウェア保守マニュアルに則って分解する。
購入した商品
商品 | 価格 |
---|---|
ThinkPad motherboard core i7-2640M | $56.66 |
ドイツ Thermal Grizzly社製 オーバークロック用特別設計高性能熱伝導グリス Kryonaut 1g | ¥1,136 |
マザーボード換装
届いたマザーボードがこれ。
ThinkPad X220を分解する。
マザーボードの比較。
もともと付いていたグリスを取る。
高性能熱伝導グリスを塗る。
組み立てる。
電源を入れると、起動画面が立ち上がる。
起動すると、時刻情報が消えていてRTCエラーが出るのでBIOS設定から時刻情報を設定する。
また、BIOSの情報からCPUがCore i7-2640Mになっていることが確認できる。
再起動して、Linuxを起動する。
USB3.0も使えるようになった。
ThinkPad X220のカスタム
ThinkPad X220のキーボードが好きだ。
ThinkPad A285を買ったが、やはりX220のキーボードを打ちたくなる。
ただX220は今となっては、解像度は低いし、802.11 acやBluetooth 4以降に対応していないし、手元にあるCore i5モデルだとUSB3.0もついてないし、そして重い。
そこでX220に以下の改造を施して延命させることにする。
改造項目
- マザーボード換装: Core i5マザーボードからCore i7-2640Mマザーボードに交換
- Full HDディスプレイ換装
- Intel 9260NGW (Wi-Fi IEEE802.11ac + Bluetooth 5) 換装
- USB PD充電
それぞれの記事のリンクを以下に貼っていく。
USB PD充電化については、後日追加予定。
LinuxでWindows PEのLive USBを作る
BIOSの更新プログラムや、CPUのファームウェアの更新プログラムはWindowsしかサポートしていないものが多い。
PC環境がLinuxしかない場合、以下のような記事に従い、isoをUSBに書き込むことでBIOSのアップデートができる。
How to update Lenovo BIOS from Linux without using Windows - nixCraft
しかし、ベンダーから exe しか提供されていない場合に詰む。
そこで、USBから起動できるWindows PE(プレインストール)環境を使って、exe を実行する環境を構築する。
なお、作業環境はArchLinuxのため、パッケージのインストール方法などは各ディストリビューションのものに置き換えること。
必要なパッケージをインストールする。
$ yay -S fuse2 cdrtools cabextract wimlib $ yay -S syslinux mtools
Windows PEのイメージ(KB3AIK_EN.iso)を以下からダウンロードする。
Download The Windows® Automated Installation Kit (AIK) for Windows® 7 from Official Microsoft Download Center
(Windows PE - ArchWiki)
Windows PEのLive USBを以下の手順で作成する。
$ sudo mkdir /mnt/waik $ sudo mount KB3AIK_EN.iso /mnt/waik $ mkwinpeimg --waik-dir=/mnt/waik --overlay=${USER_DIR} :: Copying primary boot files from the Windows Automated Installation Kit (/mnt/waik, X86 :: Extracting boot.wim from "/mnt/waik/WinPE.cab" :: Overlaying "/home/ryo/Downloads/bios/mod_bios" on the Windows PE filesystem :: Rebuilding WIM with changes made :: Making disk image "winpe.img" The image (winpe.img) is 139730944 bytes. $ sudo umount /mnt/waik $ sudo dd if=winpe.img of=/dev/sdb bs=64K 2132+1 records in 2132+1 records out 139730944 bytes (140 MB, 133 MiB) copied, 15.3978 s, 9.1 MB/s $ sync
以下の --overlay=
オプションでディレクトリを指定することで、そこに含まれるファイルがWindows PEのXドライブ直下に配置される。
$ mkwinpeimg --waik-dir=/mnt/waik --overlay=${USER_DIR}
ThinkPad X220の場合、作成したUSBを挿したまま電源を入れ、起動画面でF12を押して起動ディスクにUSBを指定するとWIndows PEが立ち上がる。
Xドライブ直下まで移動し、適宜実行ファイルを実行する。
なお、以下のコマンドでWindows PEの電源を落とせる。
> wpeutil shutdown