The Zep Man schreef op vrijdag 27 december 2024 @ 19:14:
[...]
Op de Steam Deck (client)
Deze scripts worden als non-Steam games toegevoegd aan Steam om te gebruiken in Gaming Mode.
Script om VPN in en uit te schakelen, wg-myvpn.sh:
code:
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
| #!/usr/bin/env bash
WG_INTERFACE=wg-myvpn
CONFFILE=${WG_INTERFACE}.conf
case $1 in
up)
nmcli connection import --temporary type wireguard file $CONFFILE
nmcli connection up $WG_INTERFACE
;;
down)
nmcli connection down $WG_INTERFACE
nmcli connection delete $WG_INTERFACE
;;
status)
[ -e /sys/class/net/${WG_INTERFACE}/operstate ] && STATUS="up" || STATUS="down"
echo "WireGuard interface $WG_INTERFACE is $STATUS"
[[ "$STATUS" == "up" ]] && exit 1 || exit 0
;;
*)
echo "Usage: $0 up|down|status"
exit 255
;;
esac |
wg-myvpn.conf betreft een wg-quick configuratiebestand met de gewenste WireGuard client-configuratie.
Het bovenstaande script kan als Target tweemaal aan Steam toegevoegd worden als non-Steam game. Gebruik voor Launch Options "up" (zonder aanhalingstekens) voor de non-Steam game die de VPN inschakelt, en "down" voor degene die de VPN uitschakelt. In Gaming Mode krijg je geen feedback, dus test de VPN eerst. Als het werkt, dan mag je verwachten dat het blijft werken zolang er een verbinding is en de Deck niet wordt herstart omdat WireGuard stateless is.
WoL-script (WoL via OPNsense, pas de relevante waardes aan!):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #!/usr/bin/env bash
routerProtocol=https
routerHost="<OPNsense IP or hostname>"
routerPort="<OPNsense web interface port>"
routerApiKey="<API key from OPNsense user with WoL access>"
routerApiSecret="<Secret associated with API key>"
routerWolUuid="<See your browser's web developer tools, network tab when editing an OPNsense WoL Configuration for the relevant underlying UUID.>"
routerBaseUrl="${routerProtocol}://${routerHost}:${routerPort}"
wolApiSetUrl="${routerBaseUrl}/api/wol/wol/set"
curl --request POST --header "Content-Type: application/json" \
--insecure \
--user ${routerApiKey}:${routerApiSecret} \
--data "{\"uuid\":\"${routerWolUuid}\"}" \
$wolApiSetUrl
echo "" |
De uitvoer zou "{"status":"OK"}" moeten zijn. Dit houdt in dat OPNsense het verzoek heeft ontvangen en het geconfigureerde WoL-pakket heeft verstuurd. Dit houdt niet per se in dat de betreffende computer is ingeschakeld. Test je configuratie vooraf.
Op de Windows host (server)
De scripts om aan te roepen worden geconfigureerd in Sunshine. De benodigde parameters (resolutie, refresh rate, HDR gewenst) worden aangeleverd door Moonlight om zo de server af te stellen op de behoeften van de client. Hou rekening met dat Sunshine alleen scripts uitvoert als een nieuwe sessie/desktop aangeroepen wordt door Sunshine (zoals "Desktop"). Opnieuw gebruik maken van een bestaande sessie laat scripts dus niet draaien. Stop de huidige sessie in Moonlight en start een nieuwe sessie om uitvoer van scripts door Sunshine te forceren.
De resolutie en refresh rate worden direct ingesteld d.m.v. qres.exe, die je onder andere
hier kan vinden.
Stel in voor config.do_cmd (niets voor undo_cmd, niet elevated):
code:
1
| cmd /C <path to>\qres.exe /x:%SUNSHINE_CLIENT_WIDTH% /y:%SUNSHINE_CLIENT_HEIGHT% /r:%SUNSHINE_CLIENT_FPS% |
HDR in- en uitschakelen (alleen getest met Windows 11) wordt met een eigen script gedaan omdat Windows daar geen standaard, makkelijk te gebruiken methode voor heeft en in de tijd dat ik het ontwikkelde third-party tooling te brak was om scriptmatig aan te sturen. Dit script schakelt altijd als het handmatig wordt aangeroepen, en alleen indien nodig wanneer het wordt aangeroepen door Sunshine. Je ziet met Moonshine niets van de uitvoer omdat dit script wordt uitgevoerd voordat beeld wordt getoond.
Stel in voor config.do_cmd (niets voor undo_cmd, niet elevated):
hdrswitch.bat (pas waarde monitor key aan!):
code:
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
| @echo off
set regMds=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\MonitorDataStore
set monitor=<Current monitor registry key name from registry key above>
set hdr=
for /F "usebackq tokens=3 delims= " %%V IN (`reg query %regMds%\%monitor% /v AdvancedColorEnabled ^| find "AdvancedColorEnabled"`) DO set hdr=%%V
if "%hdr%"=="" (
echo ERROR: Could not detect HDR mode of current monitor. Exiting.
goto :EOF
)
if "%hdr%"=="0x0" set hdr=false
if "%hdr%"=="0x1" set hdr=true
set switch=false
if not "%hdr%"=="%SUNSHINE_CLIENT_HDR%" set switch=true
set request=%SUNSHINE_CLIENT_HDR%
if "%request%"=="" if "%hdr%"=="false" set request=true
if "%request%"=="" if "%hdr%"=="true" set request=false
echo Currently in HDR mode: %hdr%
echo Requested HDR mode: %request%
echo Switch needed: %switch%
echo.
if "%switch%"=="true" (
echo Switching...
cscript /NOLOGO hdrswitch.vbs
) else (
echo Nothing to do, so not switching.
) |
hdrswitch.vbs (in dezelfde locatie als hdrswitch.bat):
VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| Set oShell = CreateObject("WScript.Shell")
oShell.Run("""ms-settings:display""")
WScript.Sleep 1000
oShell.AppActivate "settings"
WScript.Sleep 100
oShell.SendKeys "{TAB}"
WScript.Sleep 60
oShell.SendKeys "{TAB}"
WScript.Sleep 60
oShell.SendKeys "{TAB}"
WScript.Sleep 60
oShell.SendKeys "{TAB}"
WScript.Sleep 60
oShell.SendKeys "{TAB}"
WScript.Sleep 60
oShell.SendKeys "{TAB}"
WScript.Sleep 60
oShell.SendKeys " "
WScript.Sleep 500
oShell.SendKeys "%{F4}" |
Voor het uitschakelen van Windows na 15 minuten inactiviteit gebruik ik
HASS.Agent en verdere automatisering vanuit Home Assistant. Als ik mijn PC aan wil laten staan voor een langere periode zonder gebruikersinvoer, hoef ik alleen maar aan de Windows-kant HASS.Agent de nek om te draaien.
Als de PC niet is aangesloten op een monitor of TV, dan is een HDMI- of DisplayPort-dummy vereist om alle gewenste resoluties te ondersteunen en om een actieve geluidsuitgang te hebben. Beide zijn nodig om Sunshine video en audio te laten streamen. Ik gebruik
een programmeerbaar model van Lindy die mijn LG OLED TV emuleert. Mogelijk zijn er ondertussen betere/goedkopere dummies, maar zoveel jaar geleden was dit de enige manier om een dummy met HDR-ondersteuning in diens EDID-configuratie te krijgen.