Last active
October 29, 2025 11:35
-
-
Save febritecno/e0650642300283049eb8618941f23c79 to your computer and use it in GitHub Desktop.
power-up ur scrcpy, make easy handle virtual display
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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