From 283e71c99d2c9f1d8ad19e1f2a03e22f8b480a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Wojdy=C5=82a?= Date: Wed, 12 Nov 2025 12:07:08 +0100 Subject: [PATCH 1/4] Add logging to get-appmenus script MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rafał Wojdyła --- src/qubes-rpc-services/get-appmenus.ps1 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/qubes-rpc-services/get-appmenus.ps1 b/src/qubes-rpc-services/get-appmenus.ps1 index 0002e0b..5242a7b 100644 --- a/src/qubes-rpc-services/get-appmenus.ps1 +++ b/src/qubes-rpc-services/get-appmenus.ps1 @@ -19,6 +19,8 @@ * #> +. $env:QUBES_TOOLS\qubes-rpc-services\log.ps1 + # Registry location for path hash -> full path mapping for GetImageRGBA $RegistryMapPath = 'HKCU:\Software\Invisible Things Lab\Qubes Tools' $RegistryMapKey = 'AppMap' @@ -57,6 +59,8 @@ Function ProcessLink($pathObj, $basepath) # Store also basename-LNK location for qubes.StartApp service New-ItemProperty -Path "$RegistryMapPath\$RegistryMapKey" -Name $desktopFileName.Replace('.lnk', '') -PropertyType String -Value $pathObj.FullName | Out-Null + LogDebug "$targetHash -> $targetPath" + Write-Host "$($linkBaseName):Name=$appmenuLocation$($pathObj.BaseName)" Write-Host "$($linkBaseName):Exec=$($targetPath.Replace('\','\\'))" Write-Host "$($linkBaseName):Comment=$($linkObj.Description)" From 11a77671521da0146c7dbe8fe00548f21637bc16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Wojdy=C5=82a?= Date: Wed, 12 Nov 2025 12:19:14 +0100 Subject: [PATCH 2/4] Fix getting script name in PS log function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This accounts for sourced scripts and gets the root script name. Signed-off-by: Rafał Wojdyła --- src/qubes-rpc-services/log.ps1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/qubes-rpc-services/log.ps1 b/src/qubes-rpc-services/log.ps1 index c78cd19..2cdb5c5 100644 --- a/src/qubes-rpc-services/log.ps1 +++ b/src/qubes-rpc-services/log.ps1 @@ -1,6 +1,8 @@ function LogStart { $logDir = Get-ItemPropertyValue "hklm:\Software\Invisible Things Lab\Qubes Tools" LogDir - $baseName = (Get-Item $MyInvocation.PSCommandPath).BaseName + # get the originating script path + $basePath = (Get-PSCallStack | Where-Object { $_.ScriptName } | Select-Object -Last 1).ScriptName + $baseName = Split-Path -Leaf -Path $basePath $logname = "$baseName-$(Get-Date -Format "yyyyMMdd-HHmmss")-$PID.log" $global:qwtLogPath = "$logDir\$logName" $global:qwtLogLevel = Get-ItemPropertyValue "hklm:\Software\Invisible Things Lab\Qubes Tools" LogLevel From a4ef63829fdc5c44ea0bab585d6c62e9d391cab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Wojdy=C5=82a?= Date: Wed, 12 Nov 2025 12:21:16 +0100 Subject: [PATCH 3/4] Don't require manual log start in PS log function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rafał Wojdyła --- src/qubes-rpc-services/log.ps1 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/qubes-rpc-services/log.ps1 b/src/qubes-rpc-services/log.ps1 index 2cdb5c5..35bc748 100644 --- a/src/qubes-rpc-services/log.ps1 +++ b/src/qubes-rpc-services/log.ps1 @@ -14,6 +14,10 @@ function Log { [string]$msg ) + if ($qwtLogPath -eq $null) { + LogStart + } + if ($level -le $qwtLogLevel) { $ts = Get-Date -Format "yyyyMMdd.HHmmss.fff" Add-Content $qwtLogPath -value "[$ts-$("EWIDV"[$level-1])] $msg" From 4988f40c72cc90e8ba63d930e7505ea7893a398d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Wojdy=C5=82a?= Date: Wed, 12 Nov 2025 12:23:14 +0100 Subject: [PATCH 4/4] Fix qubes.StartApp to wait for user logon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rafał Wojdyła --- src/qubes-rpc-services/start-app.ps1 | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/qubes-rpc-services/start-app.ps1 b/src/qubes-rpc-services/start-app.ps1 index b3cccd1..3d67fa1 100644 --- a/src/qubes-rpc-services/start-app.ps1 +++ b/src/qubes-rpc-services/start-app.ps1 @@ -19,6 +19,8 @@ * #> +. $env:QUBES_TOOLS\qubes-rpc-services\log.ps1 + # Registry location for path hash -> full path mapping $RegistryMapPath = 'HKCU:\Software\Invisible Things Lab\Qubes Tools' $RegistryMapKey = 'AppMap' @@ -26,5 +28,13 @@ $RegistryMapKey = 'AppMap' $desktopBaseName = $args[0] $desktopFullName = Get-ItemProperty -Path "$RegistryMapPath\$RegistryMapKey" -Name $desktopBaseName +$target = $desktopFullName.$desktopBaseName + +while (! (Get-CimInstance -ClassName Win32_ComputerSystem).UserName) { + LogDebug "Waiting for user logon" + Start-Sleep -Milliseconds 100 +} + +LogDebug "Starting $target" -Start-Process -Wait $desktopFullName.$desktopBaseName +Start-Process -Wait $target