diff --git a/hidpi.sh b/hidpi.sh index 6c8babb..ff76067 100755 --- a/hidpi.sh +++ b/hidpi.sh @@ -46,7 +46,8 @@ langChooseResOp2="(2) 1920x1080 Display (use 1424x802, fix underscaled after sle langChooseResOp3="(3) 1920x1200 Display" langChooseResOp4="(4) 2560x1440 Display" langChooseResOp5="(5) 3000x2000 Display" -langChooseResOpCustom="(6) Manual input resolution" +langChooseResOp6="(6) 3440x1440 Display" +langChooseResOpCustom="(7) Manual input resolution" langNoMonitFound="No monitors were found. Exiting..." langMonitVIDPID="Your monitor VID:PID:" @@ -82,7 +83,8 @@ if [[ "${systemLanguage}" == "zh_CN" ]]; then langChooseResOp3="(3) 1920x1200 显示屏" langChooseResOp4="(4) 2560x1440 显示屏" langChooseResOp5="(5) 3000x2000 显示屏" - langChooseResOpCustom="(6) 手动输入分辨率" + langChooseResOp6="(6) 3440x1440 显示屏" + langChooseResOpCustom="(7) 手动输入分辨率" langNoMonitFound="没有找到监视器。 退出..." langMonitVIDPID="您的显示器 供应商ID:产品ID:" @@ -118,7 +120,8 @@ elif [[ "${systemLanguage}" == "uk_UA" ]]; then langChooseResOp3="(3) 1920x1200 монітор" langChooseResOp4="(4) 2560x1440 монітор" langChooseResOp5="(5) 3000x2000 монітор" - langChooseResOpCustom="(6) Ввести роздільну здатність вручну" + langChooseResOp6="(6) 3440x1440 монітор" + langChooseResOpCustom="(7) Ввести роздільну здатність вручну" langNoMonitFound="Моніторів не знайдено. Завершую роботу..." langMonitVIDPID="ID Виробника:ID пристрою твого монітора:" @@ -195,6 +198,7 @@ function get_edid() { # For Apple silicon there is no EDID. Get VID/PID in other way function get_vidpid_applesilicon() { local index=0 + local prodnamesindex=0 local selection=0 # Apple ioreg display class @@ -220,7 +224,9 @@ function get_vidpid_applesilicon() { # Get VIDs, PIDs, Prodnames local vends=($(ioreg -arw0 -d1 -c $appleDisplClass | xpath -q -n -e "$vendIDQuery")) local prods=($(ioreg -arw0 -d1 -c $appleDisplClass | xpath -q -n -e "$prodIDQuery")) - local prodnames=($(ioreg -arw0 -d1 -c $appleDisplClass | xpath -q -n -e "$prodNameQuery")) + set -o noglob + IFS=$'\n' prodnames=($(ioreg -arw0 -d1 -c $appleDisplClass | xpath -q -n -e "$prodNameQuery")) + set +o noglob if [[ "${#prods[@]}" -ge 2 ]]; then @@ -233,24 +239,27 @@ function get_vidpid_applesilicon() { # Show monitors. for prod in "${prods[@]}"; do - MonitorName=${prodnames[$index]} - VendorID=${vends[$index]} - ProductID=${prods[$index]} + MonitorName=${prodnames[$prodnamesindex]} + VendorID=$(printf "%04x" ${vends[$index]}) + ProductID=$(printf "%04x" ${prods[$index]}) let index++ + let prodnamesindex++ if [[ ${VendorID} == 0610 ]]; then MonitorName="Apple Display" + # No name in prodnames variable for internal display + let prodnamesindex-- fi if [[ ${VendorID} == 1e6d ]]; then MonitorName="LG Display" fi - printf " %d | ${VendorID} | ${ProductID} | ${MonitorName}\n" ${index} + printf " %-3d | ${VendorID} | %-12s | ${MonitorName}\n" ${index} ${ProductID} done - echo "--------------------------------------------------------" + echo "------------------------------------------------------------" # Let user make a selection. @@ -335,6 +344,7 @@ function generate_restore_cmd() { #!/bin/bash function get_vidpid_applesilicon() { local index=0 + local prodnamesindex=0 local selection=0 # Apple ioreg display class @@ -360,7 +370,9 @@ function get_vidpid_applesilicon() { # Get VIDs, PIDs, Prodnames local vends=($(ioreg -arw0 -d1 -c $appleDisplClass | xpath -q -n -e "$vendIDQuery")) local prods=($(ioreg -arw0 -d1 -c $appleDisplClass | xpath -q -n -e "$prodIDQuery")) - local prodnames=($(ioreg -arw0 -d1 -c $appleDisplClass | xpath -q -n -e "$prodNameQuery")) + set -o noglob + IFS=$'\n' prodnames=($(ioreg -arw0 -d1 -c $appleDisplClass | xpath -q -n -e "$prodNameQuery")) + set +o noglob if [[ "${#prods[@]}" -ge 2 ]]; then echo ' Monitors ' @@ -369,10 +381,15 @@ function get_vidpid_applesilicon() { echo '------------------------------------' # Show monitors. for prod in "${prods[@]}"; do - MonitorName=${prodnames[$index]} - VendorID=${vends[$index]} - ProductID=${prods[$index]} + MonitorName=${prodnames[$prodnamesindex]} + VendorID=$(printf "%04x" ${vends[$index]}) + ProductID=$(printf "%04x" ${prods[$index]}) let index++ + let prodnamesindex++ + if [[ ${VendorID} == 0610 ]]; then + MonitorName="Apple Display" + let prodnamesindex-- + fi printf " %d | ${VendorID} | ${ProductID} | ${MonitorName}\n" ${index} done @@ -608,6 +625,7 @@ CCC echo ${langChooseResOp3} echo ${langChooseResOp4} echo ${langChooseResOp5} + echo ${langChooseResOp6} echo ${langChooseResOpCustom} echo "" @@ -644,6 +662,17 @@ CCC create_res_4 1920x1280 1680x1050 1440x900 1280x800 1024x640 960x540 840x472 800x450 640x360 ;; 6) + # Scale factors + # res 1 scf: 1 1.25 1.3333 1.4545 1.7777 2 + create_res_1 3440x1440 2752x1152 2580x1080 2365x990 1935x810 1720x720 + # res 2 scf: 2 2.6666 + create_res_2 1720x720 1290x540 + # res 3 scf: 2.6666 + create_res_3 1290x540 + # res 4 scf: 1.25 1.3333 1.4545 1.7777 2 2.6666 + create_res_4 2752x1152 2580x1080 2365x990 1935x810 1720x720 1290x540 + ;; + 7) custom_res create_res_2 1360x765 1280x800 1280x720 960x600 960x540 640x360 create_res_3 840x472 800x450 720x405 640x360 576x324 512x288 420x234 400x225 320x180