├── .github └── FUNDING.yml ├── appcast.xml ├── README.md ├── README_EN.md ├── logi-options-plus-mini.command ├── logi-options-plus-mini.ps1 └── LICENSE /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: qeteshi 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 16 | -------------------------------------------------------------------------------- /appcast.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Logi Options+ mini 5 | 6 | 1.5 7 | Fri, 11 Oct 2025 00:00:00 +0800 8 | 16 9 | 1.5 10 | 14.0 11 | 12 | 13 | ul{margin-top: 0;margin-bottom: 7;padding-left: 18;} 15 |

🎉 Logi Options+ mini 1.5 is now available!

16 |
    17 |
  • Chinese language support
  • 18 |
  • Improved macOS 26 Glass effect compatibility
  • 19 |
  • Improved quiet installation logic
  • 20 |
  • Bug fixes and general improvements
  • 21 |
22 |

🔄 Recent Updates:

23 |
    24 |
  • Added quiet install support
  • 25 |
  • New background service to skip repeated password prompts
  • 26 |
  • Automatic region detection for installer downloads
  • 27 |
  • New “Actions Ring” feature
  • 28 |
  • Added log level setting
  • 29 |
  • macOS 26 compatibility updates
  • 30 |
31 | ]]> 32 |
33 |
34 | 35 | 1.3.1 36 | Wed, 27 Aug 2025 22:59:10 +0800 37 | 15 38 | 1.3.1 39 | 14.0 40 | 41 | 42 | ul{margin-top: 0;margin-bottom: 7;padding-left: 18;} 44 |

Logi Options+ mini 1.3.1 is now available! 🎉

45 |
    46 |
  • Compatibility update: v1.94.762104
  • 47 |
  • Bug fixes and improvements
  • 48 |
49 |

Recent Updates:

50 |
    51 |
  • Quiet install support
  • 52 |
  • New background service option to skip repeated passwords
  • 53 |
  • Automatic region detection for installer download
  • 54 |
  • Added Actions Ring feature
  • 55 |
  • Added log level setting
  • 56 |
  • Compatibility for macOS 26
  • 57 |
58 | ]]> 59 |
60 |
61 | 62 | 1.3 63 | Mon, 18 Aug 2025 03:43:11 +0800 64 | 13 65 | 1.3 66 | 14.0 67 | 68 | 69 | ul{margin-top: 0;margin-bottom: 7;padding-left: 18;} 71 |

Logi Options+ mini 1.3 is now available! 🎉

72 |
    73 |
  • New background service option to skip repeated passwords
  • 74 |
  • Automatic region detection for installer download
  • 75 |
  • Quiet install support
  • 76 |
  • Bug fixes and improvements
  • 77 |
78 |

Recent Updates:

79 |
    80 |
  • Compatibility update: v1.93.755983
  • 81 |
  • Added Actions Ring feature
  • 82 |
  • Added log level setting
  • 83 |
  • UI improvements for macOS 26
  • 84 |
85 | ]]> 86 |
87 |
88 | 89 | 1.2 90 | Sat, 09 Aug 2025 18:04:55 +0800 91 | 10 92 | 1.2 93 | 14.0 94 | 95 | 96 | Logi Options+ mini 1.2 is now available! 🎉 97 | 98 | New Features: 99 | - Compatibility version 1.93.755983 100 | 101 | 102 | Recent Updates: 103 | - Add Actions Ring feature 104 | - Add log level setting 105 | - UI improvements for macOS 26 106 | 107 | 108 |
109 |
-------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Logi Options Plus Mini 2 | 3 | [中文](README.md) | [English](README_EN.md) 4 | 5 | **Logi Options+ mini** 提供了一种选择来自定义 Logi Options+,方便用户能够更好地控制其功能。 6 | 7 | 8 | 9 | 10 | miniflux AI summaries translations 11 | 12 | 13 | image 14 | image 15 | image 16 | image 17 | image 18 | 19 | ## 项目简介 20 | 21 | 参考官方[Logitech Options 软件的批量安装和配置](https://prosupport.logi.com/hc/zh-cn/articles/6046882446359-Logitech-Options-软件的批量安装和配置) 22 | 23 | 项目通过官方安装包命令行选项定制化Logi Options+功能。 24 | 支持macOS原生应用、macOS Shell、Windows PowerShell。 25 | 26 | ## 特性 27 | 28 | - 定制化Logi Options+功能 29 | - 易于使用的交互设计 30 | - 卸载升级时自动保留配置 31 | - 可定制功能 32 | - analytics 用户分享应用程序使用情况和诊断数据 33 | - flow 34 | - sso 用户登录应用程序的功能 35 | - update 应用程序更新 36 | - dfu 设备固件更新 37 | - logivoice 罗技语音功能 38 | - aipromptbuilder AI Prompt Builder 功能(仅限macOS) 39 | - smartactions 40 | - actions-ring 41 | - device-recommendation 设备推荐功能(仅限macOS) 42 | 43 | ## 使用方法 44 | 45 | ### 使用 macOS 原生应用 46 | 47 | 下载最新版本 [here](https://v.qetesh.cc/d/Public/Logi%20Options%2B%20mini.dmg) 48 | 49 | [`logi option plus1`](https://v.qetesh.cc/d/Public/Logi%20Options%2B%20mini.dmg) 50 | 51 | 🔔 由于没有使用开发者证书签署应用,macOS可能会显示安全警告,需前往系统设置 → 隐私与安全 → 已阻止“Logi Options+mini”以保护Mac。然后点击“仍要打开”以运行该应用程序。 52 | 53 | ![WX20250305-181838@2x](https://github.com/user-attachments/assets/ca75fad3-b1e6-4b51-ba2c-f4b8e5770fb7) 54 | 55 | ### 使用 macOS Shell 56 | 57 | 1. 克隆此项目到本地 58 | 59 | ```bash 60 | git clone https://github.com/Qetesh/logi-options-plus-mini.git 61 | cd logi-options-plus-mini 62 | ``` 63 | 2. 运行Shell脚本(需要 `sudo`权限卸载旧版本) 64 | 65 | - macOS 66 | 67 | ```bash 68 | chmod u+x logi-options-plus-mini.command 69 | ./logi-options-plus-mini.command 70 | 71 | ############################################################## 72 | 2024年12月15日 星期日 23时32分33秒 +08 | Starting install of Logi Options+ 73 | ############################################################## 74 | 75 | Please select the features you want to keep: 76 | 1. analytics: Shows or hides choice for users to opt in to share app usage and diagnostics data. 77 | 2. flow: Shows or hides the Flow feature. Default value is Yes 78 | 3. sso: Shows or hides ability for users to sign into the app. 79 | 4. update: Enables or disables app updates. 80 | 5. dfu: Enables or disables device firmware updates. 81 | 6. backlight: Enables or disables keyboard backlight on the supported keyboards. 82 | 7. logivoice: Enables or disables LogiVoice feature. 83 | 8. aipromptbuilder: Enables or disables AI Prompt Builder feature. 84 | 9. device-recommendation: Enables or disables device recommendation feature. 85 | 10. smartactions: Enables or disables Smart Actions feature. 86 | 11. actions-ring: Enables or disables Actions Ring feature. 87 | 12. all 88 | Press enter for none 89 | 90 | Enter your choices(e.g. 2 6, default is none): 91 | ``` 92 | - Windows(需要管理员终端运行一次 `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned`,具体见:[#5](https://github.com/Qetesh/logi-options-plus-mini/issues/5)) 93 | 94 | 右键ps1脚本,`使用PowerShell运行` 95 | 96 | ```powershell 97 | ############################################################## 98 | 12/17/2024 19:50:23 | Starting install of Logi Options+ 99 | ############################################################## 100 | 12/17/2024 19:50:24 | Downloading Logi Options+ Installer... 101 | 12/17/2024 19:51:06 | Download completed successfully. 102 | 12/17/2024 19:51:06 | Uninstalling existing version of Logi Options+... 103 | 104 | Please select the features you want to keep: 105 | 1. analytics: Shows or hides choice for users to opt in to share app usage and diagnostics data. 106 | 2. flow: Shows or hides the Flow feature. Default value is Yes 107 | 3. sso: Shows or hides ability for users to sign into the app. 108 | 4. update: Enables or disables app updates. 109 | 5. dfu: Enables or disables device firmware updates. 110 | 6. backlight: Enables or disables keyboard backlight on the supported keyboards. 111 | 7. logivoice: Enables or disables LogiVoice feature. 112 | 8. aipromptbuilder: Enables or disables AI Prompt Builder feature. 113 | 9. device-recommendation: Enables or disables device recommendation feature. 114 | 10. smartactions: Enables or disables Smart Actions feature. 115 | 11. actions-ring: Enables or disables Actions Ring feature. 116 | 12. all 117 | Press enter for none 118 | 119 | Enter your choices(e.g. 2 6, default is none): 120 | 121 | ``` 122 | 123 | 脚本将会自动下载官方安装包,并进行精简安装。 124 | 125 | ## 系统要求 126 | 127 | - macOS 128 | - Windows 129 | - 网络连接以下载官方安装包 130 | 131 | ## FAQ 132 | 133 | - 部分Mac无法使用官方方式卸载,需使用第三方工具卸载后重新运行。已测试使用 `Pearcleaner`卸载后可正常运行安装 134 | 135 | ### Contributors 136 | 137 | 138 | 139 | 140 | 141 | ![EdgeOne](https://edgeone.ai/media/34fe3a45-492d-4ea4-ae5d-ea1087ca7b4b.png) 142 | 143 | [CDN acceleration and security protection for this project are sponsored by Tencent EdgeOne.](https://edgeone.ai/?from=github) 144 | 145 | ## 贡献 146 | 147 | 欢迎提交问题和请求。您可以通过以下方式贡献代码: 148 | 149 | 1. Fork 此仓库 150 | 2. 创建您的分支 (`git checkout -b feature/AmazingFeature`) 151 | 3. 提交您的更改 (`git commit -m 'Add some AmazingFeature'`) 152 | 4. 推送到分支 (`git push origin feature/AmazingFeature`) 153 | 5. 打开一个Pull Request 154 | 155 | ## 许可证 156 | 157 | 此项目使用 [Apache 许可证](LICENSE)。 158 | -------------------------------------------------------------------------------- /README_EN.md: -------------------------------------------------------------------------------- 1 | # Logi Options Plus Mini 2 | [中文](README.md) | [English](README_EN.md) 3 | 4 | **Logi Options+ mini** Provides an option to customize Logi Options+ so that the user can better control its functions. 5 | 6 | 7 | 8 | 9 | miniflux AI summaries translations 10 | 11 | 12 | image 13 | image 14 | image 15 | image 16 | image 17 | 18 | ## Project Overview 19 | Refer to the official [Mass installation and configuration of Logitech Options+ software](https://prosupport.logi.com/hc/en-us/articles/6046882446359-Mass-installation-and-configuration-of-Logitech-Options-software) 20 | 21 | This project customizes the Logi Options+ functionality through official installer command-line options. It supports macOS native applications, macOS Shell, and Windows PowerShell. 22 | 23 | ## Features 24 | 25 | - customizes the Logi Options+ functionality 26 | - Automatically retain configuration when uninstalling and upgrading 27 | - Customizable features: 28 | - analytics: user sharing of application usage and diagnostic data 29 | - flow 30 | - sso: user login 31 | - update: application updates 32 | - dfu: device firmware updates 33 | - logivoice: Logitech voice 34 | - aipromptbuilder: AI Prompt Builder (macOS only) 35 | - smartactions 36 | - actions-ring 37 | - device-recommendation: device recommendation (macOS only) 38 | - Easy-to-use 39 | 40 | ## Usage 41 | 42 | ### Using macOS Native Application 43 | 44 | Download the latest version [here](https://github.com/Qetesh/logi-options-plus-mini/releases/latest) 45 | 46 | [logi option plus1](https://github.com/Qetesh/logi-options-plus-mini/releases/latest) 47 | 48 | 🔔 Due to the application not being signed with a developer certificate. macOS may show a security warning, simply go to System Settings → Privacy & Security → "Logi Options+mini"was blocked to protect your Mac. and click “Open Anyway” to run the app. 49 | 50 | ![WX20250305-181838@2x](https://github.com/user-attachments/assets/ca75fad3-b1e6-4b51-ba2c-f4b8e5770fb7) 51 | 52 | ### Using macOS Shell 53 | 54 | 1. Clone this project locally 55 | ```bash 56 | git clone https://github.com/Qetesh/logi-options-plus-mini.git 57 | cd logi-options-plus-mini 58 | ``` 59 | 60 | 2. Run the shell script (requires `sudo` permission to uninstall the old version) 61 | - macOS 62 | ```bash 63 | chmod u+x logi-options-plus-mini.command 64 | ./logi-options-plus-mini.command 65 | 66 | ############################################################## 67 | 2024年12月15日 星期日 23时32分33秒 +08 | Starting install of Logi Options+ 68 | ############################################################## 69 | 70 | Please select the features you want to keep: 71 | 1. analytics: Shows or hides choice for users to opt in to share app usage and diagnostics data. 72 | 2. flow: Shows or hides the Flow feature. Default value is Yes 73 | 3. sso: Shows or hides ability for users to sign into the app. 74 | 4. update: Enables or disables app updates. 75 | 5. dfu: Enables or disables device firmware updates. 76 | 6. backlight: Enables or disables keyboard backlight on the supported keyboards. 77 | 7. logivoice: Enables or disables LogiVoice feature. 78 | 8. aipromptbuilder: Enables or disables AI Prompt Builder feature. 79 | 9. device-recommendation: Enables or disables device recommendation feature. 80 | 10. smartactions: Enables or disables Smart Actions feature. 81 | 11. actions-ring: Enables or disables Actions Ring feature. 82 | 12. all 83 | Press enter for none 84 | 85 | Enter your choices(e.g. 2 6, default is none): 86 | ``` 87 | 88 | - Windows (Requires running the `Set-ExecutionPolicy -ExecutionPolicy RemoteSigned` command once in an administrator terminal) 89 | 90 | Right-click on the ps1 script and "Run with PowerShell" 91 | ```powershell 92 | ############################################################## 93 | 12/17/2024 19:50:23 | Starting install of Logi Options+ 94 | ############################################################## 95 | 12/17/2024 19:50:24 | Downloading Logi Options+ Installer... 96 | 12/17/2024 19:51:06 | Download completed successfully. 97 | 12/17/2024 19:51:06 | Uninstalling existing version of Logi Options+... 98 | 99 | Please select the features you want to keep: 100 | 1. analytics: Shows or hides choice for users to opt in to share app usage and diagnostics data. 101 | 2. flow: Shows or hides the Flow feature. Default value is Yes 102 | 3. sso: Shows or hides ability for users to sign into the app. 103 | 4. update: Enables or disables app updates. 104 | 5. dfu: Enables or disables device firmware updates. 105 | 6. backlight: Enables or disables keyboard backlight on the supported keyboards. 106 | 7. logivoice: Enables or disables LogiVoice feature. 107 | 8. aipromptbuilder: Enables or disables AI Prompt Builder feature. 108 | 9. device-recommendation: Enables or disables device recommendation feature. 109 | 10. smartactions: Enables or disables Smart Actions feature. 110 | 11. actions-ring: Enables or disables Actions Ring feature. 111 | 12. all 112 | Press enter for none 113 | 114 | Enter your choices (e.g. 2 6, default is none): 115 | ``` 116 | 117 | The script will automatically download the official installer and perform a streamlined installation. 118 | 119 | ## System Requirements 120 | 121 | - macOS 122 | - Windows 123 | - Internet connection to download the official installer 124 | 125 | ## FAQ 126 | 127 | - Some Macs cannot be uninstalled using the official method, and a third-party tool is required for uninstallation and then re-running. It has been tested that after using `Pearcleaner` for uninstallation, it can run normally after installation. 128 | 129 | ## Contributors 130 | 131 | 132 | 133 | 134 | 135 | ## Contributing 136 | 137 | Welcome to submit issues and requests. You can contribute code as follows: 138 | 139 | 1. Fork this repository 140 | 2. Create your branch (`git checkout -b feature/AmazingFeature`) 141 | 3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) 142 | 4. Push to the branch (`git push origin feature/AmazingFeature`) 143 | 5. Open a Pull Request 144 | 145 | ## License 146 | 147 | This project is licensed under the [Apache License](LICENSE). 148 | -------------------------------------------------------------------------------- /logi-options-plus-mini.command: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | #set -x 3 | 4 | ############################################################################################ 5 | ## 6 | ## Script to install latest Logi Options+ on macOS 7 | ## 8 | ############################################### 9 | 10 | # Path. 11 | package="logioptionsplus_installer" 12 | unarchived_name="logioptionsplus_installer.app" 13 | downloaded_path="/private/tmp/logioptionsplus" #Path, from where the install operation happens. 14 | downloaded_package_path="$downloaded_path/$package.zip" 15 | package_unarchived_path="$downloaded_path/$unarchived_name" 16 | weburl="https://download01.logi.com/web/ftp/pub/techsupport/optionsplus/logioptionsplus_installer.zip" 17 | weburl_cn="https://download.logitech.com.cn/web/ftp/pub/techsupport/optionsplus/logioptionsplus_installer.zip" 18 | appname="Logi Options+" 19 | installer_name="logioptionsplus_installer" 20 | install_path="$package_unarchived_path/Contents/MacOS/$installer_name" 21 | 22 | echo "" 23 | echo "##############################################################" 24 | echo "$(date) | Starting install of $appname" 25 | echo "##############################################################" 26 | echo "" 27 | echo "Please select the features you want to keep:" 28 | echo "0. quiet: Install the application silently without UI." 29 | echo "1. analytics: Shows or hides choice for users to opt in to share app usage and diagnostics data." 30 | echo "2. flow: Shows or hides the Flow feature. Default value is Yes" 31 | echo "3. sso: Shows or hides ability for users to sign into the app." 32 | echo "4. update: Enables or disables app updates." 33 | echo "5. dfu: Enables or disables device firmware updates." 34 | echo "6. backlight: Enables or disables keyboard backlight on the supported keyboards." 35 | echo "7. logivoice: Enables or disables LogiVoice feature." 36 | echo "8. aipromptbuilder: Enables or disables AI Prompt Builder feature." 37 | echo "9. device-recommendation: Enables or disables device recommendation feature." 38 | echo "10. smartactions: Enables or disables Smart Actions feature." 39 | echo "11. actions-ring: Enables or disables Actions Ring feature." 40 | echo "12. all" 41 | echo "Press enter for none" 42 | echo "" 43 | 44 | read -p "Enter your choices(e.g. 2 6, default is none): " features 45 | 46 | # Initialize all options as "No" 47 | quiet="" 48 | analytics="No" 49 | flow="No" 50 | sso="No" 51 | update="No" 52 | dfu="No" 53 | backlight="No" 54 | logivoice="No" 55 | aipromptbuilder="No" 56 | device_recommendation="No" 57 | smartactions="No" 58 | actions_ring="No" 59 | 60 | # If "all" (12) is selected, set all options to "Yes" 61 | if [[ "$features" == *12* ]]; then 62 | analytics="Yes" 63 | flow="Yes" 64 | sso="Yes" 65 | update="Yes" 66 | dfu="Yes" 67 | backlight="Yes" 68 | logivoice="Yes" 69 | aipromptbuilder="Yes" 70 | device_recommendation="Yes" 71 | smartactions="Yes" 72 | actions_ring="Yes" 73 | else 74 | # Set selected options to "Yes" 75 | for feature in $features; do 76 | case $feature in 77 | 0) quiet="--quiet" ;; 78 | 1) analytics="Yes" ;; 79 | 2) flow="Yes" ;; 80 | 3) sso="Yes" ;; 81 | 4) update="Yes" ;; 82 | 5) dfu="Yes" ;; 83 | 6) backlight="Yes" ;; 84 | 7) logivoice="Yes" ;; 85 | 8) aipromptbuilder="Yes" ;; 86 | 9) device_recommendation="Yes" ;; 87 | 10) smartactions="Yes" ;; 88 | 11) actions_ring="Yes" ;; 89 | *) echo "Invalid option: $feature";; 90 | esac 91 | done 92 | fi 93 | 94 | 95 | echo "Please confirm the following settings:" 96 | echo "quiet: $quiet" 97 | echo "analytics: $analytics" 98 | echo "flow: $flow" 99 | echo "sso: $sso" 100 | echo "update: $update" 101 | echo "dfu: $dfu" 102 | echo "backlight: $backlight" 103 | echo "logivoice: $logivoice" 104 | echo "aipromptbuilder: $aipromptbuilder" 105 | echo "device-recommendation: $device_recommendation" 106 | echo "smartactions: $smartactions" 107 | echo "actions-ring: $actions_ring" 108 | echo "" 109 | 110 | read -p "Are these settings correct? [y/n](default: y): " confirm 111 | if [[ $confirm != "Y" && $confirm != "y" && $confirm != "" ]]; then 112 | echo "Installation cancelled." 113 | exit 1 114 | fi 115 | 116 | pushd "/private/tmp" 117 | if [ -d "$downloaded_path" ]; then 118 | echo "$(date) | Cleaning up previous cache." 119 | rm -rf logioptionsplus 120 | fi 121 | 122 | echo "$(date) | Creating $downloaded_path directory..." 123 | mkdir -p logioptionsplus 124 | popd 125 | 126 | # Detect region 127 | echo "$(date) | Detecting region via https://cloudflare.com/cdn-cgi/trace" 128 | if trace_response=$(curl -s --connect-timeout 10 --max-time 10 "https://cloudflare.com/cdn-cgi/trace" 2>/dev/null) && echo "$trace_response" | grep -q "loc=CN"; then 129 | echo "$(date) | Detected region: China, using CN download URL" 130 | selected_weburl="$weburl_cn" 131 | else 132 | echo "$(date) | Detected region: International (or detection failed), using default download URL" 133 | selected_weburl="$weburl" 134 | fi 135 | 136 | # Downloading the Installer. 137 | echo "$(date) | Downloading $appname Installer from: $selected_weburl" 138 | curl -L -f -o "$downloaded_package_path" "$selected_weburl" || { echo "Failed to download installer"; exit 1; } 139 | 140 | # Unzip the Installer. 141 | package_zip="$downloaded_package_path" 142 | package_unzip="$downloaded_path" 143 | echo "$(date) | Unarchiving $package_zip to $package_unzip..." 144 | ditto -x -k "$package_zip" "$package_unzip" || { echo "Failed to unzip installer"; exit 1; } 145 | 146 | # Configure backup 147 | echo "$(date) | Backing up existing configuration..." 148 | mv ~/Library/"Application Support/LogiOptionsPlus" ~/Library/"Application Support/LogiOptionsPlus_bak" 149 | 150 | echo "$(date) | Uninstalling existing version of $appname" 151 | uninstall_command="$install_path --uninstall" 152 | echo "Executing: $uninstall_command" 153 | sudo "$install_path" --uninstall >> /dev/null 2>&1 154 | 155 | echo "$(date) | Restoring configuration from backup..." 156 | mv ~/Library/"Application Support/LogiOptionsPlus_bak" ~/Library/"Application Support/LogiOptionsPlus" 157 | 158 | # Installing... 159 | # Change the following arguments to 'Yes' if you want to install the module. 160 | # disable analytics,flow,sso,update,dfu,logivoice,aipromptbuilder,device-recommendation,smartactions 161 | echo "$(date) | Installing $appname..." 162 | 163 | # Construct the install command with selected options 164 | install_command="$install_path $quiet --analytics $analytics --flow $flow --sso $sso --update $update --dfu $dfu --backlight $backlight --logivoice $logivoice --aipromptbuilder $aipromptbuilder --device-recommendation $device_recommendation --smartactions $smartactions --actions-ring $actions_ring" 165 | echo "Executing: $install_command" 166 | 167 | sudo "$install_path" \ 168 | $quiet \ 169 | --analytics $analytics \ 170 | --flow $flow \ 171 | --sso $sso \ 172 | --update $update \ 173 | --dfu $dfu \ 174 | --backlight $backlight \ 175 | --logivoice $logivoice \ 176 | --aipromptbuilder $aipromptbuilder \ 177 | --device-recommendation $device_recommendation \ 178 | --smartactions $smartactions \ 179 | --actions-ring $actions_ring >> /dev/null 2>&1 180 | 181 | if [ "$?" = "0" ]; then 182 | echo "$(date) | $appname Installed successfully." 183 | echo "$(date) | Cleaning Up" 184 | rm -rf $downloaded_path 185 | exit 0 186 | else 187 | # Something went wrong here, either the download failed or the install Failed 188 | # intune will pick up the exit status and the IT Pro can use that to determine what went wrong. 189 | # Intune can also return the log file if requested by the admin 190 | echo "$(date) | Failed to install $appname" 191 | exit -1 192 | fi 193 | -------------------------------------------------------------------------------- /logi-options-plus-mini.ps1: -------------------------------------------------------------------------------- 1 | # Script to install latest Logi Options+ on Windows 2 | 3 | # Variables 4 | $appName = "Logi Options+" 5 | $installerName = "logioptionsplus_installer.exe" 6 | $downloadUrl = "https://download01.logi.com/web/ftp/pub/techsupport/optionsplus/logioptionsplus_installer.exe" 7 | $downloadUrlCN = "https://download.logitech.com.cn/web/ftp/pub/techsupport/optionsplus/logioptionsplus_installer.exe" 8 | $downloadPath = "$env:TEMP\$installerName" 9 | $configPath = "$env:LOCALAPPDATA\LogiOptionsPlus" 10 | $backupPath = "$env:LOCALAPPDATA\LogiOptionsPlus_bak" 11 | 12 | Write-Host "" 13 | Write-Host "##############################################################" 14 | Write-Host "$(Get-Date) | Starting install of $appName" 15 | Write-Host "##############################################################" 16 | Write-Host "" 17 | 18 | # Download the installer 19 | Write-Host "$(Get-Date) | Detecting region via https://cloudflare.com/cdn-cgi/trace" 20 | try { 21 | $traceResponse = Invoke-RestMethod -Uri "https://cloudflare.com/cdn-cgi/trace" -TimeoutSec 10 22 | if ($traceResponse -match "loc=CN") { 23 | Write-Host "$(Get-Date) | Detected region: China, using CN download URL" 24 | $selectedDownloadUrl = $downloadUrlCN 25 | } else { 26 | Write-Host "$(Get-Date) | Detected region: International, using default download URL" 27 | $selectedDownloadUrl = $downloadUrl 28 | } 29 | } catch { 30 | Write-Host "$(Get-Date) | Failed to detect region, using default download URL" 31 | $selectedDownloadUrl = $downloadUrl 32 | } 33 | 34 | Write-Host "$(Get-Date) | Downloading $appName Installer from: $selectedDownloadUrl" 35 | Invoke-WebRequest -Uri $selectedDownloadUrl -OutFile $downloadPath 36 | 37 | # Check if download was successful 38 | if (Test-Path $downloadPath) { 39 | Write-Host "$(Get-Date) | Download completed successfully." 40 | } else { 41 | Write-Host "$(Get-Date) | Failed to download $appName installer." 42 | exit 1 43 | } 44 | 45 | # Interactive Feature Selection 46 | Write-Host "" 47 | Write-Host "Please select the features you want to keep:" 48 | Write-Host "0. quiet: Install the application silently without UI." 49 | Write-Host "1. analytics: Shows or hides choice for users to opt in to share app usage and diagnostics data." 50 | Write-Host "2. flow: Shows or hides the Flow feature. Default value is Yes" 51 | Write-Host "3. sso: Shows or hides ability for users to sign into the app." 52 | Write-Host "4. update: Enables or disables app updates." 53 | Write-Host "5. dfu: Enables or disables device firmware updates." 54 | Write-Host "6. backlight: Enables or disables keyboard backlight on the supported keyboards." 55 | Write-Host "7. logivoice: Enables or disables LogiVoice feature." 56 | Write-Host "8. aipromptbuilder: Enables or disables AI Prompt Builder feature." 57 | Write-Host "9. device-recommendation: Enables or disables device recommendation feature." 58 | Write-Host "10. smartactions: Enables or disables Smart Actions feature." 59 | Write-Host "11. actions-ring: Enables or disables Actions Ring feature." 60 | Write-Host "12. all" 61 | Write-Host "Press enter for none" 62 | Write-Host "" 63 | 64 | # Get user input for feature selection 65 | $selectedFeatures = Read-Host "Enter your choices (e.g. 2 6, default is none)" 66 | if ($selectedFeatures -eq "") { 67 | $selectedFeatures = "none" 68 | } 69 | 70 | # Initialize all options as "No" 71 | $quiet = " " 72 | $analytics = "No" 73 | $flow = "No" 74 | $sso = "No" 75 | $update = "No" 76 | $dfu = "No" 77 | $backlight = "No" 78 | $logivoice = "No" 79 | $aipromptbuilder = "No" 80 | $device_recommendation = "No" 81 | $smartactions = "No" 82 | $actions_ring = "No" 83 | 84 | # If "all" (12) is selected, set all options to "Yes" 85 | if ($selectedFeatures -eq "12") { 86 | $quiet = " " 87 | $analytics = "Yes" 88 | $flow = "Yes" 89 | $sso = "Yes" 90 | $update = "Yes" 91 | $dfu = "Yes" 92 | $backlight = "Yes" 93 | $logivoice = "Yes" 94 | $aipromptbuilder = "Yes" 95 | $device_recommendation = "Yes" 96 | $smartactions = "Yes" 97 | $actions_ring = "Yes" 98 | } else { 99 | # Set selected options to "Yes" 100 | $featureList = $selectedFeatures -split " " 101 | foreach ($feature in $featureList) { 102 | switch ($feature) { 103 | "0" { $quiet = "/quiet" } 104 | "1" { $analytics = "Yes" } 105 | "2" { $flow = "Yes" } 106 | "3" { $sso = "Yes" } 107 | "4" { $update = "Yes" } 108 | "5" { $dfu = "Yes" } 109 | "6" { $backlight = "Yes" } 110 | "7" { $logivoice = "Yes" } 111 | "8" { $aipromptbuilder = "Yes" } 112 | "9" { $device_recommendation = "Yes" } 113 | "10" { $smartactions = "Yes" } 114 | "11" { $actions_ring = "Yes" } 115 | default { Write-Host "Invalid option: $feature" } 116 | } 117 | } 118 | } 119 | 120 | # Confirm settings with the user 121 | Write-Host "" 122 | Write-Host "Please confirm the following settings:" 123 | Write-Host "quiet: $quiet" 124 | Write-Host "analytics: $analytics" 125 | Write-Host "flow: $flow" 126 | Write-Host "sso: $sso" 127 | Write-Host "update: $update" 128 | Write-Host "dfu: $dfu" 129 | Write-Host "backlight: $backlight" 130 | Write-Host "logivoice: $logivoice" 131 | Write-Host "aipromptbuilder: $aipromptbuilder" 132 | Write-Host "device-recommendation: $device_recommendation" 133 | Write-Host "smartactions: $smartactions" 134 | Write-Host "actions-ring: $actions_ring" 135 | Write-Host "" 136 | 137 | $confirm = Read-Host "Are these settings correct? [y/n](default: y)" 138 | if ($confirm -ne "Y" -and $confirm -ne "y" -and $confirm -ne "") { 139 | Write-Host "$(Get-Date) | Installation cancelled." 140 | exit 1 141 | } 142 | 143 | # Backup existing configuration 144 | if (Test-Path $configPath) { 145 | Write-Host "$(Get-Date) | Backing up existing configuration..." 146 | if (Test-Path $backupPath) { 147 | Remove-Item $backupPath -Recurse -Force 148 | } 149 | Copy-Item $configPath $backupPath -Recurse 150 | Write-Host "$(Get-Date) | Configuration backed up to $backupPath" 151 | } 152 | 153 | # Uninstall existing version 154 | Write-Host "$(Get-Date) | Uninstalling existing version of $appName..." 155 | Start-Process -FilePath $downloadPath -ArgumentList "/uninstall" -Wait -Verb RunAs 156 | 157 | # Restore configuration backup 158 | if (Test-Path $backupPath) { 159 | Write-Host "$(Get-Date) | Restoring configuration from backup..." 160 | if (Test-Path $configPath) { 161 | Remove-Item $configPath -Recurse -Force 162 | } 163 | Move-Item -Path $backupPath -Destination $configPath 164 | Write-Host "$(Get-Date) | Configuration restored from $backupPath" 165 | } 166 | 167 | # Install new version 168 | Write-Host "$(Get-Date) | Installing $appName..." 169 | $installArgs = $quiet, "/analytics", $analytics, "/flow", $flow, "/sso", $sso, "/update", $update, "/dfu", $dfu, "/backlight", $backlight, "/logivoice", $logivoice, "/aipromptbuilder", $aipromptbuilder, "/device-recommendation", $device_recommendation, "/smartactions", $smartactions, "/actions-ring", $actions_ring 170 | $process = Start-Process -FilePath $downloadPath -ArgumentList $installArgs -PassThru -Verb RunAs 171 | $Handle = $process.Handle 172 | $process.WaitForExit() 173 | 174 | if ($process.ExitCode -eq 0) { 175 | Write-Host "$(Get-Date) | $appName installed successfully." 176 | # Clean up 177 | Remove-Item $downloadPath -Force 178 | Write-Host "$(Get-Date) | Cleaned up temporary files." 179 | Write-Host "Installation completed, press any key to exit..." 180 | [void][System.Console]::ReadKey($true) 181 | exit 0 182 | } else { 183 | Write-Host "$(Get-Date) | Failed to install $appName. Exit code: $($process.ExitCode)" 184 | Write-Host "Installation completed, press any key to exit..." 185 | [void][System.Console]::ReadKey($true) 186 | exit 1 187 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | --------------------------------------------------------------------------------