From b55ecde645443f6eae29652c7e59505fb22ae6c4 Mon Sep 17 00:00:00 2001 From: xzhih Date: Sun, 18 Aug 2019 00:44:03 +0800 Subject: [PATCH 1/2] add 1920x1200 3000x2000 display --- displayIcons/MacBook.icns | Bin displayIcons/MacBookPro.icns | Bin displayIcons/ProDisplayXDR.icns | Bin displayIcons/iMac.icns | Bin hidpi.sh | 65 ++++++++++++++++++++++---------- 5 files changed, 46 insertions(+), 19 deletions(-) mode change 100644 => 100755 displayIcons/MacBook.icns mode change 100644 => 100755 displayIcons/MacBookPro.icns mode change 100644 => 100755 displayIcons/ProDisplayXDR.icns mode change 100644 => 100755 displayIcons/iMac.icns diff --git a/displayIcons/MacBook.icns b/displayIcons/MacBook.icns old mode 100644 new mode 100755 diff --git a/displayIcons/MacBookPro.icns b/displayIcons/MacBookPro.icns old mode 100644 new mode 100755 diff --git a/displayIcons/ProDisplayXDR.icns b/displayIcons/ProDisplayXDR.icns old mode 100644 new mode 100755 diff --git a/displayIcons/iMac.icns b/displayIcons/iMac.icns old mode 100644 new mode 100755 diff --git a/hidpi.sh b/hidpi.sh index 67e4503..c927753 100755 --- a/hidpi.sh +++ b/hidpi.sh @@ -28,10 +28,12 @@ langEnableOp2="(2) Enable HIDPI (with EDID)" langEnableOp3="(3) Disable HIDPI" langChooseRes="resolution config" -langChooseResOp1="(1) 1080P Display" -langChooseResOp2="(2) 1080P Display (use 1424x802, fix underscaled after sleep)" -langChooseResOp3="(3) 2K Display" -langChooseResOp4="(4) Manual input resolution" +langChooseResOp1="(1) 1920x1080 Display" +langChooseResOp2="(2) 1920x1080 Display (use 1424x802, fix underscaled after sleep)" +langChooseResOp3="(3) 1920x1200 Display" +langChooseResOp4="(4) 2560x1440 Display" +langChooseResOp5="(5) 3000x2000 Display" +langChooseResOpCustom="(6) Manual input resolution" if [[ "${systemLanguage}" == "zh_CN" ]]; then disableSIP="需要关闭 SIP" @@ -58,10 +60,12 @@ if [[ "${systemLanguage}" == "zh_CN" ]]; then langEnableOp3="(3) 关闭HIDPI" langChooseRes="选择分辨率配置" - langChooseResOp1="(1) 1080P 显示屏" - langChooseResOp2="(2) 1080P 显示屏 (使用 1424x802 分辨率,修复睡眠唤醒后的屏幕缩小问题)" - langChooseResOp3="(3) 2K 显示屏" - langChooseResOp4="(4) 手动输入分辨率" + langChooseResOp1="(1) 1920x1080 显示屏" + langChooseResOp2="(2) 1920x1080 显示屏 (使用 1424x802 分辨率,修复睡眠唤醒后的屏幕缩小问题)" + langChooseResOp3="(3) 1920x1200 显示屏" + langChooseResOp4="(4) 2560x1440 显示屏" + langChooseResOp5="(5) 3000x2000 显示屏" + langChooseResOpCustom="(6) 手动输入分辨率" fi # downloadHost="https://raw.githubusercontent.com/xzhih/one-key-hidpi/master" @@ -433,27 +437,49 @@ echo ${langChooseResOp1} echo ${langChooseResOp2} echo ${langChooseResOp3} echo ${langChooseResOp4} +echo ${langChooseResOp5} +echo ${langChooseResOpCustom} echo "" # read -p "${langInputChoice}: " res case ${res} in - 1 ) create_res_1 1680x944 1440x810 1280x720 1024x576 + 1 ) create_res_1 1680x945 1440x810 1280x720 1024x576 + create_res_2 1280x800 1280x720 960x600 960x540 640x360 + create_res_3 840x472 800x450 720x405 640x360 576x324 512x288 420x234 400x225 320x180 + create_res_4 1680x945 1440x810 1280x720 1024x576 960x540 840x472 800x450 640x360 ;; - 2 ) create_res_1 1680x944 1424x802 1280x720 1024x576 + 2 ) create_res_1 1680x945 1424x802 1280x720 1024x576 + create_res_2 1280x800 1280x720 960x600 960x540 640x360 + create_res_3 840x472 800x450 720x405 640x360 576x324 512x288 420x234 400x225 320x180 + create_res_4 1680x945 1440x810 1280x720 1024x576 960x540 840x472 800x450 640x360 ;; - 3 ) create_res_1 2048x1152 1920x1080 1680x944 1440x810 1280x720 - create_res_2 1024x576 - create_res_3 960x540 - create_res_4 2048x1152 1920x1080 + 3 ) create_res_1 1680x1050 1440x900 1280x800 1024x640 + create_res_2 1280x800 1280x720 960x600 960x540 640x360 + create_res_3 840x472 800x450 720x405 640x360 576x324 512x288 420x234 400x225 320x180 + create_res_4 1680x1050 1440x900 1280x800 1024x640 960x540 840x472 800x450 640x360 + ;; + 4 ) create_res_1 2560x1440 2048x1152 1920x1080 1760x990 1680x945 1440x810 1360x765 1280x720 + create_res_2 1360x765 1280x800 1280x720 1024x576 960x600 960x540 640x360 + create_res_3 960x540 840x472 800x450 720x405 640x360 576x324 512x288 420x234 400x225 320x180 + create_res_4 2048x1152 1920x1080 1680x945 1440x810 1280x720 1024x576 960x540 840x472 800x450 640x360 + ;; + 5 ) create_res_1 3000x2000 2880x1920 2250x1500 1920x1280 1680x1050 1440x900 1280x800 1024x640 + create_res_2 1280x800 1280x720 960x600 960x540 640x360 + create_res_3 840x472 800x450 720x405 640x360 576x324 512x288 420x234 400x225 320x180 + create_res_4 1920x1280 1680x1050 1440x900 1280x800 1024x640 960x540 840x472 800x450 640x360 + ;; + 6 ) custom_res + create_res_2 1360x765 1280x800 1280x720 960x600 960x540 640x360 + create_res_3 840x472 800x450 720x405 640x360 576x324 512x288 420x234 400x225 320x180 + create_res_4 1680x945 1440x810 1280x720 1024x576 960x540 840x472 800x450 640x360 + ;; + *) + echo "${langEnterError}"; + exit 0 ;; - 4 ) custom_res;; esac -create_res_2 1280x800 1280x720 960x600 960x540 640x360 -create_res_3 840x472 800x450 720x405 640x360 576x324 512x288 420x234 400x225 320x180 -create_res_4 1680x944 1440x810 1280x720 1024x576 960x540 840x472 800x450 640x360 - cat >> "${dpiFile}" <<-\FFF target-default-ppmm @@ -474,6 +500,7 @@ function end() sudo chmod 0644 ${thisDir}/tmp/DisplayVendorID-${Vid}/* sudo cp -r ${thisDir}/tmp/* ${thatDir}/ sudo rm -rf ${thisDir}/tmp + sudo defaults write /Library/Preferences/com.apple.windowserver DisplayResolutionEnabled -bool YES echo "${langEnabled}" echo "${langEnabledLog}" } From 46f7dcf1db0e88c7b0ff1f35613322cfabd56aa5 Mon Sep 17 00:00:00 2001 From: xzhih Date: Tue, 19 Nov 2019 04:47:08 +0800 Subject: [PATCH 2/2] fix irregular productID problam like 0000, more resolution can choose --- README-zh.md | 2 +- README.md | 2 +- hidpi.sh | 132 +++++++++++---------------------------------------- 3 files changed, 30 insertions(+), 106 deletions(-) diff --git a/README-zh.md b/README-zh.md index 31531f9..1ce1bb7 100755 --- a/README-zh.md +++ b/README-zh.md @@ -23,7 +23,7 @@ macOS 的 DPI 机制和 Windows 下不一样,比如 1080p 的屏幕在 Windows 在终端输入以下命令回车即可 ```bash -sh -c "$(curl -fsSL https://raw.githubusercontent.com/xzhih/one-key-hidpi/dev/hidpi.sh)" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/xzhih/one-key-hidpi/dev/hidpi.sh)" ``` ![运行](./img/run-zh.jpg) diff --git a/README.md b/README.md index abb00e8..b122bd6 100755 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ System Preferences Run this script in Terminal ```bash -sh -c "$(curl -fsSL https://raw.githubusercontent.com/xzhih/one-key-hidpi/dev/hidpi.sh)" +bash -c "$(curl -fsSL https://raw.githubusercontent.com/xzhih/one-key-hidpi/dev/hidpi.sh)" ``` ![RUN](./img/run.jpg) diff --git a/hidpi.sh b/hidpi.sh index c927753..b12a569 100755 --- a/hidpi.sh +++ b/hidpi.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash sipChecker=($(csrutil status | awk '{ print $5 }')) systemVersion=($(sw_vers -productVersion | cut -d "." -f 2)) @@ -103,13 +103,13 @@ function get_edid() let index++ MonitorName=("$(echo ${display:190:24} | xxd -p -r)") VendorID=${display:16:4} - ProductID=${display:20:4} + ProductID=${gMonitor:22:2}${gMonitor:20:2} - if [[ $VendorID == 0610 ]]; then + if [[ ${VendorID} == 0610 ]]; then MonitorName="Apple Display" fi - if [[ $VendorID == 1e6d ]]; then + if [[ ${VendorID} == 1e6d ]]; then MonitorName="LG Display" fi @@ -140,39 +140,12 @@ function get_edid() else gMonitor=${gDisplayInf} fi - - if [[ ${gMonitor:16:1} == 0 ]]; then - # get rid of the prefix 0 - gDisplayVendorID_RAW=${gMonitor:17:3} - else - gDisplayVendorID_RAW=${gMonitor:16:4} - fi - # convert from hex to dec - gDisplayVendorID=$((0x$gDisplayVendorID_RAW)) - gDisplayProductID_RAW=${gMonitor:20:4} - - # Exchange two bytes - # Fix an issue that will cause wrong name of DisplayProductID - - if [[ ${gDisplayProductID_RAW:2:1} == 0 ]]; then - # get rid of the prefix 0 - gDisplayProduct_pr=${gDisplayProductID_RAW:3:1} - else - gDisplayProduct_pr=${gDisplayProductID_RAW:2:2} - fi - gDisplayProduct_st=${gDisplayProductID_RAW:0:2} - gDisplayProductID_reverse="${gDisplayProduct_pr}${gDisplayProduct_st}" - if [[ ${gDisplayProduct_pr} == 0 ]]; then - gDisplayProductID_reverse="${gDisplayProduct_st}" - fi - gDisplayProductID=$((0x$gDisplayProduct_pr$gDisplayProduct_st)) - - EDID=$gMonitor - VendorID=$gDisplayVendorID - ProductID=$gDisplayProductID - Vid=$gDisplayVendorID_RAW - Pid=$gDisplayProductID_reverse + EDID=${gMonitor} + VendorID=$((0x${gMonitor:16:4})) + ProductID=$((0x${gMonitor:22:2}${gMonitor:20:2})) + Vid=($(printf '%x\n' ${VendorID})) + Pid=($(printf '%x\n' ${ProductID})) # echo ${Vid} # echo ${Pid} # echo $EDID @@ -215,9 +188,7 @@ EEF fi fi - if [[ ! -f ${thatDir}/HIDPI/disable ]]; then - generate_restore_cmd - fi + generate_restore_cmd } # @@ -229,104 +200,57 @@ mkdir -p ${thisDir}/tmp/ cat > "${thisDir}/tmp/disable" <<-\CCC #!/bin/sh -systemVersion=($(sw_vers -productVersion | cut -d "." -f 2)) - -if [[ "${systemVersion}" -ge "15" ]]; then - sudo mount -uw / && killall Finder -fi - function get_edid() { local index=0 local selection=0 - gDisplayInf=($(ioreg -lw0 | grep -i "IODisplayEDID" | sed -e "/[^<]*//")) - if [[ "${#gDisplayInf[@]}" -ge 2 ]]; then - - # Multi monitors detected. Choose target monitor. - echo '' - echo ' Monitors ' - echo '----------------------------------------------------' - echo ' Index | VendorID | ProductID | MonitorName ' - echo '----------------------------------------------------' - + echo ' Monitors ' + echo '------------------------------------' + echo ' Index | VendorID | ProductID ' + echo '------------------------------------' for display in "${gDisplayInf[@]}" do let index++ - MonitorName=("$(echo ${display:190:24} | xxd -p -r)") - VendorID=${display:16:4} - ProductID=${display:20:4} - - if [[ $VendorID == 0610 ]]; then - MonitorName="Apple Display" - fi - - if [[ $VendorID == 1e6d ]]; then - MonitorName="LG Display" - fi - - printf " %d | $VendorID | $ProductID | $MonitorName\n" $index + printf " %d | ${display:16:4} | ${gMonitor:22:2}${gMonitor:20:2}\n" $index done - - echo '----------------------------------------------------' - + echo '------------------------------------' read -p "Choose the display: " selection case $selection in [[:digit:]]* ) if ((selection < 1 || selection > index)); then - echo "Enter error. bye"; + echo "Enter error, bye"; exit 0 fi let selection-=1 gMonitor=${gDisplayInf[$selection]} ;; - * ) - echo "Enter error. bye"; + echo "Enter error, bye"; exit 0 ;; esac else gMonitor=${gDisplayInf} fi - - if [[ ${gMonitor:16:1} == 0 ]]; then - gDisplayVendorID_RAW=${gMonitor:17:3} - else - gDisplayVendorID_RAW=${gMonitor:16:4} - fi - - gDisplayVendorID=$((0x$gDisplayVendorID_RAW)) - gDisplayProductID_RAW=${gMonitor:20:4} - - if [[ ${gDisplayProductID_RAW:2:1} == 0 ]]; then - gDisplayProduct_pr=${gDisplayProductID_RAW:3:1} - else - gDisplayProduct_pr=${gDisplayProductID_RAW:2:2} - fi - - gDisplayProduct_st=${gDisplayProductID_RAW:0:2} - gDisplayProductID_reverse="${gDisplayProduct_pr}${gDisplayProduct_st}" - gDisplayProductID=$((0x$gDisplayProduct_pr$gDisplayProduct_st)) EDID=$gMonitor - Vid=$gDisplayVendorID_RAW - Pid=$gDisplayProductID_reverse - # echo ${Vid} - # echo ${Pid} - # echo $EDID + VendorID=$((0x${gMonitor:16:4})) + ProductID=$((0x${gMonitor:22:2}${gMonitor:20:2})) + Vid=($(printf '%x\n' ${VendorID})) + Pid=($(printf '%x\n' ${ProductID})) } get_edid if [[ -d ../DisplayVendorID-${Vid} ]]; then - sudo rm -rf ../DisplayVendorID-${Vid} + rm -rf ../DisplayVendorID-${Vid} fi -sudo rm -rf ../Icons.plist -sudo cp -r ./backup/* ../ -sudo rm -rf ./disable +rm -rf ../Icons.plist +cp -r ./backup/* ../ +rm -rf ./disable echo "HIDPI Disabled" CCC @@ -599,8 +523,8 @@ function enable_hidpi_with_patch() version=${EDID:38:2} basicparams=${EDID:40:2} checksum=${EDID:254:2} - newchecksum=$(printf '%x' $((0x$checksum + 0x$version +0x$basicparams - 0x04 - 0x90)) | tail -c 2) - newedid=${EDID:0:38}0490${EDID:42:212}${newchecksum} + newchecksum=$(printf '%x' $((0x${checksum} + 0x${version} +0x${basicparams} - 0x04 - 0x90)) | tail -c 2) + newedid=${EDID:0:38}0490${EDID:42:6}e6${EDID:50:204}${newchecksum} EDid=$(printf ${newedid} | xxd -r -p | base64) /usr/bin/sed -i "" "s:EDid:${EDid}:g" ${dpiFile}