我想通过内置的 OpenSSH 服务器在 Windows 10 台式机上启动 GUI 应用程序。问题是它似乎无法在正确的用户会话中呈现 GUI?
应用程序显示在任务管理器中,但未呈现。我发现了一些(丑陋的)解决方法,据说可以在 Windows 7 和 8 上运行,但在 Windows 10 上却不起作用。最好不要改变我启动应用程序的方式,而是改变 SSH 服务器启动程序的方式。
我通过 ssh 登录,同时以实际机器上桌面会话登录的用户身份登录。在 Linux 上,您必须通过环境变量(例如 DISPLAY=:0)指定应用程序应在哪些 X11 会话中启动。我是否必须在 Windows 上执行类似操作来告诉 shell 在哪个上下文中启动应用程序?
答案1
似乎并不容易规避再发明一个轮子
服务器端
- 监听 UDP 端口
- 称呼
ShellExecute(NULL,"open",...)
在收到数据包时 - 能够在默认浏览器中打开 URL 或启动 GUI 应用程序(例如 cmd/Taskmgr/mmc),这些应用程序会弹出到屏幕上,所有 Linux_Xorg_SSH_DISPLAY=:0 都是这样
“它可以在我的机器上运行。”适用于 Microsoft Windows [版本 10.0.19042.746]- 未实施身份验证
- 不检查 UDP 数据包中的内容或它是否对 ShellExecute() 有效
客户端
- 发送 UDP 数据包供服务器执行
- 保存 argv 中提供的服务器 IP 地址,以便下次省略它
答案2
如果 Windows OpenSSH 服务未运行,您可以从目标用户启动它。启动脚本就足够了。
在 Windows 中创建用户 SSH 密钥(您通常都会这样做):
ssh-keygen
接受默认位置。我测试时没有使用密码。
启动 OpenSSH,使用用户的私钥作为主机密钥:
start /min %SYSTEMROOT%\System32\OpenSSH\sshd -h %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa
您可以使用上述内容创建单行 sshd.bat,并从 shell:startup 链接到它。