From 3e4fdd659b48ede5d51826bef00c812f2d8bb11f Mon Sep 17 00:00:00 2001 From: xdavidwu Date: Sat, 31 Aug 2019 00:32:03 +0800 Subject: [PATCH] add 2019-08-30-cloud-gaming --- _posts/2019-08-30-cloud-gaming.md | 100 ++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 _posts/2019-08-30-cloud-gaming.md diff --git a/_posts/2019-08-30-cloud-gaming.md b/_posts/2019-08-30-cloud-gaming.md new file mode 100644 index 0000000..316e3be --- /dev/null +++ b/_posts/2019-08-30-cloud-gaming.md @@ -0,0 +1,100 @@ +--- +title: "P106-100 Cloud Gamming on Linux" +categories: + - Linux +tags: + - linux + - gpu + - xorg + - gaming +--- + +在 headless 的環境下用 P106-100 架出個人 Linux cloud gaming 平台 + +* 想法:透過 Steam in-home streaming + VPN 在 P106 上 gaming + * NVIDIA 的 Linux OpenGL library 貌似沒有刻意封鎖或 debuff P106 +* 需求:P106-100 + 任何有 NVENC 的卡 + * P106 沒有 NVENC + * Kepler 的 NVENC 即可 + * Steam 目前(此文編寫時)還不支援 NVENC 以外的硬編 + * VA-API 他們目前只有拿來解碼 + * 沒有的話軟編很吃 CPU + +首先當然是裝好 NVIDIA driver, Steam, Xorg, pulseaudio, 另外還會用到 x11vnc, xrandr + +注意 NVIDIA driver 要有裝 32-bit 的部份(Steam 還在 32-bit) + +架好一個 VPN 或 tunnel, 推薦用 WireGuard + +如果是在 lxc 內, 記得把 P106 和 NVENC 卡的 cgroup 限制解除然後弄出 device node + +設定 xorg.conf 類似如下 + +``` +Section "Device" + Identifier "Device0" + Driver "nvidia" + VendorName "NVIDIA Corporation" + BusID "PCI:66:0:0" +EndSection + +Section "Monitor" + Identifier "Monitor0" + VendorName "Unknown" + ModelName "Unknown" + HorizSync 28.0 - 33.0 + VertRefresh 43.0 - 72.0 + Option "DPMS" +EndSection + +Section "Screen" + Identifier "Screen0" + Device "Device0" + Monitor "Monitor0" + DefaultDepth 24 + Option "AllowEmptyInitialConfiguration" "True" + Option "Coolbits" "31" + SubSection "Display" + Depth 24 + EndSubSection +EndSection + +Section "ServerLayout" + Identifier "Layout0" + Screen 0 "Screen0" 0 0 +EndSection +``` + +AllowEmptyInitialConfiguration 是用來允許沒有 output 的設定 + +Coolbits 只是順便解鎖一些設定例如超頻 + +BusID 是十進位的, lspci 是十六進位, 找到 P106 的 id 後記得轉換 + +開 Xorg 和 pulseaudio + +用 xrandr 查看目前整個 screen 的大小, 用 --fb 改到目標大小 + +開 x11vnc + Steam + 一個 wm + +開 Steam 時要加個環境變數 CUDA\_VISIBLE\_DEVICE 值是在 nvidia-smi 中 NVENC 卡的 index + +NVENC 某些地方要經過 libcuda, 設定 CUDA\_VISIBLE\_DEVICE 可以限制 CUDA 可用的卡, 進而強制用特定卡做 NVENC (Steam 只會試第一張) + +libcuda 現在在 NVIDIA driver 裡面就有, 不用額外裝整個 CUDA + +這些可以寫進 xinitrc 之類的之後比較方便(x11vnc 可能之後不太需要) + +用 vnc 進去登入設定 Steam, 幫遊戲寫個 .desktop 加進 Steam (如果不用加參數可以直接加 binary) + +注意如果 .desktop 有變要在 Steam 裡重新加一次才會生效 + +可以順便用個 glxinfo 確認 OpenGL 是透過 NVIDIA 的 library 正常運作 + +設定好後 x11vnc 可以關掉避免影響效能 + +client 的部份記得在設定開 Display performance information 確認一下 encoder 是 NVENC + +client 的硬解是用 libva1 的而非 libva2, 裝 backend driver 時不要裝錯 + +libva 是使用 DRI2, 而 XWayland 只支援 DRI3, Steam 有用 VAPutSurface 所以也不能直接改用 drm device, 所以如果要硬解基本上需要傳統 Xorg (libva 和 intel backend 有 DRI3 support pull request, 但我套用他在 Steam 會吃 BadWindow) -- 2.45.2