Browse Source

feat: Add alternative script installation methods for Linux/macOS and Windows

- Introduced platform-specific scripts (`cursor_modifier.sh` for Linux/macOS and `cursor_modifier.bat` for Windows) to streamline the installation process.
- Scripts automate system language detection, close running Cursor instances, generate new IDs, and update configuration files with a user-friendly interface.
- Updated README.md to include detailed instructions for using the new scripts, enhancing user experience and accessibility.

These changes improve the installation process by providing users with flexible options for setup across different operating systems.
pull/30/head
Xx 6 months ago
parent
commit
1a4e5c737f
  1. 52
      README.md
  2. 141
      cursor_modifier.bat
  3. 164
      cursor_modifier.sh

52
README.md

@ -66,6 +66,32 @@ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManage
```
5. Save the file and restart Cursor
#### Script Method (Alternative)
If you prefer using scripts directly, you can use these platform-specific scripts:
**For Linux/macOS:**
1. Download the [cursor_modifier.sh](scripts/cursor_modifier.sh)
2. Make it executable:
```bash
chmod +x cursor_modifier.sh
```
3. Run with sudo:
```bash
sudo ./cursor_modifier.sh
```
**For Windows:**
1. Download the [cursor_modifier.bat](scripts/cursor_modifier.bat)
2. Right-click and "Run as administrator"
These scripts will:
- Automatically detect system language (English/Chinese)
- Check for and close any running Cursor instances
- Generate new random IDs
- Update the configuration file
- Show the results with a nice UI
### ๐Ÿ”ง Technical Details
The program modifies Cursor's `storage.json` config file:
@ -135,6 +161,32 @@ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManage
```
5. ไฟๅญ˜ๆ–‡ไปถๅนถ้‡ๅฏ Cursor
#### ่„šๆœฌๆ–นๆณ•๏ผˆๆ›ฟไปฃๆ–นๆณ•๏ผ‰
ๅฆ‚ๆžœๆ‚จๅ–œๆฌข็›ดๆŽฅไฝฟ็”จ่„šๆœฌ๏ผŒๅฏไปฅไฝฟ็”จ่ฟ™ไบ›็‰นๅฎšๅนณๅฐ็š„่„šๆœฌ๏ผš
**้€‚็”จไบŽ Linux/macOS๏ผš**
1. ไธ‹่ฝฝ [cursor_modifier.sh](scripts/cursor_modifier.sh)
2. ไฝฟๅ…ถๅฏๆ‰ง่กŒ๏ผš
```bash
chmod +x cursor_modifier.sh
```
3. ็”จ sudo ่ฟ่กŒ
```bash
sudo ./cursor_modifier.sh
```
**้€‚็”จไบŽ Windows๏ผš**
1. ไธ‹่ฝฝ [cursor_modifier.bat]๏ผˆ่„šๆœฌ/cursor_modifier.bat๏ผ‰
2. ๅณ้”ฎๅ•ๅ‡ปๅนถ โ€œไปฅ็ฎก็†ๅ‘˜่บซไปฝ่ฟ่กŒโ€ใ€‚
่ฟ™ไบ›่„šๆœฌๅฐ†
- ่‡ชๅŠจๆฃ€ๆต‹็ณป็ปŸ่ฏญ่จ€๏ผˆ่‹ฑ่ฏญ/ไธญๆ–‡๏ผ‰
- ๆฃ€ๆŸฅๅนถๅ…ณ้—ญไปปไฝ•ๆญฃๅœจ่ฟ่กŒ็š„ๅ…‰ๆ ‡ๅฎžไพ‹
- ็”Ÿๆˆๆ–ฐ็š„้šๆœบ ID
- ๆ›ดๆ–ฐ้…็ฝฎๆ–‡ไปถ
- ไปฅๆผ‚ไบฎ็š„็”จๆˆท็•Œ้ขๆ˜พ็คบ็ป“ๆžœ
### ๐Ÿ”ง ๆŠ€ๆœฏ็ป†่Š‚
็จ‹ๅบไฟฎๆ”นCursor็š„`storage.json`้…็ฝฎๆ–‡ไปถ๏ผš

141
cursor_modifier.bat

@ -0,0 +1,141 @@
@echo off
chcp 65001 >nul
setlocal EnableDelayedExpansion
:: ็‰ˆๆœฌๅท
set "VERSION=1.0.1"
:: ๆฃ€ๆต‹่ฏญ่จ€
for /f "tokens=2 delims==" %%a in ('wmic os get OSLanguage /value') do set OSLanguage=%%a
if "%OSLanguage%"=="2052" (
set "LANG=cn"
) else (
set "LANG=en"
)
:: ๅคš่ฏญ่จ€ๆ–‡ๆœฌ
if "%LANG%"=="cn" (
set "SUCCESS_MSG=[โˆš] ้…็ฝฎๆ–‡ไปถๅทฒๆˆๅŠŸๆ›ดๆ–ฐ๏ผ"
set "RESTART_MSG=[!] ่ฏทๆ‰‹ๅŠจ้‡ๅฏ Cursor ไปฅไฝฟๆ›ดๆ–ฐ็”Ÿๆ•ˆ"
set "READING_CONFIG=ๆญฃๅœจ่ฏปๅ–้…็ฝฎๆ–‡ไปถ..."
set "GENERATING_IDS=ๆญฃๅœจ็”Ÿๆˆๆ–ฐ็š„ๆ ‡่ฏ†็ฌฆ..."
set "CHECKING_PROCESSES=ๆญฃๅœจๆฃ€ๆŸฅ่ฟ่กŒไธญ็š„ Cursor ๅฎžไพ‹..."
set "CLOSING_PROCESSES=ๆญฃๅœจๅ…ณ้—ญ Cursor ๅฎžไพ‹..."
set "PROCESSES_CLOSED=ๆ‰€ๆœ‰ Cursor ๅฎžไพ‹ๅทฒๅ…ณ้—ญ"
set "PLEASE_WAIT=่ฏท็จๅ€™..."
) else (
set "SUCCESS_MSG=[โˆš] Configuration file updated successfully!"
set "RESTART_MSG=[!] Please restart Cursor manually for changes to take effect"
set "READING_CONFIG=Reading configuration file..."
set "GENERATING_IDS=Generating new identifiers..."
set "CHECKING_PROCESSES=Checking for running Cursor instances..."
set "CLOSING_PROCESSES=Closing Cursor instances..."
set "PROCESSES_CLOSED=All Cursor instances have been closed"
set "PLEASE_WAIT=Please wait..."
)
:: ๆฃ€ๆŸฅ็ฎก็†ๅ‘˜ๆƒ้™
net session >nul 2>&1
if %errorLevel% neq 0 (
echo ่ฏทไปฅ็ฎก็†ๅ‘˜่บซไปฝ่ฟ่กŒๆญค่„šๆœฌ
echo Please run this script as administrator
pause
exit /b 1
)
:: ็”Ÿๆˆ้šๆœบID
:generateId
set "id="
for /L %%i in (1,1,32) do (
set /a "r=!random! %% 16"
set "hex=0123456789abcdef"
for %%j in (!r!) do set "id=!id!!hex:~%%j,1!"
)
exit /b
:: ็”ŸๆˆUUID
:generateUUID
set "uuid="
for /L %%i in (1,1,32) do (
set /a "r=!random! %% 16"
set "hex=0123456789abcdef"
for %%j in (!r!) do set "uuid=!uuid!!hex:~%%j,1!"
if %%i==8 set "uuid=!uuid!-"
if %%i==12 set "uuid=!uuid!-"
if %%i==16 set "uuid=!uuid!-"
if %%i==20 set "uuid=!uuid!-"
)
exit /b
:: ไธป็จ‹ๅบ
:main
cls
call :printBanner
echo %CHECKING_PROCESSES%
tasklist | find /i "Cursor.exe" >nul
if %errorLevel% equ 0 (
echo %CLOSING_PROCESSES%
taskkill /F /IM "Cursor.exe" >nul 2>&1
timeout /t 2 >nul
echo %PROCESSES_CLOSED%
)
set "CONFIG_PATH=%APPDATA%\Cursor\User\globalStorage\storage.json"
echo %READING_CONFIG%
echo %GENERATING_IDS%
call :generateId
set "machineId=!id!"
call :generateId
set "macMachineId=!id!"
call :generateUUID
set "devDeviceId=!uuid!"
call :generateId
set "sqmId=!id!"
:: ๅˆ›ๅปบ้…็ฝฎ็›ฎๅฝ•
if not exist "%APPDATA%\Cursor\User\globalStorage" (
mkdir "%APPDATA%\Cursor\User\globalStorage"
)
:: ็”Ÿๆˆ้…็ฝฎๆ–‡ไปถ
(
echo {
echo "telemetry.macMachineId": "%macMachineId%",
echo "telemetry.machineId": "%machineId%",
echo "telemetry.devDeviceId": "%devDeviceId%",
echo "telemetry.sqmId": "%sqmId%",
echo "lastModified": "%date:~10,4%-%date:~4,2%-%date:~7,2%T%time:~0,2%:%time:~3,2%:%time:~6,2%Z",
echo "version": "%VERSION%"
echo }
) > "%CONFIG_PATH%"
echo.
echo โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
echo %SUCCESS_MSG%
echo %RESTART_MSG%
echo โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
echo.
echo Config file location:
echo %CONFIG_PATH%
echo.
pause
exit /b
:: ๆ‰“ๅฐbanner
:printBanner
echo.
echo โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•— โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•— โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—
echo โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ–ˆโ–ˆโ•” โ•โ•โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—
echo โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•
echo โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—โ•šโ•โ•โ•โ•โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•”โ•โ•โ–ˆโ–ˆโ•—
echo โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•‘โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•โ–ˆโ–ˆโ•‘ โ–ˆโ–ˆโ•‘
echo โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ• โ•šโ•โ•โ•šโ•โ•โ•โ•โ•โ•โ• โ•šโ•โ•โ•โ•โ•โ• โ•šโ•โ• โ•šโ•โ•
echo.
echo ^>^> Cursor ID Modifier v1.0 ^<^<
echo [ By Pancake Fruit Rolled Shark Chili ]
echo.
exit /b
endlocal

164
cursor_modifier.sh

@ -0,0 +1,164 @@
#!/bin/bash
# ็‰ˆๆœฌๅท
VERSION="1.0.1"
# ้ขœ่‰ฒๅฎšไน‰
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'
# ่ฏญ่จ€ๆฃ€ๆต‹
detect_language() {
local lang=$(locale | grep "LANG=" | cut -d= -f2)
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="่ฏท็จๅ€™..."
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..."
fi
# ็”Ÿๆˆ้šๆœบID
generate_machine_id() {
openssl rand -hex 32
}
generate_dev_device_id() {
printf '%04x%04x-%04x-%04x-%04x-%04x%04x%04x' \
$RANDOM $RANDOM \
$RANDOM \
$(($RANDOM & 0x0fff | 0x4000)) \
$(($RANDOM & 0x3fff | 0x8000)) \
$RANDOM $RANDOM $RANDOM
}
# ่Žทๅ–้…็ฝฎๆ–‡ไปถ่ทฏๅพ„
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 "Unsupported operating system"
exit 1
;;
esac
}
# ๆฃ€ๆŸฅCursor่ฟ›็จ‹
check_cursor_running() {
pgrep -f "Cursor|AppRun" >/dev/null
}
# ๅ…ณ้—ญCursor่ฟ›็จ‹
kill_cursor_processes() {
echo -e "${CYAN}$CLOSING_PROCESSES${NC}"
pkill -f "Cursor|AppRun"
sleep 2
if check_cursor_running; then
pkill -9 -f "Cursor|AppRun"
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 v1.0 <<${NC}"
echo -e "${CYAN}\t\t [ By Pancake Fruit Rolled Shark Chili ]${NC}"
echo
}
# ไธปๅ‡ฝๆ•ฐ
main() {
# ๆฃ€ๆŸฅrootๆƒ้™
if [ "$EUID" -ne 0 ]; then
echo "Please run as root"
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")
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)",
"lastModified": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
"version": "$VERSION"
}
EOF
)
# ๅˆ›ๅปบ็›ฎๅฝ•(ๅฆ‚ๆžœไธๅญ˜ๅœจ)
mkdir -p "$(dirname "$CONFIG_PATH")"
# ไฟๅญ˜้…็ฝฎ
echo "$NEW_CONFIG" > "$CONFIG_PATH"
chown "$REAL_USER" "$CONFIG_PATH"
chmod 644 "$CONFIG_PATH"
# ๆ˜พ็คบๆˆๅŠŸๆถˆๆฏ
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 "$@"
Loadingโ€ฆ
Cancel
Save