通过SSH连接Win10运行Steam browser protocol无响应且客户端闪退求助
问题原因解析
为何Steam能识别命令来源
- Windows系统存在会话隔离机制:本地登录用户运行的程序属于交互式用户会话(通常会话ID为1),而SSH默认登录后创建的是后台服务会话(会话ID为0),两个会话的窗口站、用户访问令牌、桌面上下文完全隔离。
- Steam运行时会绑定当前所属的会话上下文,当检测到同账号下来自其他会话的Steam协议调用请求时,会判定为新的会话登录行为,主动断开原有会话的客户端连接,对应你看到的闪退+登出日志。
可行解决办法
方法1:使用PsExec指定交互式会话运行命令
PsExec是微软官方Sysinternals工具集的组件,可以指定进程运行的会话ID:
- 先将PsExec.exe放到目标Win10设备的系统路径(比如
C:\Windows\System32)下 - 修改Python调用代码为:
subprocess.run("psexec.exe -i 1 -d cmd /c \"start steam://rungameid/[gameid]\"", shell=True)
注:
-i 1指定运行在会话ID为1的交互式会话下,如果你的设备有多个用户登录,可以在目标设备cmd执行query user查询对应用户的会话ID,替换数字即可。
方法2:配置SSH使用交互式会话登录
修改Win10设备的OpenSSH服务配置:
- 打开
C:\ProgramData\ssh\sshd_config文件,确保配置项PermitTTY yes处于启用状态,保存后重启sshd服务 - 本地SSH连接时添加
-t参数强制分配伪终端,格式为ssh -t 用户名@目标IP - 确保SSH登录的账号和本地运行Steam的账号为同一个用户,再执行原Python命令即可。
方法3:通过计划任务中转调用
提前在目标Win10设备创建计划任务:
- 常规选项卡:选择「只在用户登录时运行」,勾选「使用最高权限运行」
- 操作选项卡:操作选择「启动程序」,程序或脚本填
cmd,参数填/c start steam://rungameid/[gameid] - 保存任务并自定义任务名(比如
StartSteamGame)
SSH连接后执行命令触发任务即可:
subprocess.run("schtasks /run /tn \"StartSteamGame\"", shell=True)
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

