YouTube playback on Linux
NASとして使ってたサーバのマザーボードを交換してCoffee Lakeベースにした。ARM系で良かったのかもしれないけど、Linuxのdriverのサポートでamd64系が無難そうというのと、今回からテレビにも繋いで動画見る用途でも使ってみようと考えてARM系にしなかった。CPUとして採用したPentium G5600はUHD630 (3e91)というGraphic coreが組み込まれている。最終的にはYouTubeとかのネット動画再生環境として満足できる環境になったが、色々カスタムで入れないと動かなかったので、そのメモ。
ポイントは二つ:
drm-tip
Gnome-Wayland
まず現時点のDebian busterのデフォルトカーネル4.19で試す。Xorgのvesa driverでしか動かなかった。その環境のLXDE上のchromeでYouTubeを見ると、酷い動画再生品質に驚いた。tearingというキーワードでLinuxの動画再生環境ではよく話題に上がっている問題が起きている。現象としては、カメラがパンして背景全体が動く場面で画面の真ん中に水平に切れ目ができる。V-sync(垂直同期)がずれる。DAOKO×中田ヤスタカ「ぼくらのネットワーク」で顕著にtearingが見られた。
Window manager (composer) がV-syncに大きな影響を与えてるらしい。LXDEのような軽量DEではなくGnome/KDEを使うことがtearing解決のまず一歩のようだ。そしてXorgではなく、構造上tearingが起きにくい設計になってるWaylandというdisplay serverを使うことも推奨されてる。DebianはbusterでWaylandをデフォルトにしているので、これを機会に、stretchからbusterにアップグレードした。
% unman -a Linux 4.19.0-2-amd64 #1 SMP Debian 4.19.16-1 (2019-01-17) x86_64 GNU/Linux
Xorgのvesa driverでは動いたが、Waylandは動かなかった。Kernel 4.19.16のDRM driverがまだUHD630に対応してない?
/var/log/messages gnome-shell[1984]: Failed to create backend: Could not find a primary drm kms device
ここで最新のDRM driverのレポジトリであるdrm-tipを試してみる。drm-tipは最新のカーネルに組み込まれた形で開発されていて、cloneすると、その中でカーネル全体をコンパイルできる。この時点のdrm-tipではkernel 5.0.0-rc7。
まず、kernel treeとは別にIntelから配布されてるfirmwareをinstall。
apt-get install firmware-misc-nonfree git clone git://anongit.freedesktop.org/drm-tip cd drm-tip cp /boot/config-4.19.0-2-amd64 .config
.configを編集
CONFIG_DRM_I915=m CONFIG_FW_LOADER=y CONFIG_EXTRA_FIRMWARE="i915/kbl_dmc_ver1_04.bin i915/kbl_huc_ver02_00_1810.bin i915/kbl_guc_ver9_39.bin" CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware"
後は通常通りmakeして出来た.debをinstall。
make oldconfig make deb-pkg LOCALVERSION=-custom
Browserはchromeを使う。
Gnome-Waylandの環境で、YouTubeはVsyncが破綻することなく綺麗に再生できるようになった。
% uname -a Linux 5.0.0-rc7-custom #6 SMP Fri Feb 22 00:58:02 CST 2019 x86_64 GNU/Linux % lshw -class video *-display description: VGA compatible controller product: 8th Gen Core Processor Gaussian Mixture Model vendor: Intel Corporation physical id: 2 bus info: pci@0000:00:02.0 version: 00 width: 64 bits clock: 33MHz capabilities: pciexpress msi pm vga_controller bus_master cap_list rom configuration: driver=i915 latency=0 resources: irq:124 memory:a0000000-a0ffffff memory:90000000-9fffffff ioport:3000(size=64) memory:c0000-dffff % lspci -nn -v 00:02.0 VGA compatible controller [0300]: Intel Corporation 8th Gen Core Processor Gaussian Mixture Model [8086:3e91] (prog-if 00 [VGA controller]) Subsystem: ASUSTeK Computer Inc. 8th Gen Core Processor Gaussian Mixture Model [1043:8694] Flags: bus master, fast devsel, latency 0, IRQ 124 Memory at a0000000 (64-bit, non-prefetchable) [size=16M] Memory at 90000000 (64-bit, prefetchable) [size=256M] I/O ports at 3000 [size=64] [virtual] Expansion ROM at 000c0000 [disabled] [size=128K] Capabilities: [40] Vendor Specific Information: Len=0c <?> Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00 Capabilities: [ac] MSI: Enable+ Count=1/1 Maskable- 64bit- Capabilities: [d0] Power Management version 2 Capabilities: [100] Process Address Space ID (PASID) Capabilities: [200] Address Translation Service (ATS) Capabilities: [300] Page Request Interface (PRI) Kernel driver in use: i915 Kernel modules: i915
AudioはUSB-DAC経由で出してる。それに必要なkernel configは
CONFIG_SND_HDA=y CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=m
さらに、HDMIに音を乗せるには多分これらが必要。(使ってないので未確認)
CONFIG_SND_HDA_INTEL=y CONFIG_SND_HDA_CODEC_HDMI=y CONFIG_SND_HDA_I915=y
さらに、今までremote loginでしか使ってなかったせいかもしれないが、videoとsoundを機能させるためには以下のgroup設定が必要だった。
sudo adduser Debian-gdm audio sudo adduser Debian-gdm video