#!/bin/bash #set -x # for DEBUGGING # Credit to stevezhengshiqi, special thanks to @Menchen # Original project for Xiaomi-Pro (ALC298,layout-id99) # Updated by profzei # Support for Huawei Matebook X Pro 2018 (ALC256, layout-id: 97) # Interface (Ref:http://patorjk.com/software/taag/#p=display&f=Ivrit&t=P%20l%20u%20g%20F%20i%20x) function interface() { echo ' ____ _ _____ _ ' echo ' | _ \ | | _ _ __ _ | ___| (_) __ __ ' echo ' | |_) | | | | | | | / _` | | |_ | | \ \/ / ' echo ' | __/ | | | |_| | | (_| | | _| | | > < ' echo ' |_| |_| \__,_| \__, | |_| |_| /_/\_\ ' echo ' |___/ ' echo 'Support Huawei Matebook X Pro (ALC256, layout-id: 97)' echo '=====================================================' } # Choose option function choice() { echo "(1) Enable ALCPlugFix" echo "(2) Disable ALCPlugFix" echo "(3) Exit" read -p "Which option you want to choose? (1/2/3):" alc_option echo } # Exit if connection fails function networkWarn(){ echo "ERROR: Fail to download ALCPlugFix, please check the network state" clean exit 1 } # Download from https://github.com/profzei/Matebook-X-Pro-2018/ALCPlugFix and https://github.com/profzei/ALCPlugFix/alc_fix function download(){ mkdir -p one-key-alcplugfix cd one-key-alcplugfix echo "Downloading audio fix patch..." curl -fsSL https://raw.githubusercontent.com/profzei/ALCPlugFix/master/alc_fix/ALCPlugFix -O || networkWarn curl -fsSL https://raw.githubusercontent.com/profzei/Matebook-X-Pro-2018/master/ALCPlugFix/good.win.ALCPlugFix.plist -O || networkWarn curl -fsSL https://raw.githubusercontent.com/profzei/Matebook-X-Pro-2018/master/ALCPlugFix/hda-verb -O || networkWarn echo "Download complete" echo } # Copy the audio fix files function copy() { echo "Copying audio fix patch..." if [ ! -d "/usr/local/bin" ]; then echo "'/usr/local/bin' not found, creating one instead..." sudo mkdir -p -m 775 /usr/local/bin sudo chown $USER:admin /usr/local/bin fi sudo cp "./ALCPlugFix" /usr/local/bin/ sudo cp "./hda-verb" /usr/local/bin/ sudo cp "./good.win.ALCPlugFix.plist" /Library/LaunchDaemons/ echo "Copy complete" echo } # Fix permission function fixpermission() { echo "Fixing permission..." sudo chmod 755 /usr/local/bin/ALCPlugFix sudo chown $USER:admin /usr/local/bin/ALCPlugFix sudo chmod 755 /usr/local/bin/hda-verb sudo chown $USER:admin /usr/local/bin/hda-verb sudo chmod 644 /Library/LaunchDaemons/good.win.ALCPlugFix.plist sudo chown root:wheel /Library/LaunchDaemons/good.win.ALCPlugFix.plist echo "Fix complete" echo } # Load service function loadservice() { echo "Loading service..." sudo launchctl load /Library/LaunchDaemons/good.win.ALCPlugFix.plist echo "Load complete" echo } # Clean function clean() { echo "Cleaning..." sudo rm -rf ../one-key-alcplugfix echo "Clean complete" echo } # Uninstall function uninstall() { echo "Uninstalling..." sudo launchctl remove /Library/LaunchAgents/good.win.ALCPlugFix.plist sudo launchctl remove /Library/LaunchDaemons/good.win.ALCPlugFix.plist sudo rm -rf /Library/LaunchAgents/good.win.ALCPlugFix.plist sudo rm -rf /Library/LaunchDaemons/good.win.ALCPlugFix.plist sudo rm -rf /usr/bin/ALCPlugFix sudo rm -rf /usr/bin/hda-verb sudo rm -rf /usr/local/bin/ALCPlugFix sudo rm -rf /usr/local/bin/hda-verb echo "Uninstall complete" echo if [[ $1 = "cleanup" ]]; then return else exit 0 fi } # Install function function install() { download uninstall "cleanup" copy fixpermission loadservice clean echo 'Nice! The installation of the ALCPlugFix daemon completes.' exit 0 } # Main function function main() { interface choice case $alc_option in 1) install ;; 2) uninstall ;; 3) exit 0 ;; *) echo "ERROR: Invalid input, closing the script" exit 1 ;; esac } main