Linux on ASUS Zephyrus G14 のハナシ

PUBLISHED ON 2020-07-05 — LINUX

どうも僕です。

XPS13 のバッテリーがへたってしまい、その上勝手にスリープしたりどうしようもなくなったので、新しいマシンを調達することにしました。

私はココ数年、 XPS13 を使っていたのですが、丁度、噂の Zephyrus G14  がクーポンで割引購入できるようになってたので購入しました。

ROG Zephyrus G14 の詳細はこちら

Zephyrus G14 のスペックなどの細かい部分は書きませんが、背面の LED のオプションを外せば CPU 8 コア/16 スレッドのマシンが 20 万でお釣りが来るのでコスパ大変良いと言えます。 何より Ryzen マシンを手に入れたいう満足感が大きいです。

このモデルはやはり人気が高く初回生産分はあっという間に売り切れたそうです。人気の高さに合わせて COVID-19 の関係で手元に届くまで 1 ヶ月かかりました。

私はここ数年いつも Windows と Linux とのデュアルブートをセットアップしていますが、ASUS のマシンで、しかも最新機で Linux のサポートがどれだけされているのかも気になりました。

そこで今回は、Zephyrus 上で Linux がどれだけ動作するかレポートしたいと思います。

購入を検討している人の手助けになれば幸いです。

あ、あと私は Arch Linux ユーザーです。

Assistant

準備

デュアルブートするにしてもまずはプリインストールされている Windows 10 を起動して下準備をする必要があります。 ハード面での不具合がないかも確認しておきます。BIOS セットアップメニュー(ROG のロゴが出る)で F2 を押すと入れるのでハードに問題がないか軽く見てきましょう

Windows10 の起動

まずは通常通り、Windows 10 を起動し、セットアップします。

ハードウェアの動作確認

簡単にハードウェアの動作確認をします。

ASUS のユーティリティアプリケーションから各種状態が見れるので確認しておきます。

領域の確保

Linux をインストールするための領域を確保します。

コントロールパネルからディスクの管理を選択して Windows のパーティションを小さくします。 昔はこういったパーティションを操作するツールは別途アプリケーションを購入して行う必要がありましたが、現在は Windows 10 の機能として提供されています。 Windows のパーティションを半分くらい減らし、Linux がインストールできる領域を作成しておきます。後ろのリカバリ領域などは間違っても消してはいけません。

グレーになっている空き領域が出来れば OK です。

BIOS などの更新

Windows Update などを使って最新のドライバ、BIOS などをインストールします。

反映には再起動が必要なものもあるのでその場合は必ず再起動しておきます。

その他

Windows 10 で追加でセットアップしたい事があればセットアップしておいても良いです。

あと Arch Linux のインストールメディアがない人も用意しておきます。Arch Linux の iso はできるだけ最新のものを使うことを強く推奨します。 最後に念のため最後に、高速スタートを無効化しておきます。

Arch Linux Install

では次に Arch Linux のインストールを行います。

Secure Boot の無効化

まず BIOS セットアップメニューで Secure Boot を無効化します。

BIOS セットアップメニュー内の移動は少しとっつきにくいかも知れません。Security の項目から辿れるので Secure Boot を無効化して Save します。

BIOS から USB boot

今度はインストールメディアをさして再度起動、BIOS セットアップメニューに入ります。

F8 でブートメニューを起動してインストールメディアからブートします。 UEFI ブートモードで起動できれば OK です。

WiFi の認証

インストールを進めるためにネットワーク接続の設定をします。

私の場合はここで少し問題が出ました。

2020.06.01 のイメージでインストールしていたのですが、WPA2 の認証が何故かできません。Zephyrus は Intel AX200 を採用していますが、Linux でも動作するはずです。がうまくいきませんでした。ちょっと何が足りなかったのかよくわかりませんでしたが、別のパスワードなしの AP を用意し、一旦パスなしで作業することで回避しました。

2020.07.01 のイメージでは改善されているかも知れません。

インストール

あとは通常通りのインストールを行います。

/boot は 200M ぐらいあるので複数のカーネルを切り替えるぐらいの余裕はありそうです。

Zephyrus は Ryzen なので amd-ucode を忘れずにインストールします。 インストール後、systemd-boot などで読み込む設定を追加するのを忘れずに。

デスクトップ環境に GNOME もインストールしておきます。WiFi 周りが不安ですが、とりあえず NetworkManager をインストールしておけばなんとかなります。 GDM を有効にして再起動、ログインまではできるはずです。 GNOME で NetworkManager 経由で WiFi を再度セットアップすると今度は問題なく WiFi 接続できました。

とりあえずインストールのときに気をつけることは

  1. WiFi 接続に問題があることがある

ぐらいです。

その他は困ることなくインストールできると思います。

Zephyrus の設定

インストール後、追加で設定を行います。

キーボードバックライトなどは動作しないものの、何も設定しなくても最低限の動作はします。 トラックパッドも問題ありません。

ですが、せっかくなのでもう少し実用的にしたいところです。特に Zephyrus はハイブリッドグラフィックを採用しています。別途高性能なグラフィックカードがあるのでそちらもうまく活用できるようにしたいところです。

とりあえず実用的にするにあたって 2 つの設定をします。

  1. PRIME render offload
  2. ヘッドセットマイクの認識

キーボードバックライトなどは個人的に重要ではないので省きます。もしこの辺も追加で対応したいのでれば rog-core のリポジトリを確認してみてください。

https://github.com/flukejones/rog-core

PRIME render offload の設定

Zephyrus はハイブリッドグラフィックを採用しています。

通常は AMD の GPU、必要に応じて NVIDIA の GPU を使用することで消費電力を抑えることができます。

通常は AMD RENOIR がレンダリングを行いますが、AMD RENOIR はこれはこれでそれなりに描画できます。

GPU を切り換えて使用する技術には Optimus などがありますが、Linux では動作しません。そのため Linux では bumblebee などを使って GPU を切り替えていました。現在では NVIDIA のプロプライエタリドライバ自体がこの機能をサポートしています。

そのため、まず NVIDIA のプロプライエタリドライバをインストールし、nouveau は使わないように設定します。

1
2
3
4
$ sudo pacman -S nvidia nvidia-dkms nvidia-prime nvidia-settings nvidia-utils
$ cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf
blacklist nouveau
options nouveau modeset=0

ドライバを読み込み直すため、再起動します。

nvidia-smi で読み込めてるか確認してみます。現状ではドライバをインストールしただけでまだ何も使えない状態です。ですが、何もしていないのに消費電力だけ吸い取られてるように見えます。

うまくドライバをロードできれば消費電力は下げられるのかも知れません。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$ nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.100      Driver Version: 440.100      CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 206...  Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   59C    P0    15W /  N/A |      0MiB /  5934MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

$ nvidia-persistenced

$ nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.100      Driver Version: 440.100      CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 206...  On   | 00000000:01:00.0 Off |                  N/A |
| N/A   54C    P8     3W /  N/A |      0MiB /  5934MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

ここで PRIME render offload の設定を行います。

PRIME render offload を使うには最新の xorg をインストールしておく必要があります。また nvidia-prime パッケージをインストールしておくと必要な Xorg 構成やスクリプトなどもインストールされます。

さらに以下にパスに設定を追加します。

usr/share/X11/xorg.conf.d/99-amd-nvidia-prime-offload.conf

1
2
3
4
Section "ServerLayout"
	Identifier "layout"
	Option "AllowNVIDIAGPUScreens"
EndSection

設定後、再起動します。

再起動後、どうなっているか確認してみます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.100      Driver Version: 440.100      CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 206...  Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   43C    P8     3W /  N/A |     40MiB /  5934MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      2225      G   /usr/lib/Xorg                                 38MiB |
+-----------------------------------------------------------------------------+

うまく動作しているようです。

では mesa-demos のインストールして GPU の切り替えを試してます。

1
$ sudo pacman -S mesa-demos
1
2
3
4
5
6
7
$ sudo pacman -S mesa-demos
$ glxspheres64
Polygons in scene: 62464 (61 spheres * 1024 polys/spheres)
GLX FB config ID of window: 0x33a (8/8/8/0)
Visual ID of window: 0x699
Context is Direct
OpenGL Renderer: AMD RENOIR (DRM 3.37.0, 5.7.7-arch1-1, LLVM 10.0.0)

通常は、AMD RENOIR で描画します。

では NVIDIA の提供している方法で GPU を切り替えて描画してみます。

切り替えは環境変数を指定して、プログラムを実行するだけです。

1
2
3
4
5
6
$ __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus=NVIDIA_only glxspheres64
Polygons in scene: 62464 (61 spheres * 1024 polys/spheres)
GLX FB config ID of window: 0xf0 (8/8/8/0)
Visual ID of window: 0x651
Context is Direct
OpenGL Renderer: GeForce RTX 2060 with Max-Q Design/PCIe/SSE2

GeForce RTX 2060 が使われていることが確認できました!

とはいえこの環境変数を長々と打ち込むのは骨が折れるため、ショートカットを作っておくと便利です。

1
alias prime-run "env __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus=NVIDIA_only"

ヘッドセットのマイクを認識させる

Zephyrus は左側にヘッドセットのジャックがついています。

ついてはいるのですが、Linux ではヘッドセットを自動で認識してくれません。

本体についているマイクは問題なく使えますが、感度がよすぎて結構周りの音を拾ってしまいます。キーボードの打鍵音、周りの音を無駄に拾ってしまいオンライン会議などでは扱いにくいです。基本的に、ヘッドセットのマイクを使いたいので本体のマイクはむしろ使わない設定にします。

確認してみると Codec は ALC289 で、対応していないわけではなさそうです。であればジャックのマイクのピンを正しく認識してない可能性があります。

dmesg では Mic=0x12 となっており。これは本体のマイクです。

1
snd_hda_codec_realtek hdaudioC2D0:      Mic=0x12

この他にマイクがあるはずなのでそれをうまく使えるようにすればいいはずです。

実は本体左のジャックのマイクは 0x19 なのです。ですがジャックを抜き差ししてもマイクのピン ID が正しくない状態だと Input にも出てこないので設定のしようがありません。

また snd-hda-intel の mode をいじってみましたがうまくこのピンを使う設定を見つけることができませんでした。

そのうち、kernel で対応されるのかも知れませんが現状では強引にピンの情報を上書きして認識させるしかなさそうです。

ピンの情報を上書きするには hdajackretask を使うのが簡単です。

  1. hdajackretask を起動し、Realtek ALC289 を選択する
  2. Show unconnected pin にチェック
  3. 追加で表示された PinID 0x19 の Override にチェックを入れ、Microphone とする
  4. Install boot override を押下し、modprobe.d/hda-jack-retask.conf を生成する
  5. 再起動

これで hda-jack-retask.conf を読み込ませ、強引にヘッドセットのマイクを認識させることができます。

その他

その他、使い始めてみて気づいた点をあげてみます。

  • 本体のキーボードは少々癖がある
  • メモリは 3200 を採用してるので増設分も 3200 にあわせた方がよい
  • rog-core はキーボードバックライトは光るようになるものの、キーボード自体が一切効かなくなった
  • render offload の設定をしてないとファンがよくわからないタイミングで回ったりうるさい
  • cpu governor は schedutil
  • マシンの性能からして過度にバッテリー消費を気にしてはいけない(それでも〜12W ぐらい)
  • AUR には実は linux-g14 用のカーネルがある
  • カーネルパラメータはお好みで追加

メモリに関しては 1 スロット分を差し替えることで増設可能です。本体の分解も特殊なドライバが必要ないので簡単です。 ですが 3200 対応の 32G メモリとなると購入可能なとこが限られるのでそこは注意。

一応 linux-g14 のカーネルも少し試したのですが、ヘッドセットの自動認識はできませんでした。

カーネルパラメータは以下を設定しています。

amdgpu.exp_hw_support=1 amdgpu.dc=1 amd_cpufreq=enable acpi_backlight=vendor

まとめ

海外の記事ではスペックを使い切れない、サポートがあまりされていないような書き方をされてるものもありました。

ですが実際はそんなことはなく実用に耐えうるレベルに達していると思います。

ASUS Zephyrus G14 は実用的で人権を得ることができるマシンです。

新しいマシンの購入を検討している方、選択肢のひとつに付け加えてみてはいかがでしょうか?

TAGS: LINUX, PC