You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中检测FreeRDP连接成功?批量RDP文件连接场景优化

解决FreeRDP遍历连接.rdp文件的退出码判断问题

方案一:连接建立时实时检测(推荐)

直接监控FreeRDP的输出日志,当出现连接成功的关键词时立即标记并停止后续尝试,无需依赖退出码,从根源避免退出码混乱的问题。

示例脚本

#!/bin/bash

# 遍历当前目录下所有.rdp文件
for rdp_file in *.rdp; do
    [ -f "$rdp_file" ] || continue  # 跳过非文件类型(如目录)
    echo "正在尝试连接: $rdp_file"

    # 启动FreeRDP并捕获日志输出,后台运行
    xfreerdp /f /load:"$rdp_file" /log-level:INFO 2>&1 | while read -r log_line; do
        # 根据你的FreeRDP版本调整成功关键词,先手动运行一次确认日志内容
        if echo "$log_line" | grep -qi "connected to server\|session established"; then
            echo "✅ 成功连接到 $rdp_file"
            # 创建临时标记文件,通知外层循环停止
            touch /tmp/rdp_connected_success
            # 可选:如果仅需验证连接而非持续使用,取消下一行注释以终止进程
            # pkill -P $$ xfreerdp
            break
        fi
    done &

    # 等待几秒给FreeRDP尝试连接的时间,可根据网络情况调整
    sleep 6

    # 检查是否连接成功
    if [ -f /tmp/rdp_connected_success ]; then
        rm /tmp/rdp_connected_success
        break
    fi

    # 连接失败,清理当前脚本启动的FreeRDP进程
    pkill -P $$ xfreerdp
    echo "❌ $rdp_file 连接失败,尝试下一个"
done

关键说明

  • 先手动运行xfreerdp /load:xxx.rdp /log-level:INFO,确认连接成功时的日志关键词,替换脚本中的匹配内容
  • 使用-P $$确保只杀掉当前脚本启动的FreeRDP进程,避免误杀其他无关进程

方案二:精准匹配退出码

收集实际场景中FreeRDP「成功连接后断开」的退出码,仅在匹配到这些码时停止遍历,比模糊的-le 15更可靠。

示例脚本

#!/bin/bash

# 手动收集的「成功连接后断开」的退出码(可根据实际测试补充)
SUCCESS_EXIT_CODES=(0 12 13)

for rdp_file in *.rdp; do
    [ -f "$rdp_file" ] || continue
    echo "尝试连接: $rdp_file"
    xfreerdp /f /load:"$rdp_file"
    exit_code=$?

    # 检查退出码是否在成功列表中
    for code in "${SUCCESS_EXIT_CODES[@]}"; do
        if [ "$exit_code" -eq "$code" ]; then
            echo "$rdp_file 连接成功后断开,停止后续尝试"
            exit 0
        fi
    done

    echo "$rdp_file 连接失败,退出码: $exit_code"
done

关键说明

  • 可自行测试不同断开场景(主动关闭窗口、登出、远程端主动断开),将对应的退出码添加到SUCCESS_EXIT_CODES数组中
  • 该方式无需监控日志,适合对退出码有明确收集的场景

内容的提问来源于stack exchange,提问作者lvl2wizard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:55:08