You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
211 lines
6.6 KiB
211 lines
6.6 KiB
#!/bin/bash
|
|
|
|
# 版本号 - 与其他文件保持一致
|
|
VERSION="2.5.0"
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
# 语言检测优化
|
|
detect_language() {
|
|
local lang
|
|
if [ -n "$LANG" ]; then
|
|
lang="$LANG"
|
|
else
|
|
lang=$(locale | grep "LANG=" | cut -d= -f2)
|
|
fi
|
|
|
|
if [[ $lang == *"zh"* ]]; then
|
|
echo "cn"
|
|
else
|
|
echo "en"
|
|
fi
|
|
}
|
|
|
|
LANG=$(detect_language)
|
|
|
|
# 多语言文本 - 修复编码问题
|
|
if [ "$LANG" == "cn" ]; then
|
|
SUCCESS_MSG="[√] 配置文件已成功更新!"
|
|
RESTART_MSG="[!] 请手动重启 Cursor 以使更新生效"
|
|
READING_CONFIG="正在读取配置文件..."
|
|
GENERATING_IDS="正在生成新的标识符..."
|
|
CHECKING_PROCESSES="正在检查运行中的 Cursor 实例..."
|
|
CLOSING_PROCESSES="正在关闭 Cursor 实例..."
|
|
PROCESSES_CLOSED="所有 Cursor 实例已关闭"
|
|
PLEASE_WAIT="请稍候..."
|
|
ERROR_NO_ROOT="请使用 sudo 运行此脚本"
|
|
ERROR_CONFIG_PATH="无法获取配置文件路径"
|
|
ERROR_CREATE_DIR="无法创建配置目录"
|
|
ERROR_WRITE_CONFIG="无法写入配置文件"
|
|
else
|
|
SUCCESS_MSG="[√] Configuration file updated successfully!"
|
|
RESTART_MSG="[!] Please restart Cursor manually for changes to take effect"
|
|
READING_CONFIG="Reading configuration file..."
|
|
GENERATING_IDS="Generating new identifiers..."
|
|
CHECKING_PROCESSES="Checking for running Cursor instances..."
|
|
CLOSING_PROCESSES="Closing Cursor instances..."
|
|
PROCESSES_CLOSED="All Cursor instances have been closed"
|
|
PLEASE_WAIT="Please wait..."
|
|
ERROR_NO_ROOT="Please run this script with sudo"
|
|
ERROR_CONFIG_PATH="Unable to get config file path"
|
|
ERROR_CREATE_DIR="Unable to create config directory"
|
|
ERROR_WRITE_CONFIG="Unable to write config file"
|
|
fi
|
|
|
|
# 生成随机ID - 添加错误处理
|
|
generate_machine_id() {
|
|
if ! command -v openssl >/dev/null 2>&1; then
|
|
echo "$(head -c 32 /dev/urandom | xxd -p)"
|
|
else
|
|
openssl rand -hex 32
|
|
fi
|
|
}
|
|
|
|
generate_dev_device_id() {
|
|
local uuid=""
|
|
if command -v uuidgen >/dev/null 2>&1; then
|
|
uuid=$(uuidgen)
|
|
else
|
|
uuid=$(printf '%04x%04x-%04x-%04x-%04x-%04x%04x%04x' \
|
|
$RANDOM $RANDOM \
|
|
$RANDOM \
|
|
$(($RANDOM & 0x0fff | 0x4000)) \
|
|
$(($RANDOM & 0x3fff | 0x8000)) \
|
|
$RANDOM $RANDOM $RANDOM)
|
|
fi
|
|
echo "$uuid"
|
|
}
|
|
|
|
# 获取配置文件路径 - 优化路径处理
|
|
get_config_path() {
|
|
local username=$1
|
|
case "$(uname)" in
|
|
"Darwin")
|
|
echo "/Users/$username/Library/Application Support/Cursor/User/globalStorage/storage.json"
|
|
;;
|
|
"Linux")
|
|
echo "/home/$username/.config/Cursor/User/globalStorage/storage.json"
|
|
;;
|
|
*)
|
|
echo ""
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# 检查Cursor进程 - 添加错误处理
|
|
check_cursor_running() {
|
|
if ! command -v pgrep >/dev/null 2>&1; then
|
|
ps aux | grep -i "Cursor\|AppRun" | grep -v grep >/dev/null
|
|
else
|
|
pgrep -f "Cursor|AppRun" >/dev/null
|
|
fi
|
|
}
|
|
|
|
# 关闭Cursor进程 - 优化进程关闭
|
|
kill_cursor_processes() {
|
|
echo -e "${CYAN}$CLOSING_PROCESSES${NC}"
|
|
if command -v pkill >/dev/null 2>&1; then
|
|
pkill -f "Cursor|AppRun"
|
|
else
|
|
killall Cursor 2>/dev/null
|
|
killall AppRun 2>/dev/null
|
|
fi
|
|
sleep 2
|
|
if check_cursor_running; then
|
|
if command -v pkill >/dev/null 2>&1; then
|
|
pkill -9 -f "Cursor|AppRun"
|
|
else
|
|
killall -9 Cursor 2>/dev/null
|
|
killall -9 AppRun 2>/dev/null
|
|
fi
|
|
fi
|
|
echo -e "${GREEN}$PROCESSES_CLOSED${NC}"
|
|
}
|
|
|
|
# 打印banner - 修复显示问题
|
|
print_banner() {
|
|
echo -e "${CYAN}"
|
|
echo ' ██████╗██╗ ██╗██████╗ ███████╗ ██████╗ ██████╗ '
|
|
echo ' ██╔════╝██║ ██║██╔══██╗██╔════╝██╔═══██╗██╔══██╗'
|
|
echo ' ██║ ██║ ██║██████╔╝███████╗██║ ██║██████╔╝'
|
|
echo ' ██║ ██║ ██║██╔══██╗╚════██║██║ ██║██╔══██╗'
|
|
echo ' ╚██████╗╚██████╔╝██║ ██║███████║╚██████╔╝██║ ██║'
|
|
echo ' ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝'
|
|
echo -e "${NC}"
|
|
echo -e "${YELLOW}\t\t>> Cursor ID Modifier ${VERSION} <<${NC}"
|
|
echo -e "${CYAN}\t\t [ By Pancake Fruit Rolled Shark Chili ]${NC}"
|
|
echo
|
|
}
|
|
|
|
# 主函数 - 添加错误处理
|
|
main() {
|
|
# 检查root权限
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo -e "${RED}${ERROR_NO_ROOT}${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 获取实际用户名
|
|
REAL_USER=${SUDO_USER:-$USER}
|
|
|
|
clear
|
|
print_banner
|
|
|
|
# 确保Cursor已关闭
|
|
if check_cursor_running; then
|
|
kill_cursor_processes
|
|
fi
|
|
|
|
CONFIG_PATH=$(get_config_path "$REAL_USER")
|
|
if [ -z "$CONFIG_PATH" ]; then
|
|
echo -e "${RED}${ERROR_CONFIG_PATH}${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "${CYAN}$READING_CONFIG${NC}"
|
|
|
|
# 生成新配置
|
|
echo -e "${CYAN}$GENERATING_IDS${NC}"
|
|
NEW_CONFIG=$(cat <<EOF
|
|
{
|
|
"telemetry.macMachineId": "$(generate_machine_id)",
|
|
"telemetry.machineId": "$(generate_machine_id)",
|
|
"telemetry.devDeviceId": "$(generate_dev_device_id)",
|
|
"telemetry.sqmId": "$(generate_machine_id)"
|
|
}
|
|
EOF
|
|
)
|
|
|
|
# 创建目录(如果不存在)
|
|
if ! mkdir -p "$(dirname "$CONFIG_PATH")" 2>/dev/null; then
|
|
echo -e "${RED}${ERROR_CREATE_DIR}${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 保存配置
|
|
if ! echo "$NEW_CONFIG" > "$CONFIG_PATH"; then
|
|
echo -e "${RED}${ERROR_WRITE_CONFIG}${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
chown "$REAL_USER" "$CONFIG_PATH" 2>/dev/null
|
|
chmod 644 "$CONFIG_PATH" 2>/dev/null
|
|
|
|
# 显示成功消息
|
|
echo -e "\n${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
echo -e "${GREEN}$SUCCESS_MSG${NC}"
|
|
echo -e "${YELLOW}$RESTART_MSG${NC}"
|
|
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
|
|
echo -e "\n配置文件位置/Config file location:"
|
|
echo -e "${CYAN}$CONFIG_PATH${NC}\n"
|
|
|
|
read -p "Press Enter to exit..."
|
|
}
|
|
|
|
main "$@"
|