You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过SSH在远程Windows计算机上启动GUI进程并显示在远程显示器上

如何通过SSH在远程Windows计算机上启动GUI进程并显示在远程显示器上

你提到在Linux上通过设置DISPLAY环境变量就能让GUI程序显示在远程显示器上,但Windows的会话机制和Linux完全不同——Windows的GUI进程是绑定到交互式用户会话的,而SSH默认创建的是一个非交互式后台会话,直接运行程序的话界面不会出现在远程桌面。下面给你两种可行的解决方法:

方法一:使用PsExec工具(简单直接)

PsExec是微软Sysinternals套件里的工具,专门用来在远程或本地的特定会话中启动进程。

  • 先在远程Windows机器上下载并解压PsTools套件,把psexec.exe放到C:\Windows\System32目录下,这样全局都能调用。
  • 通过SSH连接到远程机器:
    ssh <remote_user>@<remote_ip>
    
  • 查看当前活跃的桌面会话ID,运行命令:
    query session
    
    输出会类似这样,找到标有Active的会话对应的ID(通常是1):
    SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
    services                                    0  Disc
    >console           JohnDoe                  1  Active
    
  • 用PsExec指定会话ID启动GUI程序,比如启动记事本:
    psexec -i <会话ID> notepad.exe
    
    比如会话ID是1的话,执行psexec -i 1 notepad.exe,记事本就会出现在远程Windows的显示器上了。

方法二:使用系统自带的任务计划程序(无需额外工具)

如果不想安装第三方工具,可以用Windows自带的schtasks命令创建临时任务,让程序在交互式会话中运行:

通过SSH连接到远程机器后,直接运行这条命令(把<remote_user>换成实际的远程用户名):

schtasks /create /tn "TempStartApp" /tr "notepad.exe" /sc once /st 00:00 /ru <remote_user> /rl highest /f && schtasks /run /tn "TempStartApp" && schtasks /delete /tn "TempStartApp" /f

这条命令会依次完成三个操作:

  • 创建一个名为TempStartApp的临时任务,指定要运行的程序为notepad.exe
  • 立即执行这个临时任务
  • 执行完成后自动删除临时任务
    程序的界面会直接显示在远程Windows的当前桌面会话中。

补充小提示

  • 如果你需要频繁执行这类操作,可以把查看会话ID和启动程序的命令写成一个批处理脚本,方便一键调用。
  • 确保你使用的SSH账号拥有足够的权限(管理员权限更佳),避免因权限不足导致程序无法正常启动。

备注:内容来源于stack exchange,提问作者Olli

火山引擎 最新活动