Sunshine 的權限提升實現的坑

0   2812 轉為簡體

Sunshine 在進行權限提升操作時,會用WTSGetActiveConsoleSessionId來獲取當前的活動會話,找到活動會話中的實際用戶,再從這個用戶來提升權限。

但是當前會話是RDP時,Windows會分配一個nobody用戶,然後給WTSGetActiveConsoleSessionId里返回0。從而後面獲取不到用戶的token。

在這個貼子中,有人提到了遍歷所有的會話,過濾掉不活動的和獲取不到token的會話,從而一找到個實際登錄的用戶。

有了這個修復之後,只要使用物理顯示器登錄一次,或者用Sunshine 中的 Desktop 程序登錄之後,實際串流即可找到正確的用戶來提升權限。

我把它和打包出來的二進制放到了這裡:

https://github.com/fffonion/Sunshine/releases/tag/0.21-fix

 

Sunshine 雲原神配置記錄

0   3379 轉為簡體

本文中所有軟件在這裡:https://pan.quark.cn/s/8919c40fcd57

下載Sunshine

下載地址  https://github.com/LizardByte/Sunshine/releases/tag/v0.21.0

如果你平時根本不開顯示器而用遠程桌面登錄,需要這個fix https://github.com/fffonion/Sunshine/releases/tag/0.21-fix

(詳見Sunshine 的權限提升實現的坑

如果使用portable版,需要運行 scripts/install-service.bat 安裝服務,用來支持後面的權限提升操作。

安裝Amyuni 虛擬顯示驅動

下載地址 https://www.amyuni.com/forum/viewtopic.php?t=3030

因為顯卡需要檢測到連接的顯示器才會輸出視頻信號,安裝虛擬顯示驅動即可不插顯示器串流。

另外,也可以購買HDMI誘騙器。

配置遠程桌面

非必需,用來手滑誤操作時的救援。

注意,遠程桌面也使用了虛擬顯示器,並且在開啟遠程桌面時,會屏蔽其他所有的顯示器。因此串流時應關閉遠程桌面,另外也不能在遠程桌面中直接啟動 Sunshine,否則會檢測不到正確的顯示器。可以使用以下命令

在遠程桌面中運行後,立即關閉遠程桌面,即可在非遠程桌面環境中啟動 Sunshine。

查找虛擬顯示器序號

在 Sunshine 目錄中,運行 scripts\dxgi-info.exe 程序,尋找除了 \\.\DISPLAY1 以外的顯示器。

配置 Sunshine

  • 在 Applications 選項卡中,點擊 + Add New
  • 在 Command 中,填寫下列命令打開觸摸UI

  • 如果用來給 PC 客戶端串流,填寫

  • 勾選 Run as administrator
  • 點 Save 保存

自動適配分辨率

在新建的 Application 的 Do Command 中添加如下項

  • 添加客戶端的分辨率到虛擬顯示器

  • 關閉虛擬顯示器

  • 打開虛擬顯示器(使新分辨率可用)

  • 設置主顯示器為虛擬顯示器,注意修改 5 為上一步中找到的虛擬顯示器序號

另外,在Undo Command中填寫

用來恢復默認主顯示器

  • 設置虛擬顯示器分辨率

  • 設置O神的分辨率(寬度)

  • 設置原O的分辨率(高度)

以上所有命令均需要勾選 Elevated 複選框。

如果在運行時遇到權限提升失敗,檢查服務是否已啟用,並可以嘗試重啟 Sunshine。

安裝 Moonlight 客戶端

手機端使用 阿西西大佬 修改的多點觸控版本 https://www.bilibili.com/video/BV1Si4y1Y7Jb/。

iOS可以使用 sideloadly 自簽名安裝。

PC端使用官方客戶端即可。

進入後,在 Settings 中設置分辨率為當前設備的分辨率;手機端的Touch Mode 選擇 Touchscreen。

配置 Wireguard 公網串流

在路由器端配置 Wireguard 隧道,或者在手機端配置 Wireguard 隧道,並設置路由規則。

登錄Windows

使用Sunshine 的 Desktop 程序,或者在物理顯示器上登錄一次。注意遠程桌面登錄的沒用。

效果

30M碼率在 iPad Mini 6上流暢地公網串流,PC端開啟1.5倍渲染高畫質,比官方的雲原神(10M碼率)清晰不少,畫質也提高了w

官方雲原神:

nginx配置HTTP/3的注意事項

0   2735 轉為簡體

因為OpenResty近期更新到了支持HTTP/3的nginx,需要注意以下事項。

打開reuseport

在多worker配置下需要打開HTTP/3端口的reuseport選項,否則會導致兩個UDP包被不同的worker處理,從而客戶端報ERR_DRAINING錯誤。

多個Host在同一個端口監聽的話,只需在其中的任意一個listen directive中添加reuseport。

把$http_host替換成$host

由於HTTP/3不再發送 Host 頭而改用 :authority 偽頭來,$http_host 變量變為空值。因此$http_host和ngx.var.http_host都需要改為$host和ngx.var.host。

添加Alt-Svc頭

瀏覽器不會默認通過 HTTP/3 連接,但在看到 Alt-Svc 頭後才開始嘗試使用 HTTP/3 協議。

另外,隨着http3的加入,http2從listen directive中被棄用,改為單獨的http2 on/off; directive。

我將以上更改寫成一個自動化腳本,用來批量更新多個nginx conf文件。

Do not set HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MiniNT when trying to enable ReFS

0   3469 轉為簡體

Lots of articles online indicates adding a AllowRefsFormatOverNonmirrorVolume DWORD key under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MiniNT in reigstry.

This is wrong. The MiniNT section is to indicate the system is a WinRE or WinPE system, thus certain USBccid devices’ driver won’t load. Including SmartCard reader, Windows Hello (mostly implemented as an internal USB camera).

很多教程提到在註冊表裡添加HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MiniNT項,並添加名為AllowRefsFormatOverNonmirrorVolume的DWORD值。

其實這是錯誤的利用了WinRE啟用了ReFS作為系統盤的功能。在正常的系統中出現MiniNT項會導致系統認為這是WinRE系統,從而不加載基於USB的驅動,包括智能卡讀卡器和Windows Hello 驅動(很多 Windows Hello 攝像頭是通過USB連接的)。

Windows Server 存儲池替換物理硬盤

0   2925 轉為簡體

現有兩個存儲池,分別叫StoragePool1和StoragePool2;兩個存儲池中各有兩塊磁盤(Disk1-1, Disk1-2, Disk2-1, Disk2-2),各組成Mirror分佈的虛擬磁盤,分別叫VirtualDisk1和VirtualDisk2。

需要將 Disk2-2 退役,在StoragePool1 中加入 Disk1-3,將 Disk1-2 加入StoragePool2。

按如下操作