Skip to content

Instantly share code, notes, and snippets.

@febritecno
Last active October 29, 2025 11:35
Show Gist options
  • Select an option

  • Save febritecno/e0650642300283049eb8618941f23c79 to your computer and use it in GitHub Desktop.

Select an option

Save febritecno/e0650642300283049eb8618941f23c79 to your computer and use it in GitHub Desktop.
power-up ur scrcpy, make easy handle virtual display
#!/bin/bash
# ===================================================
# Virtual Display Manager CLI (Single Display Only)
# Auto Stop, Force Portrait, Extended Profiles
# Mencakup Smartphone & Tablet dari semua brand
# ===================================================
APP_ID="com.example.virtualcli"
SERVICE_NAME="$APP_ID/.VirtualDisplayService"
TMP_PKGLIST="/tmp/vdisplay_pkglist.txt"
# --- Default safe cleanup ---
stop_vdisplay() {
echo
echo "[*] Cleanup: menghentikan VirtualDisplay dan mengembalikan pengaturan..."
# Hentikan scrcpy jika masih berjalan
if [[ -n "$SCRCPY_PID" ]] && ps -p $SCRCPY_PID > /dev/null 2>&1; then
echo "[*] Menutup scrcpy (PID=$SCRCPY_PID)..."
kill $SCRCPY_PID >/dev/null 2>&1
wait $SCRCPY_PID 2>/dev/null
fi
# Hentikan VirtualDisplayService
adb shell am stopservice $SERVICE_NAME >/dev/null 2>&1
# Reset resolusi & density
adb shell wm size reset >/dev/null 2>&1
adb shell wm density reset >/dev/null 2>&1
# Reset rotasi & accelerometer
adb shell settings put system accelerometer_rotation 1 >/dev/null 2>&1
adb shell settings put system user_rotation 0 >/dev/null 2>&1
# Aktifkan charging kembali
enable_charging
echo "[βœ“] Semua dikembalikan normal."
}
# Trap ANY exit or signal
trap stop_vdisplay EXIT INT TERM
# === PROFILE DEFINITIONS (PORTRAIT MODE) ===
show_profiles() {
echo "πŸ“± ===== SMARTPHONE PROFILES (Portrait Mode) ====="
echo
echo "πŸ”· SAMSUNG GALAXY SERIES:"
echo " 1) Galaxy S24 Ultra β†’ 1440x3120 @ 505dpi"
echo " 2) Galaxy S24+ β†’ 1440x3120 @ 480dpi"
echo " 3) Galaxy S24 β†’ 1080x2340 @ 416dpi"
echo " 4) Galaxy S23 Ultra β†’ 1440x3088 @ 500dpi"
echo " 5) Galaxy S23+ β†’ 1080x2340 @ 393dpi"
echo " 6) Galaxy S23 β†’ 1080x2340 @ 420dpi"
echo " 7) Galaxy S22 Ultra β†’ 1440x3088 @ 500dpi"
echo " 8) Galaxy S22+ β†’ 1080x2340 @ 393dpi"
echo " 9) Galaxy S22 β†’ 1080x2340 @ 420dpi"
echo " 10) Galaxy S21 Ultra β†’ 1440x3200 @ 515dpi"
echo " 11) Galaxy S21+ β†’ 1080x2400 @ 394dpi"
echo " 12) Galaxy S21 β†’ 1080x2400 @ 420dpi"
echo " 13) Galaxy Z Fold 5 β†’ 1812x2176 @ 373dpi (unfolded)"
echo " 14) Galaxy Z Flip 5 β†’ 1080x2640 @ 425dpi"
echo " 15) Galaxy A54 β†’ 1080x2340 @ 403dpi"
echo " 16) Galaxy A34 β†’ 1080x2340 @ 403dpi"
echo " 17) Galaxy A24 β†’ 1080x2340 @ 400dpi"
echo " 18) Galaxy A14 β†’ 1080x2408 @ 400dpi"
echo " 19) Galaxy M54 β†’ 1080x2400 @ 393dpi"
echo " 20) Galaxy M34 β†’ 1080x2340 @ 390dpi"
echo
echo "πŸ”· GOOGLE PIXEL SERIES:"
echo " 21) Pixel 8 Pro β†’ 1344x2992 @ 489dpi"
echo " 22) Pixel 8 β†’ 1080x2400 @ 440dpi"
echo " 23) Pixel 7 Pro β†’ 1440x3120 @ 512dpi"
echo " 24) Pixel 7 β†’ 1080x2400 @ 420dpi"
echo " 25) Pixel 7a β†’ 1080x2400 @ 420dpi"
echo " 26) Pixel 6 Pro β†’ 1440x3120 @ 512dpi"
echo " 27) Pixel 6 β†’ 1080x2400 @ 411dpi"
echo " 28) Pixel 6a β†’ 1080x2400 @ 420dpi"
echo
echo "πŸ”· APPLE iPHONE SERIES:"
echo " 29) iPhone 15 Pro Max β†’ 1290x2796 @ 460dpi"
echo " 30) iPhone 15 Pro β†’ 1179x2556 @ 460dpi"
echo " 31) iPhone 15 Plus β†’ 1290x2796 @ 460dpi"
echo " 32) iPhone 15 β†’ 1179x2556 @ 460dpi"
echo " 33) iPhone 14 Pro Max β†’ 1290x2796 @ 460dpi"
echo " 34) iPhone 14 Pro β†’ 1179x2556 @ 460dpi"
echo " 35) iPhone 14 Plus β†’ 1284x2778 @ 458dpi"
echo " 36) iPhone 14 β†’ 1170x2532 @ 460dpi"
echo " 37) iPhone 13 Pro Max β†’ 1284x2778 @ 458dpi"
echo " 38) iPhone 13 Pro β†’ 1170x2532 @ 460dpi"
echo " 39) iPhone 13 β†’ 1170x2532 @ 460dpi"
echo " 40) iPhone 13 mini β†’ 1080x2340 @ 476dpi"
echo " 41) iPhone 12 Pro Max β†’ 1284x2778 @ 458dpi"
echo " 42) iPhone 12 Pro β†’ 1170x2532 @ 460dpi"
echo " 43) iPhone 12 β†’ 1170x2532 @ 460dpi"
echo " 44) iPhone SE 2022 β†’ 750x1334 @ 326dpi"
echo
echo "πŸ”· XIAOMI SERIES:"
echo " 45) Xiaomi 14 Ultra β†’ 1440x3200 @ 522dpi"
echo " 46) Xiaomi 14 Pro β†’ 1440x3200 @ 522dpi"
echo " 47) Xiaomi 14 β†’ 1440x3200 @ 480dpi"
echo " 48) Xiaomi 13 Ultra β†’ 1440x3200 @ 522dpi"
echo " 49) Xiaomi 13 Pro β†’ 1440x3200 @ 522dpi"
echo " 50) Xiaomi 13 β†’ 1080x2400 @ 419dpi"
echo " 51) Xiaomi 13T Pro β†’ 1220x2712 @ 446dpi"
echo " 52) Xiaomi 13T β†’ 1220x2712 @ 446dpi"
echo " 53) Xiaomi 12 Pro β†’ 1440x3200 @ 521dpi"
echo " 54) Xiaomi 12 β†’ 1080x2400 @ 419dpi"
echo
echo "πŸ”· REDMI SERIES:"
echo " 55) Redmi Note 13 Pro+ β†’ 1220x2712 @ 446dpi"
echo " 56) Redmi Note 13 Pro β†’ 1080x2400 @ 395dpi"
echo " 57) Redmi Note 13 β†’ 1080x2400 @ 395dpi"
echo " 58) Redmi Note 12 Pro+ β†’ 1080x2400 @ 395dpi"
echo " 59) Redmi Note 12 Pro β†’ 1080x2400 @ 395dpi"
echo " 60) Redmi Note 12 β†’ 1080x2460 @ 400dpi"
echo " 61) Redmi 13C β†’ 720x1650 @ 260dpi"
echo " 62) Redmi 12 β†’ 1080x2460 @ 400dpi"
echo " 63) Redmi K60 Ultra β†’ 1440x3200 @ 526dpi"
echo " 64) Redmi K60 Pro β†’ 1440x3200 @ 526dpi"
echo
echo "πŸ”· POCO SERIES:"
echo " 65) POCO F6 Pro β†’ 1440x3200 @ 526dpi"
echo " 66) POCO F6 β†’ 1220x2712 @ 446dpi"
echo " 67) POCO X6 Pro β†’ 1440x3200 @ 526dpi"
echo " 68) POCO X6 β†’ 1080x2400 @ 395dpi"
echo " 69) POCO M6 Pro β†’ 1080x2400 @ 395dpi"
echo " 70) POCO C65 β†’ 720x1650 @ 260dpi"
echo
echo "πŸ”· ONEPLUS SERIES:"
echo " 71) OnePlus 12 β†’ 1440x3168 @ 510dpi"
echo " 72) OnePlus 11 β†’ 1440x3216 @ 525dpi"
echo " 73) OnePlus 10 Pro β†’ 1440x3216 @ 525dpi"
echo " 74) OnePlus 10T β†’ 1080x2412 @ 402dpi"
echo " 75) OnePlus Nord 3 β†’ 1080x2400 @ 394dpi"
echo " 76) OnePlus Nord CE 3 β†’ 1080x2400 @ 394dpi"
echo
echo "πŸ”· OPPO SERIES:"
echo " 77) Oppo Find X7 Ultra β†’ 1440x3168 @ 510dpi"
echo " 78) Oppo Find X6 Pro β†’ 1440x3216 @ 525dpi"
echo " 79) Oppo Reno 11 Pro β†’ 1080x2412 @ 394dpi"
echo " 80) Oppo Reno 11 β†’ 1080x2400 @ 394dpi"
echo " 81) Oppo Reno 10 Pro+ β†’ 1080x2412 @ 394dpi"
echo " 82) Oppo A79 β†’ 1080x2400 @ 391dpi"
echo " 83) Oppo A78 β†’ 1080x2400 @ 391dpi"
echo
echo "πŸ”· VIVO SERIES:"
echo " 84) Vivo X100 Pro β†’ 1440x3200 @ 517dpi"
echo " 85) Vivo X100 β†’ 1260x2800 @ 452dpi"
echo " 86) Vivo V30 Pro β†’ 1080x2400 @ 395dpi"
echo " 87) Vivo V30 β†’ 1080x2400 @ 395dpi"
echo " 88) Vivo V29 Pro β†’ 1080x2400 @ 395dpi"
echo " 89) Vivo Y100 β†’ 1080x2400 @ 391dpi"
echo " 90) Vivo Y56 β†’ 1080x2408 @ 401dpi"
echo
echo "πŸ”· REALME SERIES:"
echo " 91) Realme GT 5 Pro β†’ 1240x2772 @ 450dpi"
echo " 92) Realme 12 Pro+ β†’ 1080x2412 @ 405dpi"
echo " 93) Realme 12 Pro β†’ 1080x2412 @ 405dpi"
echo " 94) Realme 12 β†’ 1080x2412 @ 405dpi"
echo " 95) Realme 11 Pro+ β†’ 1080x2412 @ 394dpi"
echo " 96) Realme C67 β†’ 720x1604 @ 260dpi"
echo
echo "πŸ”· ASUS SERIES:"
echo " 97) Asus ROG Phone 8 β†’ 1080x2400 @ 395dpi"
echo " 98) Asus ROG Phone 7 β†’ 1080x2448 @ 395dpi"
echo " 99) Asus Zenfone 10 β†’ 1080x2400 @ 445dpi"
echo " 100) Asus Zenfone 9 β†’ 1080x2400 @ 445dpi"
echo
echo "πŸ”· SONY SERIES:"
echo " 101) Sony Xperia 1 V β†’ 1644x3840 @ 643dpi"
echo " 102) Sony Xperia 5 V β†’ 1080x2520 @ 449dpi"
echo " 103) Sony Xperia 10 V β†’ 1080x2520 @ 457dpi"
echo
echo "πŸ”· MOTOROLA SERIES:"
echo " 104) Moto Edge 40 Pro β†’ 1080x2400 @ 395dpi"
echo " 105) Moto G84 β†’ 1080x2400 @ 395dpi"
echo " 106) Moto G54 β†’ 1080x2400 @ 395dpi"
echo
echo "πŸ”· NOTHING SERIES:"
echo " 107) Nothing Phone (2) β†’ 1080x2400 @ 394dpi"
echo " 108) Nothing Phone (1) β†’ 1080x2400 @ 394dpi"
echo
echo "πŸ”· HONOR SERIES:"
echo " 109) Honor Magic 6 Pro β†’ 1280x2800 @ 453dpi"
echo " 110) Honor 90 β†’ 1080x2400 @ 394dpi"
echo " 111) Honor X9b β†’ 1080x2412 @ 394dpi"
echo
echo "πŸ”· INFINIX SERIES:"
echo " 112) Infinix Note 30 β†’ 1080x2400 @ 396dpi"
echo " 113) Infinix Hot 30 β†’ 1080x2460 @ 395dpi"
echo
echo "πŸ”· TECNO SERIES:"
echo " 114) Tecno Camon 20 β†’ 1080x2400 @ 396dpi"
echo " 115) Tecno Spark 10 β†’ 720x1612 @ 260dpi"
echo
echo "πŸ“± ===== TABLET PROFILES (Portrait Mode) ====="
echo
echo "πŸ”· iPAD SERIES:"
echo " 116) iPad Pro 12.9\" (M2) β†’ 2048x2732 @ 264dpi"
echo " 117) iPad Pro 11\" (M2) β†’ 1668x2388 @ 264dpi"
echo " 118) iPad Air 5 β†’ 1640x2360 @ 264dpi"
echo " 119) iPad 10 β†’ 1640x2360 @ 264dpi"
echo " 120) iPad mini 6 β†’ 1488x2266 @ 326dpi"
echo
echo "πŸ”· SAMSUNG TABLET:"
echo " 121) Tab S9 Ultra β†’ 1848x2960 @ 266dpi"
echo " 122) Tab S9+ β†’ 1752x2800 @ 266dpi"
echo " 123) Tab S9 β†’ 1600x2560 @ 274dpi"
echo " 124) Tab S8 Ultra β†’ 1848x2960 @ 266dpi"
echo " 125) Tab S8+ β†’ 1752x2800 @ 266dpi"
echo " 126) Tab S8 β†’ 1600x2560 @ 274dpi"
echo " 127) Tab A9+ β†’ 1200x1920 @ 240dpi"
echo " 128) Tab A8 β†’ 1200x1920 @ 240dpi"
echo
echo "πŸ”· XIAOMI TABLET:"
echo " 129) Pad 6 Pro β†’ 1800x2880 @ 308dpi"
echo " 130) Pad 6 β†’ 1800x2880 @ 308dpi"
echo " 131) Redmi Pad SE β†’ 1200x2000 @ 220dpi"
echo
echo "πŸ”· LENOVO TABLET:"
echo " 132) Tab P12 Pro β†’ 1600x2560 @ 266dpi"
echo " 133) Tab P11 Pro Gen 2 β†’ 1536x2560 @ 276dpi"
echo " 134) Tab M10 Plus β†’ 1200x2000 @ 220dpi"
echo
echo "πŸ”· HUAWEI TABLET:"
echo " 135) MatePad Pro 13.2 β†’ 2000x2880 @ 260dpi"
echo " 136) MatePad 11 β†’ 1600x2560 @ 275dpi"
echo " 137) MatePad SE β†’ 1200x2000 @ 224dpi"
echo
echo "πŸ”· OPPO/REALME TABLET:"
echo " 138) Oppo Pad 2 β†’ 1800x2800 @ 296dpi"
echo " 139) Realme Pad 2 β†’ 1600x2560 @ 266dpi"
echo
echo "πŸ”· HONOR TABLET:"
echo " 140) Honor Pad 8 β†’ 1200x2000 @ 224dpi"
echo
echo "πŸ”· CUSTOM:"
echo " 141) Custom (manual input)"
}
get_profile_values() {
case "$1" in
# SAMSUNG GALAXY
1) PHONE="Galaxy S24 Ultra"; WIDTH=1440; HEIGHT=3120; DPI=505 ;;
2) PHONE="Galaxy S24+"; WIDTH=1440; HEIGHT=3120; DPI=480 ;;
3) PHONE="Galaxy S24"; WIDTH=1080; HEIGHT=2340; DPI=416 ;;
4) PHONE="Galaxy S23 Ultra"; WIDTH=1440; HEIGHT=3088; DPI=500 ;;
5) PHONE="Galaxy S23+"; WIDTH=1080; HEIGHT=2340; DPI=393 ;;
6) PHONE="Galaxy S23"; WIDTH=1080; HEIGHT=2340; DPI=420 ;;
7) PHONE="Galaxy S22 Ultra"; WIDTH=1440; HEIGHT=3088; DPI=500 ;;
8) PHONE="Galaxy S22+"; WIDTH=1080; HEIGHT=2340; DPI=393 ;;
9) PHONE="Galaxy S22"; WIDTH=1080; HEIGHT=2340; DPI=420 ;;
10) PHONE="Galaxy S21 Ultra"; WIDTH=1440; HEIGHT=3200; DPI=515 ;;
11) PHONE="Galaxy S21+"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
12) PHONE="Galaxy S21"; WIDTH=1080; HEIGHT=2400; DPI=420 ;;
13) PHONE="Galaxy Z Fold 5"; WIDTH=1812; HEIGHT=2176; DPI=373 ;;
14) PHONE="Galaxy Z Flip 5"; WIDTH=1080; HEIGHT=2640; DPI=425 ;;
15) PHONE="Galaxy A54"; WIDTH=1080; HEIGHT=2340; DPI=403 ;;
16) PHONE="Galaxy A34"; WIDTH=1080; HEIGHT=2340; DPI=403 ;;
17) PHONE="Galaxy A24"; WIDTH=1080; HEIGHT=2340; DPI=400 ;;
18) PHONE="Galaxy A14"; WIDTH=1080; HEIGHT=2408; DPI=400 ;;
19) PHONE="Galaxy M54"; WIDTH=1080; HEIGHT=2400; DPI=393 ;;
20) PHONE="Galaxy M34"; WIDTH=1080; HEIGHT=2340; DPI=390 ;;
# GOOGLE PIXEL
21) PHONE="Pixel 8 Pro"; WIDTH=1344; HEIGHT=2992; DPI=489 ;;
22) PHONE="Pixel 8"; WIDTH=1080; HEIGHT=2400; DPI=440 ;;
23) PHONE="Pixel 7 Pro"; WIDTH=1440; HEIGHT=3120; DPI=512 ;;
24) PHONE="Pixel 7"; WIDTH=1080; HEIGHT=2400; DPI=420 ;;
25) PHONE="Pixel 7a"; WIDTH=1080; HEIGHT=2400; DPI=420 ;;
26) PHONE="Pixel 6 Pro"; WIDTH=1440; HEIGHT=3120; DPI=512 ;;
27) PHONE="Pixel 6"; WIDTH=1080; HEIGHT=2400; DPI=411 ;;
28) PHONE="Pixel 6a"; WIDTH=1080; HEIGHT=2400; DPI=420 ;;
# APPLE iPHONE
29) PHONE="iPhone 15 Pro Max"; WIDTH=1290; HEIGHT=2796; DPI=460 ;;
30) PHONE="iPhone 15 Pro"; WIDTH=1179; HEIGHT=2556; DPI=460 ;;
31) PHONE="iPhone 15 Plus"; WIDTH=1290; HEIGHT=2796; DPI=460 ;;
32) PHONE="iPhone 15"; WIDTH=1179; HEIGHT=2556; DPI=460 ;;
33) PHONE="iPhone 14 Pro Max"; WIDTH=1290; HEIGHT=2796; DPI=460 ;;
34) PHONE="iPhone 14 Pro"; WIDTH=1179; HEIGHT=2556; DPI=460 ;;
35) PHONE="iPhone 14 Plus"; WIDTH=1284; HEIGHT=2778; DPI=458 ;;
36) PHONE="iPhone 14"; WIDTH=1170; HEIGHT=2532; DPI=460 ;;
37) PHONE="iPhone 13 Pro Max"; WIDTH=1284; HEIGHT=2778; DPI=458 ;;
38) PHONE="iPhone 13 Pro"; WIDTH=1170; HEIGHT=2532; DPI=460 ;;
39) PHONE="iPhone 13"; WIDTH=1170; HEIGHT=2532; DPI=460 ;;
40) PHONE="iPhone 13 mini"; WIDTH=1080; HEIGHT=2340; DPI=476 ;;
41) PHONE="iPhone 12 Pro Max"; WIDTH=1284; HEIGHT=2778; DPI=458 ;;
42) PHONE="iPhone 12 Pro"; WIDTH=1170; HEIGHT=2532; DPI=460 ;;
43) PHONE="iPhone 12"; WIDTH=1170; HEIGHT=2532; DPI=460 ;;
44) PHONE="iPhone SE 2022"; WIDTH=750; HEIGHT=1334; DPI=326 ;;
# XIAOMI
45) PHONE="Xiaomi 14 Ultra"; WIDTH=1440; HEIGHT=3200; DPI=522 ;;
46) PHONE="Xiaomi 14 Pro"; WIDTH=1440; HEIGHT=3200; DPI=522 ;;
47) PHONE="Xiaomi 14"; WIDTH=1440; HEIGHT=3200; DPI=480 ;;
48) PHONE="Xiaomi 13 Ultra"; WIDTH=1440; HEIGHT=3200; DPI=522 ;;
49) PHONE="Xiaomi 13 Pro"; WIDTH=1440; HEIGHT=3200; DPI=522 ;;
50) PHONE="Xiaomi 13"; WIDTH=1080; HEIGHT=2400; DPI=419 ;;
51) PHONE="Xiaomi 13T Pro"; WIDTH=1220; HEIGHT=2712; DPI=446 ;;
52) PHONE="Xiaomi 13T"; WIDTH=1220; HEIGHT=2712; DPI=446 ;;
53) PHONE="Xiaomi 12 Pro"; WIDTH=1440; HEIGHT=3200; DPI=521 ;;
54) PHONE="Xiaomi 12"; WIDTH=1080; HEIGHT=2400; DPI=419 ;;
# REDMI
55) PHONE="Redmi Note 13 Pro+"; WIDTH=1220; HEIGHT=2712; DPI=446 ;;
56) PHONE="Redmi Note 13 Pro"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
57) PHONE="Redmi Note 13"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
58) PHONE="Redmi Note 12 Pro+"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
59) PHONE="Redmi Note 12 Pro"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
60) PHONE="Redmi Note 12"; WIDTH=1080; HEIGHT=2460; DPI=400 ;;
61) PHONE="Redmi 13C"; WIDTH=720; HEIGHT=1650; DPI=260 ;;
62) PHONE="Redmi 12"; WIDTH=1080; HEIGHT=2460; DPI=400 ;;
63) PHONE="Redmi K60 Ultra"; WIDTH=1440; HEIGHT=3200; DPI=526 ;;
64) PHONE="Redmi K60 Pro"; WIDTH=1440; HEIGHT=3200; DPI=526 ;;
# POCO
65) PHONE="POCO F6 Pro"; WIDTH=1440; HEIGHT=3200; DPI=526 ;;
66) PHONE="POCO F6"; WIDTH=1220; HEIGHT=2712; DPI=446 ;;
67) PHONE="POCO X6 Pro"; WIDTH=1440; HEIGHT=3200; DPI=526 ;;
68) PHONE="POCO X6"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
69) PHONE="POCO M6 Pro"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
70) PHONE="POCO C65"; WIDTH=720; HEIGHT=1650; DPI=260 ;;
# ONEPLUS
71) PHONE="OnePlus 12"; WIDTH=1440; HEIGHT=3168; DPI=510 ;;
72) PHONE="OnePlus 11"; WIDTH=1440; HEIGHT=3216; DPI=525 ;;
73) PHONE="OnePlus 10 Pro"; WIDTH=1440; HEIGHT=3216; DPI=525 ;;
74) PHONE="OnePlus 10T"; WIDTH=1080; HEIGHT=2412; DPI=402 ;;
75) PHONE="OnePlus Nord 3"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
76) PHONE="OnePlus Nord CE 3"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
# OPPO
77) PHONE="Oppo Find X7 Ultra"; WIDTH=1440; HEIGHT=3168; DPI=510 ;;
78) PHONE="Oppo Find X6 Pro"; WIDTH=1440; HEIGHT=3216; DPI=525 ;;
79) PHONE="Oppo Reno 11 Pro"; WIDTH=1080; HEIGHT=2412; DPI=394 ;;
80) PHONE="Oppo Reno 11"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
81) PHONE="Oppo Reno 10 Pro+"; WIDTH=1080; HEIGHT=2412; DPI=394 ;;
82) PHONE="Oppo A79"; WIDTH=1080; HEIGHT=2400; DPI=391 ;;
83) PHONE="Oppo A78"; WIDTH=1080; HEIGHT=2400; DPI=391 ;;
# VIVO
84) PHONE="Vivo X100 Pro"; WIDTH=1440; HEIGHT=3200; DPI=517 ;;
85) PHONE="Vivo X100"; WIDTH=1260; HEIGHT=2800; DPI=452 ;;
86) PHONE="Vivo V30 Pro"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
87) PHONE="Vivo V30"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
88) PHONE="Vivo V29 Pro"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
89) PHONE="Vivo Y100"; WIDTH=1080; HEIGHT=2400; DPI=391 ;;
90) PHONE="Vivo Y56"; WIDTH=1080; HEIGHT=2408; DPI=401 ;;
# REALME
91) PHONE="Realme GT 5 Pro"; WIDTH=1240; HEIGHT=2772; DPI=450 ;;
92) PHONE="Realme 12 Pro+"; WIDTH=1080; HEIGHT=2412; DPI=405 ;;
93) PHONE="Realme 12 Pro"; WIDTH=1080; HEIGHT=2412; DPI=405 ;;
94) PHONE="Realme 12"; WIDTH=1080; HEIGHT=2412; DPI=405 ;;
95) PHONE="Realme 11 Pro+"; WIDTH=1080; HEIGHT=2412; DPI=394 ;;
96) PHONE="Realme C67"; WIDTH=720; HEIGHT=1604; DPI=260 ;;
# ASUS
97) PHONE="Asus ROG Phone 8"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
98) PHONE="Asus ROG Phone 7"; WIDTH=1080; HEIGHT=2448; DPI=395 ;;
99) PHONE="Asus Zenfone 10"; WIDTH=1080; HEIGHT=2400; DPI=445 ;;
100) PHONE="Asus Zenfone 9"; WIDTH=1080; HEIGHT=2400; DPI=445 ;;
# SONY
101) PHONE="Sony Xperia 1 V"; WIDTH=1644; HEIGHT=3840; DPI=643 ;;
102) PHONE="Sony Xperia 5 V"; WIDTH=1080; HEIGHT=2520; DPI=449 ;;
103) PHONE="Sony Xperia 10 V"; WIDTH=1080; HEIGHT=2520; DPI=457 ;;
# MOTOROLA
104) PHONE="Moto Edge 40 Pro"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
105) PHONE="Moto G84"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
106) PHONE="Moto G54"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
# NOTHING
107) PHONE="Nothing Phone (2)"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
108) PHONE="Nothing Phone (1)"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
# HONOR
109) PHONE="Honor Magic 6 Pro"; WIDTH=1280; HEIGHT=2800; DPI=453 ;;
110) PHONE="Honor 90"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
111) PHONE="Honor X9b"; WIDTH=1080; HEIGHT=2412; DPI=394 ;;
# INFINIX
112) PHONE="Infinix Note 30"; WIDTH=1080; HEIGHT=2400; DPI=396 ;;
113) PHONE="Infinix Hot 30"; WIDTH=1080; HEIGHT=2460; DPI=395 ;;
# TECNO
114) PHONE="Tecno Camon 20"; WIDTH=1080; HEIGHT=2400; DPI=396 ;;
115) PHONE="Tecno Spark 10"; WIDTH=720; HEIGHT=1612; DPI=260 ;;
# iPAD SERIES
116) PHONE="iPad Pro 12.9\" (M2)"; WIDTH=2048; HEIGHT=2732; DPI=264 ;;
117) PHONE="iPad Pro 11\" (M2)"; WIDTH=1668; HEIGHT=2388; DPI=264 ;;
118) PHONE="iPad Air 5"; WIDTH=1640; HEIGHT=2360; DPI=264 ;;
119) PHONE="iPad 10"; WIDTH=1640; HEIGHT=2360; DPI=264 ;;
120) PHONE="iPad mini 6"; WIDTH=1488; HEIGHT=2266; DPI=326 ;;
# SAMSUNG TABLET
121) PHONE="Tab S9 Ultra"; WIDTH=1848; HEIGHT=2960; DPI=266 ;;
122) PHONE="Tab S9+"; WIDTH=1752; HEIGHT=2800; DPI=266 ;;
123) PHONE="Tab S9"; WIDTH=1600; HEIGHT=2560; DPI=274 ;;
124) PHONE="Tab S8 Ultra"; WIDTH=1848; HEIGHT=2960; DPI=266 ;;
125) PHONE="Tab S8+"; WIDTH=1752; HEIGHT=2800; DPI=266 ;;
126) PHONE="Tab S8"; WIDTH=1600; HEIGHT=2560; DPI=274 ;;
127) PHONE="Tab A9+"; WIDTH=1200; HEIGHT=1920; DPI=240 ;;
128) PHONE="Tab A8"; WIDTH=1200; HEIGHT=1920; DPI=240 ;;
# XIAOMI TABLET
129) PHONE="Pad 6 Pro"; WIDTH=1800; HEIGHT=2880; DPI=308 ;;
130) PHONE="Pad 6"; WIDTH=1800; HEIGHT=2880; DPI=308 ;;
131) PHONE="Redmi Pad SE"; WIDTH=1200; HEIGHT=2000; DPI=220 ;;
# LENOVO TABLET
132) PHONE="Tab P12 Pro"; WIDTH=1600; HEIGHT=2560; DPI=266 ;;
133) PHONE="Tab P11 Pro Gen 2"; WIDTH=1536; HEIGHT=2560; DPI=276 ;;
134) PHONE="Tab M10 Plus"; WIDTH=1200; HEIGHT=2000; DPI=220 ;;
# HUAWEI TABLET
135) PHONE="MatePad Pro 13.2"; WIDTH=2000; HEIGHT=2880; DPI=260 ;;
136) PHONE="MatePad 11"; WIDTH=1600; HEIGHT=2560; DPI=275 ;;
137) PHONE="MatePad SE"; WIDTH=1200; HEIGHT=2000; DPI=224 ;;
# OPPO/REALME TABLET
138) PHONE="Oppo Pad 2"; WIDTH=1800; HEIGHT=2800; DPI=296 ;;
139) PHONE="Realme Pad 2"; WIDTH=1600; HEIGHT=2560; DPI=266 ;;
# HONOR TABLET
140) PHONE="Honor Pad 8"; WIDTH=1200; HEIGHT=2000; DPI=224 ;;
# CUSTOM
141|custom|Custom)
PHONE="Custom"
read -rp " Lebar (width): " WIDTH
read -rp " Tinggi (height): " HEIGHT
read -rp " DPI: " DPI
;;
*)
echo "[!] Profil tidak dikenal. Silakan pilih 1-141."; exit 1 ;;
esac
}
# === ORIENTATION CONTROL (FORCE PORTRAIT) ===
force_portrait() {
# 1️⃣ Nyalakan auto-rotate dulu
adb shell settings put system accelerometer_rotation 1 >/dev/null 2>&1
adb shell settings put global accelerometer_rotation 1 >/dev/null 2>&1
adb shell content insert --uri content://settings/system \
--bind name:s=user_rotation --bind value:i:0 >/dev/null 2>&1
# 4️⃣ Pastikan resolusi & DPI sesuai portrait
adb shell wm size ${WIDTH}x${HEIGHT} >/dev/null 2>&1
adb shell wm density ${DPI} >/dev/null 2>&1
echo "[βœ“] Layar dikunci portrait (${WIDTH}x${HEIGHT} @ ${DPI}dpi)"
}
rotate_after_scrcpy() {
local ROTATION="$1" # nilai: 0,1,2,3
echo "[*] Menyiapkan rotasi setelah scrcpy aktif (target: $ROTATION)..."
# 2️⃣ Tunggu jendela scrcpy muncul
echo "[*] Menunggu jendela scrcpy muncul..."
while ! pgrep -x "scrcpy" >/dev/null; do
sleep 0.5
done
sleep 2 # beri waktu 1 detik agar window benar-benar siap
# 3️⃣ Rotasi layar (0=portrait, 1=landscape kanan, 2=reverse portrait, 3=landscape kiri)
adb shell cmd window set-user-rotation locked "$ROTATION" >/dev/null 2>&1
adb shell settings put system user_rotation "$ROTATION" >/dev/null 2>&1
adb shell settings put global user_rotation "$ROTATION" >/dev/null 2>&1
# 1️⃣ Matikan auto-rotate
adb shell settings put system accelerometer_rotation 0 >/dev/null 2>&1
adb shell settings put global accelerometer_rotation 0 >/dev/null 2>&1
adb shell settings put system user_rotation 0 >/dev/null 2>&1
adb shell cmd window set-user-rotation locked 0 >/dev/null 2>&1
adb shell settings put global user_rotation 0 >/dev/null 2>&1
echo "[βœ“] Rotasi layar diatur ke mode $ROTATION"
}
enable_charging() {
echo "[*] Mengaktifkan kembali pengisian daya USB..."
adb shell "cmd battery reset" >/dev/null 2>&1
}
disable_charging() {
echo "[*] Menonaktifkan pengisian daya USB (~90% device)..."
# Metode modern non-root (bekerja di ~90% device)
adb shell "cmd battery unplug" >/dev/null 2>&1
# Fallback untuk device yang masih mendukung sysfs (root/eng build)
adb shell "echo 0 > /sys/class/power_supply/usb/charging_enabled" 2>/dev/null || true
# Verifikasi
charging_status=$(adb shell dumpsys battery | grep -i "Charging")
echo "⚑ Status charging saat ini: $charging_status"
}
# === APP SELECTION ===
select_app() {
echo
echo "πŸ“¦ Cari aplikasi (contoh: chrome, whatsapp, instagram, tiktok)"
while true; do
read -rp "➑️ Masukkan kata kunci: " query
[[ -z "$query" ]] && { echo "❌ Masukkan kata kunci terlebih dahulu!"; continue; }
adb shell "pm list packages | grep -i \"$query\"" | sed 's/package://g' | nl -w2 -s') ' > "$TMP_PKGLIST"
if [[ ! -s "$TMP_PKGLIST" ]]; then
echo "❌ Tidak ditemukan aplikasi dengan kata kunci '$query'"
read -rp "πŸ” Coba cari lagi? (y/n): " retry
[[ "$retry" =~ ^[Yy]$ ]] || { echo "🚫 Dibatalkan."; exit 1; }
continue
fi
echo
echo "πŸ“± Ditemukan:"
cat "$TMP_PKGLIST"
echo
read -rp "➑️ Pilih nomor aplikasi: " app_choice
PKG=$(sed -n "${app_choice}p" "$TMP_PKGLIST" | awk '{print $2}')
if [[ -z "$PKG" ]]; then
echo "❌ Nomor tidak valid."
read -rp "πŸ” Coba cari lagi? (y/n): " retry
[[ "$retry" =~ ^[Yy]$ ]] || { echo "🚫 Dibatalkan."; exit 1; }
continue
fi
echo "[βœ“] Dipilih: $PKG"
break
done
}
# === DISPLAY DETECTION ===
get_display_ids() {
adb shell dumpsys display | grep -E 'DisplayDeviceInfo' | grep -oE 'displayId=[0-9]+' | cut -d'=' -f2 | sort -n | uniq
}
detect_new_display_id() {
local before_file=$1; local after_file=$2
comm -13 "$before_file" "$after_file" | tail -n1
}
# === START SINGLE DISPLAY ===
start_vdisplay() {
local WIDTH=$1 HEIGHT=$2 DPI=$3
local before_ids="/tmp/before_ids.txt"
local after_ids="/tmp/after_ids.txt"
echo
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " πŸ–₯️ Virtual Display: $PHONE"
echo " πŸ“ Resolusi: ${WIDTH}x${HEIGHT}"
echo " 🎨 DPI: ${DPI}"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
echo "[*] Mengatur resolusi & density..."
force_portrait
echo
select_app
get_display_ids > "$before_ids"
echo
echo "πŸ–₯️ Membuat Virtual Display..."
adb shell am startservice -n $SERVICE_NAME \
--ei width $WIDTH --ei height $HEIGHT --ei dpi $DPI --ei count 1 \
--es pkg "$PKG" >/dev/null 2>&1
sleep 2
get_display_ids > "$after_ids"
local new_id; new_id=$(detect_new_display_id "$before_ids" "$after_ids")
if [[ -z "$new_id" ]]; then
echo "[!] Tidak terdeteksi display baru, fallback ke 0 (layar utama)."
new_id=0
fi
echo "[βœ“] Display baru terdeteksi: ID=$new_id"
echo "[*] Menjalankan aplikasi di display $new_id..."
adb shell am start -n "$PKG" --display "$new_id" >/dev/null 2>&1 || adb shell monkey -p "$PKG" 1 >/dev/null 2>&1
if command -v scrcpy &>/dev/null; then
echo "[*] Menjalankan scrcpy (display-id=$new_id)..."
echo "[i] Tutup jendela scrcpy untuk keluar otomatis."
disable_charging
scrcpy --display-id "$new_id" \
--max-size "$HEIGHT" \
--stay-awake \
--turn-screen-off \
--window-title "Virtual $PHONE - Display $new_id (Portrait)" &
SCRCPY_PID=$!
# enable_charging
echo "[*] scrcpy ditutup, menjalankan cleanup..."
else
echo "[⚠] scrcpy tidak ditemukan. Install scrcpy untuk mirroring display."
fi
echo
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " βœ… Virtual Display berhasil dibuat!"
echo " πŸ“± Perangkat: $PHONE"
echo " πŸ†” Display ID: $new_id"
echo " πŸ“¦ Aplikasi: $PKG"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
echo "[i] Tekan Ctrl+C untuk menghentikan dan cleanup otomatis"
}
# === LOG ===
show_log() {
echo "πŸ“‹ Menampilkan log VirtualCLI..."
adb logcat -s VirtualCLI;
}
# === STATUS ===
show_status() {
echo "πŸ“Š Status Virtual Display:"
echo
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "πŸ” Display yang terdeteksi:"
adb shell dumpsys display | grep -E 'DisplayDeviceInfo|displayId=' | head -20
echo
echo "πŸ“ Resolusi saat ini:"
adb shell wm size
echo
echo "🎨 Density saat ini:"
adb shell wm density
echo
echo "πŸ”„ Rotasi saat ini:"
adb shell settings get system user_rotation
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
}
# === HELP ===
show_help() {
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " πŸ“± Virtual Display Manager CLI v2.0"
echo " Single Display | Force Portrait | 140+ Device Profiles"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
echo "Usage:"
echo " ./vdisplay.sh start [profile_number]"
echo " ./vdisplay.sh stop"
echo " ./vdisplay.sh status"
echo " ./vdisplay.sh log"
echo " ./vdisplay.sh list"
echo
echo "Perintah:"
echo " start - Mulai virtual display dengan profil tertentu"
echo " stop - Hentikan dan kembalikan pengaturan normal"
echo " status - Lihat status display saat ini"
echo " log - Lihat log real-time"
echo " list - Tampilkan semua profil yang tersedia"
echo
echo "Contoh penggunaan:"
echo " ./vdisplay.sh start # Mode interaktif"
echo " ./vdisplay.sh start 22 # Pixel 8"
echo " ./vdisplay.sh start 1 # Galaxy S24 Ultra"
echo " ./vdisplay.sh start 29 # iPhone 15 Pro Max"
echo " ./vdisplay.sh start 116 # iPad Pro 12.9\""
echo " ./vdisplay.sh start 141 # Custom manual"
echo
echo "Fitur:"
echo " βœ… 140+ profil smartphone & tablet"
echo " βœ… Auto cleanup saat exit (Ctrl+C)"
echo " βœ… Force portrait mode"
echo " βœ… Auto detect display ID"
echo " βœ… Integrasi scrcpy otomatis"
echo " βœ… Search & launch aplikasi"
echo
echo "Brands yang didukung:"
echo " Samsung, Google Pixel, iPhone, Xiaomi, Redmi, POCO,"
echo " OnePlus, Oppo, Vivo, Realme, Asus, Sony, Motorola,"
echo " Nothing, Honor, Infinix, Tecno, iPad, Lenovo, Huawei"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
}
# === LIST PROFILES ===
list_profiles() {
show_profiles
}
# === MAIN ===
CMD=$1; shift
case "$CMD" in
start)
clear
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " πŸ“± Virtual Display Manager - START"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
if [[ $# -eq 0 ]]; then
show_profiles
echo
read -rp "➑️ Pilih profil [1-141]: " choice
get_profile_values "$choice"
else
PROFILE=$1
get_profile_values "$PROFILE"
fi
start_vdisplay "$WIDTH" "$HEIGHT" "$DPI"
rotate_after_scrcpy 0
# Keep script running
echo
read -rp "Tekan Enter untuk stop dan cleanup..."
;;
stop)
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " πŸ›‘ Menghentikan Virtual Display..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
stop_vdisplay
;;
status)
show_status
;;
log)
show_log
;;
list|profiles)
clear
list_profiles
echo
;;
*)
show_help
;;
esac
#!/bin/bash
# ===================================================
# Virtual Display Manager CLI (Multi Display)
# Auto Stop, Force Portrait, Extended Profiles
# Mencakup Smartphone & Tablet dari semua brand
# ===================================================
APP_ID="com.example.virtualcli"
SERVICE_NAME="$APP_ID/.VirtualDisplayService"
TMP_PKGLIST="/tmp/vdisplay_pkglist.txt"
# --- Default safe cleanup ---
stop_vdisplay() {
echo
echo "[*] Cleanup: menghentikan VirtualDisplay dan mengembalikan pengaturan..."
# Hentikan semua scrcpy
for pid in $(pgrep -f "scrcpy" | awk '{print $1}'); do
echo "[*] Menutup scrcpy (PID=$pid)..."
kill $pid >/dev/null 2>&1
wait $pid 2>/dev/null
done
# Hentikan VirtualDisplayService
adb shell am stopservice $SERVICE_NAME >/dev/null 2>&1
# Reset rotasi & accelerometer
adb shell settings put system accelerometer_rotation 1 >/dev/null 2>&1
adb shell settings put system user_rotation 0 >/dev/null 2>&1
# Aktifkan charging kembali
enable_charging
echo "[βœ“] Semua dikembalikan normal."
}
# Trap ANY exit or signal
# trap stop_vdisplay EXIT INT TERM
# === PROFILE DEFINITIONS (PORTRAIT MODE) ===
show_profiles() {
echo "πŸ“± ===== SMARTPHONE PROFILES (Portrait Mode) ====="
echo
echo "πŸ”· SAMSUNG GALAXY SERIES:"
echo " 1) Galaxy S24 Ultra β†’ 1440x3120 @ 505dpi"
echo " 2) Galaxy S24+ β†’ 1440x3120 @ 480dpi"
echo " 3) Galaxy S24 β†’ 1080x2340 @ 416dpi"
echo " 4) Galaxy S23 Ultra β†’ 1440x3088 @ 500dpi"
echo " 5) Galaxy S23+ β†’ 1080x2340 @ 393dpi"
echo " 6) Galaxy S23 β†’ 1080x2340 @ 420dpi"
echo " 7) Galaxy S22 Ultra β†’ 1440x3088 @ 500dpi"
echo " 8) Galaxy S22+ β†’ 1080x2340 @ 393dpi"
echo " 9) Galaxy S22 β†’ 1080x2340 @ 420dpi"
echo " 10) Galaxy S21 Ultra β†’ 1440x3200 @ 515dpi"
echo " 11) Galaxy S21+ β†’ 1080x2400 @ 394dpi"
echo " 12) Galaxy S21 β†’ 1080x2400 @ 420dpi"
echo " 13) Galaxy Z Fold 5 β†’ 1812x2176 @ 373dpi (unfolded)"
echo " 14) Galaxy Z Flip 5 β†’ 1080x2640 @ 425dpi"
echo " 15) Galaxy A54 β†’ 1080x2340 @ 403dpi"
echo " 16) Galaxy A34 β†’ 1080x2340 @ 403dpi"
echo " 17) Galaxy A24 β†’ 1080x2340 @ 400dpi"
echo " 18) Galaxy A14 β†’ 1080x2408 @ 400dpi"
echo " 19) Galaxy M54 β†’ 1080x2400 @ 393dpi"
echo " 20) Galaxy M34 β†’ 1080x2340 @ 390dpi"
echo
echo "πŸ”· GOOGLE PIXEL SERIES:"
echo " 21) Pixel 8 Pro β†’ 1344x2992 @ 489dpi"
echo " 22) Pixel 8 β†’ 1080x2400 @ 440dpi"
echo " 23) Pixel 7 Pro β†’ 1440x3120 @ 512dpi"
echo " 24) Pixel 7 β†’ 1080x2400 @ 420dpi"
echo " 25) Pixel 7a β†’ 1080x2400 @ 420dpi"
echo " 26) Pixel 6 Pro β†’ 1440x3120 @ 512dpi"
echo " 27) Pixel 6 β†’ 1080x2400 @ 411dpi"
echo " 28) Pixel 6a β†’ 1080x2400 @ 420dpi"
echo
echo "πŸ”· APPLE iPHONE SERIES:"
echo " 29) iPhone 15 Pro Max β†’ 1290x2796 @ 460dpi"
echo " 30) iPhone 15 Pro β†’ 1179x2556 @ 460dpi"
echo " 31) iPhone 15 Plus β†’ 1290x2796 @ 460dpi"
echo " 32) iPhone 15 β†’ 1179x2556 @ 460dpi"
echo " 33) iPhone 14 Pro Max β†’ 1290x2796 @ 460dpi"
echo " 34) iPhone 14 Pro β†’ 1179x2556 @ 460dpi"
echo " 35) iPhone 14 Plus β†’ 1284x2778 @ 458dpi"
echo " 36) iPhone 14 β†’ 1170x2532 @ 460dpi"
echo " 37) iPhone 13 Pro Max β†’ 1284x2778 @ 458dpi"
echo " 38) iPhone 13 Pro β†’ 1170x2532 @ 460dpi"
echo " 39) iPhone 13 β†’ 1170x2532 @ 460dpi"
echo " 40) iPhone 13 mini β†’ 1080x2340 @ 476dpi"
echo " 41) iPhone 12 Pro Max β†’ 1284x2778 @ 458dpi"
echo " 42) iPhone 12 Pro β†’ 1170x2532 @ 460dpi"
echo " 43) iPhone 12 β†’ 1170x2532 @ 460dpi"
echo " 44) iPhone SE 2022 β†’ 750x1334 @ 326dpi"
echo
echo "πŸ”· XIAOMI SERIES:"
echo " 45) Xiaomi 14 Ultra β†’ 1440x3200 @ 522dpi"
echo " 46) Xiaomi 14 Pro β†’ 1440x3200 @ 522dpi"
echo " 47) Xiaomi 14 β†’ 1440x3200 @ 480dpi"
echo " 48) Xiaomi 13 Ultra β†’ 1440x3200 @ 522dpi"
echo " 49) Xiaomi 13 Pro β†’ 1440x3200 @ 522dpi"
echo " 50) Xiaomi 13 β†’ 1080x2400 @ 419dpi"
echo " 51) Xiaomi 13T Pro β†’ 1220x2712 @ 446dpi"
echo " 52) Xiaomi 13T β†’ 1220x2712 @ 446dpi"
echo " 53) Xiaomi 12 Pro β†’ 1440x3200 @ 521dpi"
echo " 54) Xiaomi 12 β†’ 1080x2400 @ 419dpi"
echo
echo "πŸ”· REDMI SERIES:"
echo " 55) Redmi Note 13 Pro+ β†’ 1220x2712 @ 446dpi"
echo " 56) Redmi Note 13 Pro β†’ 1080x2400 @ 395dpi"
echo " 57) Redmi Note 13 β†’ 1080x2400 @ 395dpi"
echo " 58) Redmi Note 12 Pro+ β†’ 1080x2400 @ 395dpi"
echo " 59) Redmi Note 12 Pro β†’ 1080x2400 @ 395dpi"
echo " 60) Redmi Note 12 β†’ 1080x2460 @ 400dpi"
echo " 61) Redmi 13C β†’ 720x1650 @ 260dpi"
echo " 62) Redmi 12 β†’ 1080x2460 @ 400dpi"
echo " 63) Redmi K60 Ultra β†’ 1440x3200 @ 526dpi"
echo " 64) Redmi K60 Pro β†’ 1440x3200 @ 526dpi"
echo
echo "πŸ”· POCO SERIES:"
echo " 65) POCO F6 Pro β†’ 1440x3200 @ 526dpi"
echo " 66) POCO F6 β†’ 1220x2712 @ 446dpi"
echo " 67) POCO X6 Pro β†’ 1440x3200 @ 526dpi"
echo " 68) POCO X6 β†’ 1080x2400 @ 395dpi"
echo " 69) POCO M6 Pro β†’ 1080x2400 @ 395dpi"
echo " 70) POCO C65 β†’ 720x1650 @ 260dpi"
echo
echo "πŸ”· ONEPLUS SERIES:"
echo " 71) OnePlus 12 β†’ 1440x3168 @ 510dpi"
echo " 72) OnePlus 11 β†’ 1440x3216 @ 525dpi"
echo " 73) OnePlus 10 Pro β†’ 1440x3216 @ 525dpi"
echo " 74) OnePlus 10T β†’ 1080x2412 @ 402dpi"
echo " 75) OnePlus Nord 3 β†’ 1080x2400 @ 394dpi"
echo " 76) OnePlus Nord CE 3 β†’ 1080x2400 @ 394dpi"
echo
echo "πŸ”· OPPO SERIES:"
echo " 77) Oppo Find X7 Ultra β†’ 1440x3168 @ 510dpi"
echo " 78) Oppo Find X6 Pro β†’ 1440x3216 @ 525dpi"
echo " 79) Oppo Reno 11 Pro β†’ 1080x2412 @ 394dpi"
echo " 80) Oppo Reno 11 β†’ 1080x2400 @ 394dpi"
echo " 81) Oppo Reno 10 Pro+ β†’ 1080x2412 @ 394dpi"
echo " 82) Oppo A79 β†’ 1080x2400 @ 391dpi"
echo " 83) Oppo A78 β†’ 1080x2400 @ 391dpi"
echo
echo "πŸ”· VIVO SERIES:"
echo " 84) Vivo X100 Pro β†’ 1440x3200 @ 517dpi"
echo " 85) Vivo X100 β†’ 1260x2800 @ 452dpi"
echo " 86) Vivo V30 Pro β†’ 1080x2400 @ 395dpi"
echo " 87) Vivo V30 β†’ 1080x2400 @ 395dpi"
echo " 88) Vivo V29 Pro β†’ 1080x2400 @ 395dpi"
echo " 89) Vivo Y100 β†’ 1080x2400 @ 391dpi"
echo " 90) Vivo Y56 β†’ 1080x2408 @ 401dpi"
echo
echo "πŸ”· REALME SERIES:"
echo " 91) Realme GT 5 Pro β†’ 1240x2772 @ 450dpi"
echo " 92) Realme 12 Pro+ β†’ 1080x2412 @ 405dpi"
echo " 93) Realme 12 Pro β†’ 1080x2412 @ 405dpi"
echo " 94) Realme 12 β†’ 1080x2412 @ 405dpi"
echo " 95) Realme 11 Pro+ β†’ 1080x2412 @ 394dpi"
echo " 96) Realme C67 β†’ 720x1604 @ 260dpi"
echo
echo "πŸ”· ASUS SERIES:"
echo " 97) Asus ROG Phone 8 β†’ 1080x2400 @ 395dpi"
echo " 98) Asus ROG Phone 7 β†’ 1080x2448 @ 395dpi"
echo " 99) Asus Zenfone 10 β†’ 1080x2400 @ 445dpi"
echo " 100) Asus Zenfone 9 β†’ 1080x2400 @ 445dpi"
echo
echo "πŸ”· SONY SERIES:"
echo " 101) Sony Xperia 1 V β†’ 1644x3840 @ 643dpi"
echo " 102) Sony Xperia 5 V β†’ 1080x2520 @ 449dpi"
echo " 103) Sony Xperia 10 V β†’ 1080x2520 @ 457dpi"
echo
echo "πŸ”· MOTOROLA SERIES:"
echo " 104) Moto Edge 40 Pro β†’ 1080x2400 @ 395dpi"
echo " 105) Moto G84 β†’ 1080x2400 @ 395dpi"
echo " 106) Moto G54 β†’ 1080x2400 @ 395dpi"
echo
echo "πŸ”· NOTHING SERIES:"
echo " 107) Nothing Phone (2) β†’ 1080x2400 @ 394dpi"
echo " 108) Nothing Phone (1) β†’ 1080x2400 @ 394dpi"
echo
echo "πŸ”· HONOR SERIES:"
echo " 109) Honor Magic 6 Pro β†’ 1280x2800 @ 453dpi"
echo " 110) Honor 90 β†’ 1080x2400 @ 394dpi"
echo " 111) Honor X9b β†’ 1080x2412 @ 394dpi"
echo
echo "πŸ”· INFINIX SERIES:"
echo " 112) Infinix Note 30 β†’ 1080x2400 @ 396dpi"
echo " 113) Infinix Hot 30 β†’ 1080x2460 @ 395dpi"
echo
echo "πŸ”· TECNO SERIES:"
echo " 114) Tecno Camon 20 β†’ 1080x2400 @ 396dpi"
echo " 115) Tecno Spark 10 β†’ 720x1612 @ 260dpi"
echo
echo "πŸ“± ===== TABLET PROFILES (Portrait Mode) ====="
echo
echo "πŸ”· iPAD SERIES:"
echo " 116) iPad Pro 12.9\" (M2) β†’ 2048x2732 @ 264dpi"
echo " 117) iPad Pro 11\" (M2) β†’ 1668x2388 @ 264dpi"
echo " 118) iPad Air 5 β†’ 1640x2360 @ 264dpi"
echo " 119) iPad 10 β†’ 1640x2360 @ 264dpi"
echo " 120) iPad mini 6 β†’ 1488x2266 @ 326dpi"
echo
echo "πŸ”· SAMSUNG TABLET:"
echo " 121) Tab S9 Ultra β†’ 1848x2960 @ 266dpi"
echo " 122) Tab S9+ β†’ 1752x2800 @ 266dpi"
echo " 123) Tab S9 β†’ 1600x2560 @ 274dpi"
echo " 124) Tab S8 Ultra β†’ 1848x2960 @ 266dpi"
echo " 125) Tab S8+ β†’ 1752x2800 @ 266dpi"
echo " 126) Tab S8 β†’ 1600x2560 @ 274dpi"
echo " 127) Tab A9+ β†’ 1200x1920 @ 240dpi"
echo " 128) Tab A8 β†’ 1200x1920 @ 240dpi"
echo
echo "πŸ”· XIAOMI TABLET:"
echo " 129) Pad 6 Pro β†’ 1800x2880 @ 308dpi"
echo " 130) Pad 6 β†’ 1800x2880 @ 308dpi"
echo " 131) Redmi Pad SE β†’ 1200x2000 @ 220dpi"
echo
echo "πŸ”· LENOVO TABLET:"
echo " 132) Tab P12 Pro β†’ 1600x2560 @ 266dpi"
echo " 133) Tab P11 Pro Gen 2 β†’ 1536x2560 @ 276dpi"
echo " 134) Tab M10 Plus β†’ 1200x2000 @ 220dpi"
echo
echo "πŸ”· HUAWEI TABLET:"
echo " 135) MatePad Pro 13.2 β†’ 2000x2880 @ 260dpi"
echo " 136) MatePad 11 β†’ 1600x2560 @ 275dpi"
echo " 137) MatePad SE β†’ 1200x2000 @ 224dpi"
echo
echo "πŸ”· OPPO/REALME TABLET:"
echo " 138) Oppo Pad 2 β†’ 1800x2800 @ 296dpi"
echo " 139) Realme Pad 2 β†’ 1600x2560 @ 266dpi"
echo
echo "πŸ”· HONOR TABLET:"
echo " 140) Honor Pad 8 β†’ 1200x2000 @ 224dpi"
echo
echo "πŸ”· CUSTOM:"
echo " 141) Custom (manual input)"
}
get_profile_values() {
case "$1" in
# SAMSUNG GALAXY
1) PHONE="Galaxy S24 Ultra"; WIDTH=1440; HEIGHT=3120; DPI=505 ;;
2) PHONE="Galaxy S24+"; WIDTH=1440; HEIGHT=3120; DPI=480 ;;
3) PHONE="Galaxy S24"; WIDTH=1080; HEIGHT=2340; DPI=416 ;;
4) PHONE="Galaxy S23 Ultra"; WIDTH=1440; HEIGHT=3088; DPI=500 ;;
5) PHONE="Galaxy S23+"; WIDTH=1080; HEIGHT=2340; DPI=393 ;;
6) PHONE="Galaxy S23"; WIDTH=1080; HEIGHT=2340; DPI=420 ;;
7) PHONE="Galaxy S22 Ultra"; WIDTH=1440; HEIGHT=3088; DPI=500 ;;
8) PHONE="Galaxy S22+"; WIDTH=1080; HEIGHT=2340; DPI=393 ;;
9) PHONE="Galaxy S22"; WIDTH=1080; HEIGHT=2340; DPI=420 ;;
10) PHONE="Galaxy S21 Ultra"; WIDTH=1440; HEIGHT=3200; DPI=515 ;;
11) PHONE="Galaxy S21+"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
12) PHONE="Galaxy S21"; WIDTH=1080; HEIGHT=2400; DPI=420 ;;
13) PHONE="Galaxy Z Fold 5"; WIDTH=1812; HEIGHT=2176; DPI=373 ;;
14) PHONE="Galaxy Z Flip 5"; WIDTH=1080; HEIGHT=2640; DPI=425 ;;
15) PHONE="Galaxy A54"; WIDTH=1080; HEIGHT=2340; DPI=403 ;;
16) PHONE="Galaxy A34"; WIDTH=1080; HEIGHT=2340; DPI=403 ;;
17) PHONE="Galaxy A24"; WIDTH=1080; HEIGHT=2340; DPI=400 ;;
18) PHONE="Galaxy A14"; WIDTH=1080; HEIGHT=2408; DPI=400 ;;
19) PHONE="Galaxy M54"; WIDTH=1080; HEIGHT=2400; DPI=393 ;;
20) PHONE="Galaxy M34"; WIDTH=1080; HEIGHT=2340; DPI=390 ;;
# GOOGLE PIXEL
21) PHONE="Pixel 8 Pro"; WIDTH=1344; HEIGHT=2992; DPI=489 ;;
22) PHONE="Pixel 8"; WIDTH=1080; HEIGHT=2400; DPI=440 ;;
23) PHONE="Pixel 7 Pro"; WIDTH=1440; HEIGHT=3120; DPI=512 ;;
24) PHONE="Pixel 7"; WIDTH=1080; HEIGHT=2400; DPI=420 ;;
25) PHONE="Pixel 7a"; WIDTH=1080; HEIGHT=2400; DPI=420 ;;
26) PHONE="Pixel 6 Pro"; WIDTH=1440; HEIGHT=3120; DPI=512 ;;
27) PHONE="Pixel 6"; WIDTH=1080; HEIGHT=2400; DPI=411 ;;
28) PHONE="Pixel 6a"; WIDTH=1080; HEIGHT=2400; DPI=420 ;;
# APPLE iPHONE
29) PHONE="iPhone 15 Pro Max"; WIDTH=1290; HEIGHT=2796; DPI=460 ;;
30) PHONE="iPhone 15 Pro"; WIDTH=1179; HEIGHT=2556; DPI=460 ;;
31) PHONE="iPhone 15 Plus"; WIDTH=1290; HEIGHT=2796; DPI=460 ;;
32) PHONE="iPhone 15"; WIDTH=1179; HEIGHT=2556; DPI=460 ;;
33) PHONE="iPhone 14 Pro Max"; WIDTH=1290; HEIGHT=2796; DPI=460 ;;
34) PHONE="iPhone 14 Pro"; WIDTH=1179; HEIGHT=2556; DPI=460 ;;
35) PHONE="iPhone 14 Plus"; WIDTH=1284; HEIGHT=2778; DPI=458 ;;
36) PHONE="iPhone 14"; WIDTH=1170; HEIGHT=2532; DPI=460 ;;
37) PHONE="iPhone 13 Pro Max"; WIDTH=1284; HEIGHT=2778; DPI=458 ;;
38) PHONE="iPhone 13 Pro"; WIDTH=1170; HEIGHT=2532; DPI=460 ;;
39) PHONE="iPhone 13"; WIDTH=1170; HEIGHT=2532; DPI=460 ;;
40) PHONE="iPhone 13 mini"; WIDTH=1080; HEIGHT=2340; DPI=476 ;;
41) PHONE="iPhone 12 Pro Max"; WIDTH=1284; HEIGHT=2778; DPI=458 ;;
42) PHONE="iPhone 12 Pro"; WIDTH=1170; HEIGHT=2532; DPI=460 ;;
43) PHONE="iPhone 12"; WIDTH=1170; HEIGHT=2532; DPI=460 ;;
44) PHONE="iPhone SE 2022"; WIDTH=750; HEIGHT=1334; DPI=326 ;;
# XIAOMI
45) PHONE="Xiaomi 14 Ultra"; WIDTH=1440; HEIGHT=3200; DPI=522 ;;
46) PHONE="Xiaomi 14 Pro"; WIDTH=1440; HEIGHT=3200; DPI=522 ;;
47) PHONE="Xiaomi 14"; WIDTH=1440; HEIGHT=3200; DPI=480 ;;
48) PHONE="Xiaomi 13 Ultra"; WIDTH=1440; HEIGHT=3200; DPI=522 ;;
49) PHONE="Xiaomi 13 Pro"; WIDTH=1440; HEIGHT=3200; DPI=522 ;;
50) PHONE="Xiaomi 13"; WIDTH=1080; HEIGHT=2400; DPI=419 ;;
51) PHONE="Xiaomi 13T Pro"; WIDTH=1220; HEIGHT=2712; DPI=446 ;;
52) PHONE="Xiaomi 13T"; WIDTH=1220; HEIGHT=2712; DPI=446 ;;
53) PHONE="Xiaomi 12 Pro"; WIDTH=1440; HEIGHT=3200; DPI=521 ;;
54) PHONE="Xiaomi 12"; WIDTH=1080; HEIGHT=2400; DPI=419 ;;
# REDMI
55) PHONE="Redmi Note 13 Pro+"; WIDTH=1220; HEIGHT=2712; DPI=446 ;;
56) PHONE="Redmi Note 13 Pro"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
57) PHONE="Redmi Note 13"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
58) PHONE="Redmi Note 12 Pro+"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
59) PHONE="Redmi Note 12 Pro"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
60) PHONE="Redmi Note 12"; WIDTH=1080; HEIGHT=2460; DPI=400 ;;
61) PHONE="Redmi 13C"; WIDTH=720; HEIGHT=1650; DPI=260 ;;
62) PHONE="Redmi 12"; WIDTH=1080; HEIGHT=2460; DPI=400 ;;
63) PHONE="Redmi K60 Ultra"; WIDTH=1440; HEIGHT=3200; DPI=526 ;;
64) PHONE="Redmi K60 Pro"; WIDTH=1440; HEIGHT=3200; DPI=526 ;;
# POCO
65) PHONE="POCO F6 Pro"; WIDTH=1440; HEIGHT=3200; DPI=526 ;;
66) PHONE="POCO F6"; WIDTH=1220; HEIGHT=2712; DPI=446 ;;
67) PHONE="POCO X6 Pro"; WIDTH=1440; HEIGHT=3200; DPI=526 ;;
68) PHONE="POCO X6"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
69) PHONE="POCO M6 Pro"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
70) PHONE="POCO C65"; WIDTH=720; HEIGHT=1650; DPI=260 ;;
# ONEPLUS
71) PHONE="OnePlus 12"; WIDTH=1440; HEIGHT=3168; DPI=510 ;;
72) PHONE="OnePlus 11"; WIDTH=1440; HEIGHT=3216; DPI=525 ;;
73) PHONE="OnePlus 10 Pro"; WIDTH=1440; HEIGHT=3216; DPI=525 ;;
74) PHONE="OnePlus 10T"; WIDTH=1080; HEIGHT=2412; DPI=402 ;;
75) PHONE="OnePlus Nord 3"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
76) PHONE="OnePlus Nord CE 3"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
# OPPO
77) PHONE="Oppo Find X7 Ultra"; WIDTH=1440; HEIGHT=3168; DPI=510 ;;
78) PHONE="Oppo Find X6 Pro"; WIDTH=1440; HEIGHT=3216; DPI=525 ;;
79) PHONE="Oppo Reno 11 Pro"; WIDTH=1080; HEIGHT=2412; DPI=394 ;;
80) PHONE="Oppo Reno 11"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
81) PHONE="Oppo Reno 10 Pro+"; WIDTH=1080; HEIGHT=2412; DPI=394 ;;
82) PHONE="Oppo A79"; WIDTH=1080; HEIGHT=2400; DPI=391 ;;
83) PHONE="Oppo A78"; WIDTH=1080; HEIGHT=2400; DPI=391 ;;
# VIVO
84) PHONE="Vivo X100 Pro"; WIDTH=1440; HEIGHT=3200; DPI=517 ;;
85) PHONE="Vivo X100"; WIDTH=1260; HEIGHT=2800; DPI=452 ;;
86) PHONE="Vivo V30 Pro"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
87) PHONE="Vivo V30"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
88) PHONE="Vivo V29 Pro"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
89) PHONE="Vivo Y100"; WIDTH=1080; HEIGHT=2400; DPI=391 ;;
90) PHONE="Vivo Y56"; WIDTH=1080; HEIGHT=2408; DPI=401 ;;
# REALME
91) PHONE="Realme GT 5 Pro"; WIDTH=1240; HEIGHT=2772; DPI=450 ;;
92) PHONE="Realme 12 Pro+"; WIDTH=1080; HEIGHT=2412; DPI=405 ;;
93) PHONE="Realme 12 Pro"; WIDTH=1080; HEIGHT=2412; DPI=405 ;;
94) PHONE="Realme 12"; WIDTH=1080; HEIGHT=2412; DPI=405 ;;
95) PHONE="Realme 11 Pro+"; WIDTH=1080; HEIGHT=2412; DPI=394 ;;
96) PHONE="Realme C67"; WIDTH=720; HEIGHT=1604; DPI=260 ;;
# ASUS
97) PHONE="Asus ROG Phone 8"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
98) PHONE="Asus ROG Phone 7"; WIDTH=1080; HEIGHT=2448; DPI=395 ;;
99) PHONE="Asus Zenfone 10"; WIDTH=1080; HEIGHT=2400; DPI=445 ;;
100) PHONE="Asus Zenfone 9"; WIDTH=1080; HEIGHT=2400; DPI=445 ;;
# SONY
101) PHONE="Sony Xperia 1 V"; WIDTH=1644; HEIGHT=3840; DPI=643 ;;
102) PHONE="Sony Xperia 5 V"; WIDTH=1080; HEIGHT=2520; DPI=449 ;;
103) PHONE="Sony Xperia 10 V"; WIDTH=1080; HEIGHT=2520; DPI=457 ;;
# MOTOROLA
104) PHONE="Moto Edge 40 Pro"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
105) PHONE="Moto G84"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
106) PHONE="Moto G54"; WIDTH=1080; HEIGHT=2400; DPI=395 ;;
# NOTHING
107) PHONE="Nothing Phone (2)"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
108) PHONE="Nothing Phone (1)"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
# HONOR
109) PHONE="Honor Magic 6 Pro"; WIDTH=1280; HEIGHT=2800; DPI=453 ;;
110) PHONE="Honor 90"; WIDTH=1080; HEIGHT=2400; DPI=394 ;;
111) PHONE="Honor X9b"; WIDTH=1080; HEIGHT=2412; DPI=394 ;;
# INFINIX
112) PHONE="Infinix Note 30"; WIDTH=1080; HEIGHT=2400; DPI=396 ;;
113) PHONE="Infinix Hot 30"; WIDTH=1080; HEIGHT=2460; DPI=395 ;;
# TECNO
114) PHONE="Tecno Camon 20"; WIDTH=1080; HEIGHT=2400; DPI=396 ;;
115) PHONE="Tecno Spark 10"; WIDTH=720; HEIGHT=1612; DPI=260 ;;
# iPAD SERIES
116) PHONE="iPad Pro 12.9\" (M2)"; WIDTH=2048; HEIGHT=2732; DPI=264 ;;
117) PHONE="iPad Pro 11\" (M2)"; WIDTH=1668; HEIGHT=2388; DPI=264 ;;
118) PHONE="iPad Air 5"; WIDTH=1640; HEIGHT=2360; DPI=264 ;;
119) PHONE="iPad 10"; WIDTH=1640; HEIGHT=2360; DPI=264 ;;
120) PHONE="iPad mini 6"; WIDTH=1488; HEIGHT=2266; DPI=326 ;;
# SAMSUNG TABLET
121) PHONE="Tab S9 Ultra"; WIDTH=1848; HEIGHT=2960; DPI=266 ;;
122) PHONE="Tab S9+"; WIDTH=1752; HEIGHT=2800; DPI=266 ;;
123) PHONE="Tab S9"; WIDTH=1600; HEIGHT=2560; DPI=274 ;;
124) PHONE="Tab S8 Ultra"; WIDTH=1848; HEIGHT=2960; DPI=266 ;;
125) PHONE="Tab S8+"; WIDTH=1752; HEIGHT=2800; DPI=266 ;;
126) PHONE="Tab S8"; WIDTH=1600; HEIGHT=2560; DPI=274 ;;
127) PHONE="Tab A9+"; WIDTH=1200; HEIGHT=1920; DPI=240 ;;
128) PHONE="Tab A8"; WIDTH=1200; HEIGHT=1920; DPI=240 ;;
# XIAOMI TABLET
129) PHONE="Pad 6 Pro"; WIDTH=1800; HEIGHT=2880; DPI=308 ;;
130) PHONE="Pad 6"; WIDTH=1800; HEIGHT=2880; DPI=308 ;;
131) PHONE="Redmi Pad SE"; WIDTH=1200; HEIGHT=2000; DPI=220 ;;
# LENOVO TABLET
132) PHONE="Tab P12 Pro"; WIDTH=1600; HEIGHT=2560; DPI=266 ;;
133) PHONE="Tab P11 Pro Gen 2"; WIDTH=1536; HEIGHT=2560; DPI=276 ;;
134) PHONE="Tab M10 Plus"; WIDTH=1200; HEIGHT=2000; DPI=220 ;;
# HUAWEI TABLET
135) PHONE="MatePad Pro 13.2"; WIDTH=2000; HEIGHT=2880; DPI=260 ;;
136) PHONE="MatePad 11"; WIDTH=1600; HEIGHT=2560; DPI=275 ;;
137) PHONE="MatePad SE"; WIDTH=1200; HEIGHT=2000; DPI=224 ;;
# OPPO/REALME TABLET
138) PHONE="Oppo Pad 2"; WIDTH=1800; HEIGHT=2800; DPI=296 ;;
139) PHONE="Realme Pad 2"; WIDTH=1600; HEIGHT=2560; DPI=266 ;;
# HONOR TABLET
140) PHONE="Honor Pad 8"; WIDTH=1200; HEIGHT=2000; DPI=224 ;;
# CUSTOM
141|custom|Custom)
PHONE="Custom"
read -rp " Lebar (width): " WIDTH
read -rp " Tinggi (height): " HEIGHT
read -rp " DPI: " DPI
;;
*)
echo "[!] Profil tidak dikenal. Silakan pilih 1-141."; exit 1 ;;
esac
}
# === ORIENTATION CONTROL (FORCE PORTRAIT) ===
force_portrait() {
# 1️⃣ Nyalakan auto-rotate dulu
adb shell settings put system accelerometer_rotation 1 >/dev/null 2>&1
adb shell settings put global accelerometer_rotation 1 >/dev/null 2>&1
adb shell content insert --uri content://settings/system \
--bind name:s=user_rotation --bind value:i:0 >/dev/null 2>&1
echo "[βœ“] Layar dikunci portrait (${WIDTH}x${HEIGHT} @ ${DPI}dpi)"
}
rotate_after_scrcpy() {
local ROTATION="$1" # nilai: 0,1,2,3
echo "[*] Menyiapkan rotasi setelah scrcpy aktif (target: $ROTATION)..."
# 2️⃣ Tunggu jendela scrcpy muncul
echo "[*] Menunggu jendela scrcpy muncul..."
while ! pgrep -x "scrcpy" >/dev/null; do
sleep 0.5
done
sleep 2 # beri waktu 1 detik agar window benar-benar siap
# 3️⃣ Rotasi layar (0=portrait, 1=landscape kanan, 2=reverse portrait, 3=landscape kiri)
adb shell cmd window set-user-rotation locked "$ROTATION" >/dev/null 2>&1
adb shell settings put system user_rotation "$ROTATION" >/dev/null 2>&1
adb shell settings put global user_rotation "$ROTATION" >/dev/null 2>&1
# 1️⃣ Matikan auto-rotate
adb shell settings put system accelerometer_rotation 0 >/dev/null 2>&1
adb shell settings put global accelerometer_rotation 0 >/dev/null 2>&1
adb shell settings put system user_rotation 0 >/dev/null 2>&1
adb shell cmd window set-user-rotation locked 0 >/dev/null 2>&1
adb shell settings put global user_rotation 0 >/dev/null 2>&1
echo "[βœ“] Rotasi layar diatur ke mode $ROTATION"
}
enable_charging() {
echo "[*] Mengaktifkan kembali pengisian daya USB..."
adb shell svc power stayon false
adb shell "cmd battery reset" >/dev/null 2>&1
}
disable_charging() {
echo "[*] Menonaktifkan pengisian daya USB (~90% device)..."
# idle no sleep
adb shell svc power stayon true
# Metode modern non-root (bekerja di ~90% device)
adb shell "cmd battery unplug" >/dev/null 2>&1
# Fallback untuk device yang masih mendukung sysfs (root/eng build)
adb shell "echo 0 > /sys/class/power_supply/usb/charging_enabled" 2>/dev/null || true
# Verifikasi
charging_status=$(adb shell dumpsys battery | grep -i "Charging")
echo "⚑ Status charging saat ini: $charging_status"
}
# === APP SELECTION ===
select_app() {
echo
echo "πŸ“¦ Cari aplikasi (contoh: chrome, whatsapp, instagram, tiktok)"
while true; do
read -rp "➑️ Masukkan kata kunci: " query
[[ -z "$query" ]] && { echo "❌ Masukkan kata kunci terlebih dahulu!"; continue; }
adb shell "pm list packages | grep -i \"$query\"" | sed 's/package://g' | nl -w2 -s') ' > "$TMP_PKGLIST"
if [[ ! -s "$TMP_PKGLIST" ]]; then
echo "❌ Tidak ditemukan aplikasi dengan kata kunci '$query'"
read -rp "πŸ” Coba cari lagi? (y/n): " retry
[[ "$retry" =~ ^[Yy]$ ]] || { echo "🚫 Dibatalkan."; exit 1; }
continue
fi
echo
echo "πŸ“± Ditemukan:"
cat "$TMP_PKGLIST"
echo
read -rp "➑️ Pilih nomor aplikasi: " app_choice
PKG=$(sed -n "${app_choice}p" "$TMP_PKGLIST" | awk '{print $2}')
if [[ -z "$PKG" ]]; then
echo "❌ Nomor tidak valid."
read -rp "πŸ” Coba cari lagi? (y/n): " retry
[[ "$retry" =~ ^[Yy]$ ]] || { echo "🚫 Dibatalkan."; exit 1; }
continue
fi
echo "[βœ“] Dipilih: $PKG"
break
done
}
# === DISPLAY DETECTION ===
get_display_ids() {
adb shell dumpsys display | grep -E 'DisplayDeviceInfo' | grep -oE 'displayId=[0-9]+' | cut -d'=' -f2 | sort -n | uniq
}
detect_new_display_id() {
local before_file=$1; local after_file=$2
comm -13 "$before_file" "$after_file" | tail -n1
}
# === START SINGLE DISPLAY ===
start_vdisplay() {
local WIDTH=$1 HEIGHT=$2 DPI=$3
local before_ids="/tmp/before_ids.txt"
local after_ids="/tmp/after_ids.txt"
echo
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " πŸ–₯️ Virtual Display: $PHONE"
echo " πŸ“ Resolusi: ${WIDTH}x${HEIGHT}"
echo " 🎨 DPI: ${DPI}"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
echo "[*] Mengatur resolusi & density..."
force_portrait
echo
select_app
get_display_ids > "$before_ids"
echo
echo "πŸ–₯️ Membuat Virtual Display..."
adb shell am startservice -n $SERVICE_NAME \
--ei width $WIDTH --ei height $HEIGHT --ei dpi $DPI --ei count 1 \
--es pkg "$PKG" >/dev/null 2>&1
sleep 2
get_display_ids > "$after_ids"
local new_id; new_id=$(detect_new_display_id "$before_ids" "$after_ids")
if [[ -z "$new_id" ]]; then
echo "[!] Tidak terdeteksi display baru, fallback ke 0 (layar utama)."
new_id=0
fi
echo "[βœ“] Display baru terdeteksi: ID=$new_id"
echo "[*] Menjalankan aplikasi di display $new_id..."
adb shell am start -n "$PKG" --display "$new_id" >/dev/null 2>&1 || adb shell monkey -p "$PKG" 1 >/dev/null 2>&1
if command -v scrcpy &>/dev/null; then
echo "[*] Menjalankan scrcpy (display-id=$new_id)..."
echo "[i] Tutup jendela scrcpy untuk keluar otomatis."
disable_charging
scrcpy --new-display=${WIDTH}x${HEIGHT}/${DPI} \
--start-app="$PKG" \
--no-vd-system-decorations \
--display-ime-policy=local \
--stay-awake \
--turn-screen-off \
--always-on-top \
--window-title "Virtual $PHONE ($WIDTH x $HEIGHT @ $DPI dpi)" &
SCRCPY_PID=$!
# enable_charging
echo "[*] scrcpy ditutup, menjalankan cleanup..."
else
echo "[⚠] scrcpy tidak ditemukan. Install scrcpy untuk mirroring display."
fi
echo
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " βœ… Virtual Display berhasil dibuat!"
echo " πŸ“± Perangkat: $PHONE"
echo " πŸ†” Display ID: $new_id"
echo " πŸ“¦ Aplikasi: $PKG"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
echo "[i] Tekan Ctrl+C untuk menghentikan dan cleanup otomatis"
}
# === LOG ===
show_log() {
echo "πŸ“‹ Menampilkan log VirtualCLI..."
adb logcat -s VirtualCLI;
}
# === HELP ===
show_help() {
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " πŸ“± Virtual Display Manager CLI v2.0"
echo " Single Display | Force Portrait | 140+ Device Profiles"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
echo "Usage:"
echo " ./vdisplay.sh start [profile_number]"
echo " ./vdisplay.sh stop"
echo " ./vdisplay.sh status"
echo " ./vdisplay.sh log"
echo " ./vdisplay.sh list"
echo
echo "Perintah:"
echo " start - Mulai virtual display dengan profil tertentu"
echo " stop - Hentikan dan kembalikan pengaturan normal"
echo " status - Lihat status display saat ini"
echo " log - Lihat log real-time"
echo " list - Tampilkan semua profil yang tersedia"
echo " ls - virtual display list"
echo " open - open virtual display"
echo
echo "Contoh penggunaan:"
echo " ./vdisplay.sh start # Mode interaktif"
echo " ./vdisplay.sh start 22 # Pixel 8"
echo " ./vdisplay.sh start 1 # Galaxy S24 Ultra"
echo " ./vdisplay.sh start 29 # iPhone 15 Pro Max"
echo " ./vdisplay.sh start 116 # iPad Pro 12.9\""
echo " ./vdisplay.sh start 141 # Custom manual"
echo
echo "Fitur:"
echo " βœ… 140+ profil smartphone & tablet"
echo " βœ… Force portrait mode"
echo " βœ… Auto detect display ID"
echo " βœ… Integrasi scrcpy otomatis"
echo " βœ… Search & launch aplikasi"
echo " βœ… Disable charging"
echo
echo "Brands yang didukung:"
echo " Samsung, Google Pixel, iPhone, Xiaomi, Redmi, POCO,"
echo " OnePlus, Oppo, Vivo, Realme, Asus, Sony, Motorola,"
echo " Nothing, Honor, Infinix, Tecno, iPad, Lenovo, Huawei"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
}
# === LIST PROFILES ===
list_profiles() {
show_profiles
}
# === MAIN ===
CMD=$1; shift
case "$CMD" in
start)
clear
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " πŸ“± Virtual Display Manager - START"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
if [[ $# -eq 0 ]]; then
show_profiles
echo
read -rp "➑️ Pilih profil [1-141]: " choice
get_profile_values "$choice"
else
PROFILE=$1
get_profile_values "$PROFILE"
fi
start_vdisplay "$WIDTH" "$HEIGHT" "$DPI"
rotate_after_scrcpy 0
# Keep script running
echo
read -rp "Tekan Enter untuk stop dan cleanup..."
;;
charge)
ACTION=$1
case "$ACTION" in
on)
enable_charging
;;
off)
disable_charging
;;
*)
echo "Usage: ./vdisplay.sh charge [on|off]"
;;
esac
exit 0
;;
stop)
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " πŸ›‘ Menghentikan Virtual Display..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
stop_vdisplay
;;
ls)
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " List Virtual Display..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
scrcpy --list-displays
;;
open)
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " Open Virtual Display..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
ID=$1
scrcpy --display-id=$ID
;;
log)
show_log
;;
list|profiles)
clear
list_profiles
echo
;;
*)
show_help
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment