如何解决edge更新后copilot logo消失无法使用

省流

运行以下python代码即可,20260130 macos15.7实测可用

import os
import sys
import json
import subprocess

import psutil


def get_version_and_user_data_path():
    os_and_user_data_paths = {
        'win32': {
            'stable': '~/AppData/Local/Microsoft/Edge/User Data',
            'canary': '~/AppData/Local/Microsoft/Edge SxS/User Data',
            'dev': '~/AppData/Local/Microsoft/Edge Dev/User Data',
            'beta': '~/AppData/Local/Microsoft/Edge Beta/User Data',
        },
        'linux': {
            'stable': '~/.config/microsoft-edge',
            'canary': '~/.config/microsoft-edge-canary',
            'dev': '~/.config/microsoft-edge-dev',
            'beta': '~/.config/microsoft-edge-beta',
        },
        'darwin': {
            'stable': '~/Library/Application Support/Microsoft Edge',
            'canary': '~/Library/Application Support/Microsoft Edge Canary',
            'dev': '~/Library/Application Support/Microsoft Edge Dev',
            'beta': '~/Library/Application Support/Microsoft Edge Beta',
        },
    }

    for platform, version_and_user_data_path in os_and_user_data_paths.items():
        available_version_and_user_data_path = {}
        if sys.platform.startswith(platform):
            for version, user_data_path in version_and_user_data_path.items():
                user_data_path = os.path.abspath(os.path.expanduser(user_data_path))
                if os.path.exists(user_data_path):
                    available_version_and_user_data_path[version] = user_data_path
            return available_version_and_user_data_path

    raise Exception('Unsupported platform %s' % sys.platform)


def shutdown_edge():
    terminated_edges = set()
    for process in psutil.process_iter():
        try:
            if sys.platform == 'darwin':
                if not process.name().startswith('Microsoft Edge'):
                    continue
            elif os.path.splitext(process.name())[0] != 'msedge':
                continue
            elif not process.is_running():
                continue
            elif process.parent() is not None and process.parent().name() == process.name():
                continue
            location = process.exe()
            process.kill()
            terminated_edges.add(location)
        except psutil.NoSuchProcess:
            pass
    return terminated_edges


def get_last_version(user_data_path):
    last_version_file = os.path.join(user_data_path, 'Last Version')
    if not os.path.exists(last_version_file):
        return None
    with open(last_version_file, 'r', encoding='utf-8') as fp:
        return fp.read()


def patch_local_state(user_data_path):
    local_state_file = os.path.join(user_data_path, 'Local State')
    if not os.path.exists(local_state_file):
        print('Failed to patch Local State. File not found', local_state_file)

    with open(local_state_file, 'r', encoding='utf-8') as fp:
        local_state = json.load(fp)

    if local_state['variations_country'] != 'US':
        local_state['variations_country'] = 'US'
        with open(local_state_file, 'w', encoding='utf-8') as fp:
            json.dump(local_state, fp)
        print('Succeeded in patching Local State')
    else:
        print('No need to patch Local State')


def patch_preferences(user_data_path):
    for file in os.listdir(user_data_path):
        if not os.path.isdir(file) and file != 'Default' and not file.startswith('Profile '):
            continue

        preferences_file = os.path.join(user_data_path, file, 'Preferences')
        if not os.path.exists(preferences_file) or not os.path.isfile(preferences_file):
            continue
            
        with open(preferences_file, 'r', encoding='utf-8') as fp:
            preferences = json.load(fp)

        if preferences['browser'].get('chat_ip_eligibility_status') in [None, False]:
            preferences['browser']['chat_ip_eligibility_status'] = True
            with open(preferences_file, 'w', encoding='utf-8') as fp:
                json.dump(preferences, fp)
            print('Succeeded in patching Preferences of', file)
        else:
            print('No need to patch Preferences of', file)


def main():
    version_and_user_data_path = get_version_and_user_data_path()
    if len(version_and_user_data_path) == 0:
        raise Exception('No available user data path found')

    terminated_edges = shutdown_edge()
    if len(terminated_edges) > 0:
        print('Shutdown Edge')

    for version, user_data_path in version_and_user_data_path.items():
        last_version = get_last_version(user_data_path)
        if last_version is None:
            print('Failed to get version. File not found', os.path.join(user_data_path, 'Last Version'))
            continue
        main_version = int(last_version.split('.')[0])
        print('Patching Edge', version, last_version, '"'+user_data_path+'"')
        patch_local_state(user_data_path)
        patch_preferences(user_data_path)

    if len(terminated_edges) > 0:
        print('Restart Edge')
        for edge in terminated_edges:
            subprocess.Popen([edge, '--start-maximized'], stderr=subprocess.DEVNULL)

    input('Enter to continue...')


if __name__ == '__main__':
    main()

原文

本文由 简悦 SimpRead 转码, 原文地址 zhuanlan.zhihu.com

概述

本文主要介绍一种通过修改配置文件来解决新版 Edge 浏览器右上角不显示 Copilot 图标的方法,该方法适用于 Edge 的所有版本。

经测试,此方法适用于 windows、macOS 和 linux 系统下的 Edge 浏览器。

另外,文章最后还补充了一种通过下载旧版 Edge 浏览器解决这个问题的方法,以备将来第一种方法失效。

前提

需要科学上网,节点除了俄罗斯、伊朗、叙利亚、古巴、朝鲜、缅甸、巴勒斯坦和东帝汶外没有限制。但如果使用规则 / 分流模式,需要让*.bing.combing.com域名的流量走代理

操作系统:Windows10, macOS Catalina, Debian

测试 Edge 版本:

正式版:120.0.2210.91 (正式版本) (64 位) 和 121.0.2277.83 (正式版本) (64 位)

Dev 版:122.0.2353.0 (Official build) dev (64-bit)

解决思路

经过逐步排查发现,正式版 Edge 浏览器会把用户数据保存在下面这个目录:

Windows 系统: %APPDATA%\..\Local\Microsoft\Edge\User Data

linux 系统: $HOME/.config/microsoft-edge

macOS 系统: $HOME/Library/Application Support/Microsoft Edge

而 Dev 版 Edge 浏览器会把用户数据保存在下面的目录:

Windows 系统: %APPDATA%\..\Local\Microsoft\Edge Dev\User Data

linux 系统: $HOME/.config/microsoft-edge-dev

macOS 系统: $HOME/Library/Application Support/Microsoft Edge Dev

而决定浏览器右上角 Copilot 图标显示与否的开关就藏在浏览器用户数据目录下的某个配置文件中,120 版本在 Local State 文件,121 及以上版本在用户档案文件夹的 Preferences 文件中。

如此,只需要稍微修改一下这个文件就可以了。

省流:如果你只想恢复 Copilot 图标的显示,而不想关注具体实现的细节,你可以直接找到下文的具体步骤 ->2. 修改配置文件 ->(3)编辑配置文件 → 自动化修改,运行其中的 python 脚本或编译好的可执行程序即可恢复 Copilot 图标的显示。

具体步骤

1. 彻底关闭 Edge 浏览器

(1)Windows 和 Linux 系统关闭 Edge

需要彻底关闭浏览器,以防有插件让 Edge 还在后台运行。

点击浏览器右上角三个点,点击下拉列表的 关闭 Microsoft Edge

在 Windows 系统中,为了确认 Edge 浏览器已经完全退出,可以在任务管理器的详细信息中查找是否有名为 msedge.exe 的进程,若有则需要手动结束进程,若无说明 Edge 浏览器已完全退出。

(2)macOS 系统关闭 Edge

在 Edge 浏览器长按 Command + Q 退出。

2. 修改配置文件

(1)找到用户数据目录

首先根据上文的信息,以及自己的操作系统和 Edge 浏览器版本找到对应的浏览器用户数据目录。如:windows10 的正式版 Edge 浏览器的用户数据目录为 %APPDATA%\..\Local\Microsoft\Edge\User Data

  • 如何打开这个目录

1、在 windows10 中:

方法一:按 win + E 打开资源管理器,将这个路径复制到地址栏,按回车即可进入该目录。

方法二:按 win + R 打开运行窗口,输入 explorer "%APPDATA%\..\Local\Microsoft\Edge\User Data" 后打开。

2、在 macOS 中:

正式版 Edge 浏览器的用户数据目录为 $HOME/Library/Application Support/Microsoft Edge

首先在访达中按 Shift + Command + H 打开 $HOME。其中的 Library 文件夹是隐藏起来的,如果用户主目录中没有,可以按 Shift + Command + . 显示出来,如果系统语言是中文的话,这个文件夹名为 资源库。随后逐级打开文件夹进入到该目录。

(2)确定浏览器版本

在 Edge 浏览器地址栏输入 edge://version,按回车打开,第一行显示的就是版本

(3)编辑配置文件

120 版本

如果 Edge 浏览器版本是 120.x.xxxx.xx,则需要修改用户数据目录下的 Local State 文件,这是一个以 JSON 格式保存数据的文本文件,用文本编辑器打开。

搜索 "variations_country":,将其后紧接着的 "CN" 替换为 "US",这对双引号中的值为一个表示国家的 2 字母代码,当它的值为 CNRU 等 Copilot 服务不可用的国家时,Copilot 图标将会被屏蔽;当它的值为 USFR 等国家时,Copilot 就可用了。

也就是说,需要将 "variations_country":"CN" 替换为 "variations_country":"US"

修改完成后保存退出即可。

121 及以上版本

如果 Edge 浏览器版本是 121.x.xxxx.xx、122.x.xxxx.xx 等等大于或等于 121 的版本时,需要在浏览器用户数据目录下找到诸如 DefaultProfile 1Profile 2Profile 3 等的用户档案文件夹,再从中找到 Preferences 文件。

众所周知,Edge 浏览器可以登录多个用户 / 账号,每个登录过的用户都会有其独有的个人数据,每一个用户的这些数据都会保存在浏览器用户数据目录下的一个独立的文件夹中。当只登录过一个用户时,浏览器用户数据目录中就会有一个名为 Default 的文件夹用于保存该用户的个人数据,在此基础上再创建 / 登录一个新的用户时,这个新用户的个人数据就会保存在浏览器用户数据目录中的 Profile 2 文件夹中,当创建第 3 个用户时,其个人数据会保存在 Profile 3 文件夹中,以此类推。

暂且将这些浏览器用户数据目录中的 Default 和类似 Profile 2Profile 3 等的文件夹称为用户档案文件夹 (Profile),每一个用户档案文件夹都保存有一个 Edge 浏览器用户的个人数据。

在每一个用户档案文件夹中都有一个名为 Preferences 的文件,这是一个以 JSON 格式保存数据的文本文件,用文本编辑器打开。

搜索 "chat_ip_eligibility_status":,将其后紧接着的 false 替换为 true

也就是说,需要将 "chat_ip_eligibility_status":false 替换为 "chat_ip_eligibility_status":true

注:若将该文件读取为 JSON,则 chat_ip_eligibility_status 这个键位于 browser 键之下。

若文件中找不到chat_ip_eligibility_status这个键,则需要手动添加,先搜索"browser":{,然后将"browser":{替换为"browser":{"chat_ip_eligibility_status":true,

修改完成后保存退出即可。

当你需要在哪个用户启用 Copilot 图标,就找到这个用户对应的用户档案文件夹,修改其中的 Preferences 文件。

**注意:**对于 Edge 浏览器为 142 及以上的版本,若修改Preferences文件后仍未生效,Copilot 图标仍未出现,可以参照上文提到的编辑 120 版本配置文件的方法,尝试修改用户数据目录下的Local State文件。

当需要同时启用多个用户的 Copilot 图标时,建议使用脚本修改。

自动化修改

当然,还可以写个 Python 脚本,实现一键修改,这样就不用每次都手动修改了。

适用于各个版本和系统的完整 Python 脚本:

https://github.com/jiarandiana0307/patch-edge-copilot

这个脚本能自动关闭 Edge,根据具体浏览器版本修改特定的配置文件,随后重启浏览器,无须再手动执行退出 Edge、改配置文件等操作。

如果电脑上没有安装 python 程序,也可以使用其他人用 Go 语言实现的工具,它们可以编译为可执行程序直接运行:

https://github.com/xiaox0321/patch-edge-copilot

https://github.com/emmm1245/EdgeCopilotFix

打开项目的 Releases 页面即可找到编译好的可执行程序,下载到本地双击运行即可。

3. 科学上网并打开 Edge 浏览器

此时右上角的 Copilot 图标回来了。

注意:如果此后打开 Edge 时没有科学上网,可能会导致 Copilot 图标再次消失,重复以上步骤即可

总结

以下是笔者对相关原理的个人猜测:

Edge 浏览器右上角的 Copilot 图标之所以会消失,是因为用户曾在 Edge 浏览器中以国内 IP 访问过 Bing 的 AI 服务,这样,Edge 浏览器就会认定用户在国内,由于微软不在国内提供 Bing 的 AI 服务,Edge 浏览器便会屏蔽该功能。

通过删除或替换 Edge 的配置文件,可以在本地抹除用户曾以国内 IP 访问过 Bing 服务的痕迹,从而让浏览器误以为用户 IP 并不在国内,进而实现正常使用 Bing AI 服务的目的。

而重装 Edge 浏览器之所以不起作用,是因为用户以国内 IP 访问过 Bing AI 服务的痕迹保存在特定的应用数据路径中,重装 Edge 浏览器并不会清除相关访问数据,Edge 浏览器仍会认定用户在国内,从而屏蔽 AI 功能。

随着 Edge 浏览器的继续更新升级,Edge 的 AI 服务对国内 IP 访问的检测和限制可能会越来越严格,如果上述方法失效可以尝试删除整个保存 Edge 用户数据的文件夹(例如:%AppData%\..\Local\Microsoft\Edge\User Data),但要注意这会导致 Edge 浏览器的所有用户数据的丢失。

补充:下载旧版 Edge

newbing 吧的一个帖子提到可以下载旧版本 Edge 解决

出处:https://tieba.baidu.com/p/8782048284

以下展示 Windows 系统下安装旧版 Edge 浏览器的方法,linux 和 macOS 系统可以如法炮制。

1. 先下载旧版 Edge 安装包

打开官网下载链接:

https://www.microsoft.com/en-us/edge/business/download?form=MA13H4

页面往下可以找到旧版 Edge 的下载方式,选择 Stable 119 版本,再选择对应的系统版本下载,下载后安装即可。

若找不到 119 版本,可以使用互联网档案馆找到过去保存的下载页面(需要科学上网),这就能找到 119 版本的下载安装包了,以下是最后一次保存的含有 119 版本的下载页面:

https://web.archive.org/web/20240118233613/https://www.microsoft.com/en-us/edge/business/download?form=MA13H4

以下是 119.0.2151.97 版本的各系统安装包:

Linux (.rpm): https://packages.microsoft.com/yumrepos/edge/microsoft-edge-stable-119.0.2151.97-1.x86_64.rpm

Linux (.deb): https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_119.0.2151.97-1_amd64.deb

macOS: https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/fec5727f-a1e0-458c-a53d-cc69caef1230/MicrosoftEdge-119.0.2151.97.pkg

Windows ARM64: https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/8ae7f111-a120-41ca-b17c-013fa8bad929/MicrosoftEdgeEnterpriseARM64.msi

Windows 64-bit: https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/1a0dd55d-618e-471b-92fb-5fe178a0e52d/MicrosoftEdgeEnterpriseX64.msi

Windows 32-bit: https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/bc755c09-f5bc-42df-9ea8-54297b2466ee/MicrosoftEdgeEnterpriseX86.msi

2. 使用 Remove-MS-Edge 工具卸载 Edge

此举不会删除 Edge 浏览器的用户数据,可以放心卸载。

该工具的 github 项目地址:

https://github.com/ShadowWhisperer/Remove-MS-Edge

这里使用该工具的 GUI 版本进行演示:

(1)打开以下链接下载 Remove-Edge_GUI.exe

https://github.com/ShadowWhisperer/Remove-MS-Edge/blob/main/Remove-Edge_GUI.exe?raw=true

如果报毒不用理会,继续下载并保留程序

(2)运行程序,点击 Remove 等待显示 Finish 完成卸载

3. 安装 Edge

运行步骤 1 下载的旧版 Edge 安装包完成安装

4. 禁用更新

为了防止 Edge 浏览器自动更新至最新版本,可以通过禁用更新服务和修改更新程序的方式来禁止 Edge 浏览器更新。

以 Windows 为例,具体是遍历 %ProgramFiles(x86)%\Microsoft 目录及其子目录中的文件,将所有类似MicrosoftEdgeUpdate.exe, elevation_service.exe 等的更新程序重命名,将它们重命名后,Edge 浏览器就会因为找不到更新程序而无法更新。当需要更新浏览器时,只需改回原名即可。

使用 Python 脚本实现这一功能:

https://github.com/jiarandiana0307/edge-update-switch

此脚本支持 Windows 和 macOS。