惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
I
InfoQ
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
云风的 BLOG
云风的 BLOG
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
The GitHub Blog
The GitHub Blog
博客园_首页
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
WordPress大学
WordPress大学
B
Blog
人人都是产品经理
人人都是产品经理
小众软件
小众软件
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
量子位
Apple Machine Learning Research
Apple Machine Learning Research
N
Netflix TechBlog - Medium
Last Week in AI
Last Week in AI
博客园 - 聂微东
Jina AI
Jina AI

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
Windows 版 Codex 也能手机远程控制了,完整开启教程来了
scf2024 · 2026-05-17 · via V2EX

这两天,我把 Windows 版 Codex 的手机远程控制功能折腾通了。

先说结论:

Windows 版 Codex 其实已经带了远程控制能力,只是默认没有完全放出来。

如果你的界面里只有 SSH connections from this PC,看不到 Control this PCControl other devices,不一定是你版本太旧,也不一定是你找错了地方。更可能的情况是:功能代码已经在客户端里,但开关还没有真正生效。

我一开始也被这个问题绕了一圈。

官方页面还在说 Windows 支持即将到来,客户端安装包里却已经有了 Connect a device to this PCControl this PC 这些界面文案。真正把问题拆开后才发现,“功能已经写进客户端” 和 “功能已经对你的账号开放” 之间,中间还隔着一层配置和授权。

这篇文章不只讲原理,也把完整脚本、完整操作步骤,以及一段可以直接复制给 Codex 的提示词都放出来。

你甚至可以把这篇文章直接发给 Codex ,让它照着检查你的电脑并自动完成配置。

一、先确认你遇到的是不是同一个问题

如果你打开 Codex:

  1. 进入 Settings
  2. 打开 Connections
  3. 页面里只看到 SSH connections from this PC

那你遇到的,大概率就是我碰到的这个问题。

也就是说:

  • 客户端里已经有远程控制相关功能
  • 但当前界面只展示了 SSH
  • 远程控制的入口还没有真正出现

二、真正关键的配置,不在界面里

Codex 的本地配置文件在这里:

C:\Users\<你的用户名>\.codex\config.toml

打开后,找到 [features] 这一段。

很多人的配置里,原本只有这些:

[features]
goals = true
remote_connections = true
workspace_dependencies = false

真正关键的是,还需要补上这一行:

remote_control = true

最后变成:

[features]
goals = true
remote_connections = true
remote_control = true
workspace_dependencies = false

这一步看起来很小,但它决定了客户端会不会把远程控制相关能力真正拉起来。

三、为什么我加完之后,重启又失效了

这里是这次最容易踩坑的地方。

我第一次把 remote_control = true 加进去之后,重启 Codex ,发现它又没了。

不是没保存成功,而是新版 Windows 客户端会在启动过程中,把这行配置重新删掉。

这就导致一个很烦的循环:

  1. 你手动加上 remote_control = true
  2. 重启 Codex
  3. Codex 启动时把它删掉
  4. 你回到界面,还是只能看到 SSH

表面上看,好像配置没用。

实际上不是没用,而是它还没来得及发挥作用,就被启动流程抹掉了。

四、解决办法:在启动时把这行配置“保住”

目前最实用的办法,是在启动 Codex 前:

  1. 确认 remote_control = true 已经写入
  2. 临时把 config.toml 设为只读
  3. 启动 Codex
  4. 等启动稳定后,再取消只读

这样做的目的很简单:

让 Codex 在启动阶段读到这行配置,但来不及把它删掉。

如果你只想手动验证一次,可以这么做:

  1. 编辑 config.toml
  2. 加上 remote_control = true
  3. 右键文件,打开属性
  4. 勾选“只读”
  5. 启动 Codex
  6. 等客户端完全打开后,再把“只读”取消

如果你会频繁使用,最好写一个小脚本,把这件事自动化:

  • 先关闭正在运行的 Codex
  • 备份配置文件
  • 自动补上 remote_control = true
  • 临时锁定配置文件
  • 启动官方 Codex App
  • 等启动稳定后自动解除只读

这样以后每次都用脚本启动,不需要再手工补配置。

下面就是我实际使用的完整脚本。

把它保存为:

C:\Users\<你的用户名>\.codex\codex-remote.ps1

脚本内容如下:

# ====================================
# CODEX STARTUP WRAPPER
# Auto-detect Codex Windows App ID
# ====================================

$ConfigPath = "$env:USERPROFILE\.codex\config.toml"
$BackupPath = "$env:USERPROFILE\.codex\config.backup.toml"

try {
    Write-Host ""
    Write-Host "==============================="
    Write-Host " Codex Startup Wrapper"
    Write-Host "==============================="
    Write-Host ""

    # FIND CODEX APP ID
    $CodexApp = Get-StartApps | Where-Object {
        $_.Name -match "Codex"
    } | Select-Object -First 1

    if (-not $CodexApp) {
        throw "Codex app not found in Start Apps."
    }

    Write-Host "Found Codex App:"
    Write-Host $CodexApp.Name
    Write-Host $CodexApp.AppID
    Write-Host ""

    # FIND CODEX PROCESS
    $CodexProcess = Get-Process -ErrorAction SilentlyContinue | Where-Object {
        $_.ProcessName -match "^Codex$|^codex$"
    }

    # GRACEFUL SHUTDOWN
    if ($CodexProcess) {
        Write-Host "Codex is running. Closing..."

        foreach ($p in $CodexProcess) {
            $p.CloseMainWindow() | Out-Null
        }

        Start-Sleep -Seconds 3

        $StillRunning = Get-Process -ErrorAction SilentlyContinue | Where-Object {
            $_.ProcessName -match "^Codex$|^codex$"
        }

        if ($StillRunning) {
            Write-Host "Force stopping Codex..."
            $StillRunning | Stop-Process -Force
        }

        Start-Sleep -Seconds 1
    }
    else {
        Write-Host "Codex not running."
    }

    # MAKE CONFIG WRITABLE
    if (-not (Test-Path $ConfigPath)) {
        New-Item -ItemType File -Path $ConfigPath -Force | Out-Null
    }

    attrib -R $ConfigPath

    # BACKUP CONFIG
    Copy-Item $ConfigPath $BackupPath -Force

    Write-Host "Backup created:"
    Write-Host $BackupPath
    Write-Host ""

    # ENSURE remote_control EXISTS UNDER [features]
    $content = Get-Content $ConfigPath -Raw

    if ($content -notmatch '(?m)^\s*remote_control\s*=\s*true\s*$') {

        if ($content -match '(?m)^MATHPLACEHOLDER0ENDMATH\s*$') {

            $content = $content -replace `
                '(?m)^(\[features\]\s*)$',
                "`$1`r`nremote_control = true"

            Set-Content $ConfigPath $content

            Write-Host "Inserted remote_control under [features]"
        }
        else {
            $content += "`r`n`r`n[features]`r`nremote_control = true`r`n"

            Set-Content $ConfigPath $content

            Write-Host "Created [features] section."
        }
    }
    else {
        Write-Host "remote_control already exists."
    }

    Write-Host ""

    # TEMP LOCK CONFIG
    attrib +R $ConfigPath

    Write-Host "Config locked as read-only."
    Write-Host ""

    # START OFFICIAL CODEX APP
    Write-Host "Launching Codex..."

    Start-Process "shell:AppsFolder\$($CodexApp.AppID)"

    # WAIT FOR CODEX PROCESS
    do {
        Start-Sleep -Milliseconds 500

        $Running = Get-Process -ErrorAction SilentlyContinue | Where-Object {
            $_.ProcessName -match "^Codex$|^codex$"
        }

    } until ($Running)

    Write-Host "Codex process detected."

    # WAIT UNTIL STARTUP STABILIZES
    Write-Host "Waiting for startup to stabilize..."

    $StableCount = 0
    $LastWrite = (Get-Item $ConfigPath).LastWriteTimeUtc

    while ($StableCount -lt 5) {
        Start-Sleep -Milliseconds 500

        $CurrentWrite = (Get-Item $ConfigPath).LastWriteTimeUtc

        if ($CurrentWrite -eq $LastWrite) {
            $StableCount++
        }
        else {
            $StableCount = 0
            $LastWrite = $CurrentWrite
        }
    }

    Write-Host "Startup stabilized."
    Write-Host ""
}
finally {
    attrib -R $ConfigPath

    Write-Host "Config unlocked."
    Write-Host ""
    Write-Host "Done."
}

以后你只需要用 PowerShell 运行它:

powershell -ExecutionPolicy Bypass -File "$env:USERPROFILE\.codex\codex-remote.ps1"

它会自动完成这些事:

  1. 找到你安装的 Codex Windows App
  2. 关闭当前正在运行的 Codex
  3. 备份 config.toml
  4. 确保 [features] 下存在 remote_control = true
  5. 临时把配置文件设为只读
  6. 启动官方 Codex App
  7. 等启动稳定
  8. 自动解除只读

这样做的好处是,不会为了保住一行配置,就让整个文件长期处于只读状态。Codex 后续还可以继续正常写入 runtime 、skills 、plugins 等信息。

五、还有一个很多人忽略的前提:开启 MFA

这次排查里,另一个非常关键的点是:

不少人是在开启 ChatGPT 账号的 MFA 之后,手机端授权才真正成功。

MFA 就是多因素认证。简单说,就是登录账号时,除了密码之外,再多一层确认,比如认证器 App 的动态验证码。

你可以在 ChatGPT 网页端:

Settings -> Security -> Multi-Factor Authentication

把它打开。

如果你已经改好了本地配置,但手机端还是迟迟连不上,优先检查这一项。

有时候,问题不在 Windows ,也不在 Codex ,而在你的账号还没有满足远程授权的安全条件。

六、最省事的用法:直接把这篇文章发给 Codex

如果你不想自己改文件,也不想自己写脚本,最简单的做法其实是:

把这篇文章完整发给 Codex ,然后让 Codex 按文章内容直接帮你配置。

你可以把下面这段提示词直接复制给 Codex:

请根据这篇文章,直接在我的 Windows 电脑上完成 Codex 远程控制配置。

要求:
1. 先检查当前 Codex 版本、当前分支、C:\Users\<用户名>\.codex\config.toml 的实际内容。
2. 保持所有文件使用 UTF-8 读写,不要破坏已有中文或特殊字符。
3. 在 [features] 下确保存在:
   remote_connections = true
   remote_control = true
4. 如果发现新版 Codex 启动时会删除 remote_control = true ,请创建一个启动脚本:
   C:\Users\<用户名>\.codex\codex-remote.ps1
5. 这个脚本需要:
   - 备份 config.toml
   - 自动补上 remote_control = true
   - 启动前临时把 config.toml 设为只读
   - 启动 Codex
   - 等启动稳定后自动解除只读
6. 完成后实际验证:
   - config.toml 中 remote_control = true 是否保留
   - Codex 重启后是否仍然保留
7. 如果需要我手动做的步骤,例如开启 ChatGPT MFA 、在手机端授权,请明确告诉我。

如果你希望它更主动一点,还可以在最后再加一句:

除非涉及删除大量代码、改公共接口或执行危险操作,否则不要只给方案,请直接完成配置并验证。

七、我最后是怎么成功的

我这次真正跑通,大致是这条路线:

  1. 确认 Windows Codex 已经是新版本
  2. 打开本地 config.toml
  3. [features] 下加入:
remote_connections = true
remote_control = true
  1. 发现重启后 remote_control = true 会被自动删除
  2. 改用启动脚本,先锁住配置,再启动 Codex
  3. 确认 ChatGPT 账号已经开启 MFA
  4. 打开手机上的 ChatGPT App
  5. 进入 Codex ,完成授权
  6. 成功从手机接管 Windows 上的 Codex