Forcing a Docked On-Screen Keyboard in Windows 11 for Headless Setups #818
emilwojcik93
started this conversation in
Ideas
Replies: 2 comments
-
|
This is a requested and planned feature. It requires to report the physical screen size in the EDID of the virtual display but it requires to update the driver, and EDID parsing and editing isn't implemented yet. |
Beta Was this translation helpful? Give feedback.
0 replies
-
|
Please and thank you! I was able to get this work briefly using this: Seems to revert after disconnect though. Will await implementation. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hi Apollo & Artemis Community and Developers,
Firstly, a huge thank you for creating such powerful tools. Apollo and Artemis have been pivotal in enabling a high-performance headless gaming and remote desktop experience.
I'm writing to share an in-depth journey into a persistent UI challenge and to seek collective wisdom or developer insight: achieving a reliably docked Windows 11 on-screen keyboard (OSK) that behaves like it does on native tablet/handheld hardware.
My Setup
The Goal: Seamless, Integrated On-Screen Keyboard
The objective is to replicate the fluid OSK experience found on devices like the Lenovo Legion Go or ASUS ROG Ally. When the OSK is invoked, it should:
The Ideal Behavior (as seen on native Windows handhelds):
The Current Problem: The Floating Keyboard Dilemma
In the headless setup with Apollo/Artemis, invoking the OSK consistently results in a floating keyboard. This behavior presents several usability issues:
What I'm Currently Experiencing:
Exhaustive Troubleshooting: A Multi-Pronged Approach
Understanding that Windows 11 largely automates "Tablet Mode" based on hardware cues (which are absent in a headless system), I've undertaken extensive efforts to programmatically induce the desired docked OSK behavior. Here’s a summary of the strategies explored:
1. Deep Registry Modifications
Numerous PowerShell scripts (
Force-TabletMode.ps1,Force-TabletMode-Enhanced.ps1,Force-Docked-OSK.ps1) were developed to manipulate a wide array of registry keys. Key targets included:Outcome: While settings were applied, the OSK remained floating. This suggested that registry settings alone are insufficient in Windows 11 for this purpose.
2. Direct Win32 API Interventions
A PowerShell script with embedded C# (
Direct-Win32-Docking.ps1) was created to send direct messages to theIPTip_Main_Window(TabTip.exe window) usingSendMessagewithWM_USER + 94(a known message for influencing docking).Outcome: Messages were sent, but the fundamental behavior didn't change, indicating deeper OS-level decisions overriding these messages.
3. COM Interface Manipulation
A C# application (
ForceDockedOSK.cs) and PowerShell scripts (Direct-Force-Docked-OSK.ps1) attempted to use COM interfaces likeUIHostNoLaunchandITipInvocation, inspired by WPF TabTip helper implementations.Outcome: Consistently failed to instantiate
UIHostNoLaunch. Logs (e.g.,DirectForceOSK_20250608_030248.log) showed:Error creating TabTip COM interface: Cannot find type [TabTipForce.UIHostNoLaunch]: verify that the assembly containing this type is loaded.This suggests these COM interfaces might be deprecated, internal, or their registration/accessibility has changed in recent Windows 11 versions.
4. Combined Strategies: Process Management & Settings Broadcasts
Scripts were enhanced to:
TabTip.exeandexplorer.exeat strategic points.SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, ...).Outcome: Settings were broadcast and processes restarted, but the OSK behavior persisted.
5. Systematic Discovery of Settings
A PowerShell script (
Discover-TabletMode-OSK-Settings.ps1) was used to perform an exhaustive search of the file system and registry for keywords related to tablet mode and the OSK.Log Excerpt (
TabletMode_OSK_Discovery_Log_20250608_012751.txt):Outcome: Confirmed the registry keys being targeted but also highlighted the sheer number of potentially related settings, many of which are likely interdependent or influenced by hardware state.
6. HID Device Manipulation (Conceptual)
The idea of programmatically disabling physical HID Keyboard and Mouse drivers was considered to make Windows believe it's in a touch-only, slate-like state.
Outcome: This remains a more invasive step, potentially risky for a headless system if not handled carefully, and still might not overcome how the display itself is perceived.
Core Conclusion: It's Likely a Driver/Hardware-Reporting Issue
Despite all software-level manipulations (registry, API calls, COM), Windows 11 in a headless configuration via Apollo/Sunshine stubbornly refuses to dock the OSK and resize applications.
This leads to a strong hypothesis: The behavior is dictated by how the virtual display driver (provided by Sunshine/Apollo's underlying stack) reports its capabilities to Windows. If the OS sees a standard, non-touch, non-convertible desktop display, it will always default to the floating OSK, irrespective of user-level registry tweaks. Native handhelds achieve the docked behavior because their actual hardware and drivers signal "tablet" or "convertible" capabilities.
Key Questions for the Apollo/Sunshine Developers & Community:
TabTip.exeaccept any command-line arguments or undocumented methods to force a specific layout or docking state upon launch?A solution to this would significantly enhance the usability of Apollo/Artemis for anyone aiming for a seamless, handheld-like experience on a headless Windows host. Any insights, suggestions, or collaboration on this front would be immensely appreciated.
All scripts and detailed logs mentioned are available from my previous interactions if they can be of help.
Thanks for your time and for these fantastic projects!
Beta Was this translation helpful? Give feedback.
All reactions