Automated fix tool & technical post-mortem for the Logitech Options+ infinite startup loop / "Reading permissions error" on Windows 10/11.
Logitech Options+ gets stuck on the purple launch screen with a spinning loader:
✓ Initializing application
✓ Loading configuration
○ Reading permissions <-- STUCK HERE INDEFINITELY
✓ Getting resources
Eventually, it fails with:
⚠️ Reading permissions error [TROUBLESHOOT]
Reinstalling the application or running as Administrator does not fix it, because Logitech's uninstaller leaves behind broken SQLite state databases in %LOCALAPPDATA%\LogiOptionsPlus.
By unpacking and reverse-engineering the obfuscated frontend bundle (app.asar -> app.min.js) and tracing the Windows named pipe IPC (\\.\pipe\logitech_kiros_agent-*), we uncovered the exact startup condition for the permissions step:
// Step 'permissions' completion condition in app.min.js:
done: !(!state.piplStatus.value.status || !state.analytics.enabled);The splash screen requires two concurrent conditions to pass before closing:
-
state.piplStatus.value.status(Personal Information Protection Law / EULA):- Checked via agent call
getPIPLStatus. - The backend queries
%LOCALAPPDATA%\LogiOptionsPlus\privacy_settings.db-> tableprivacy_settings. - The Bug: After failed auto-updates or first-run cancellations, the
privacy_settingstable is left completely EMPTY (0 rows). The backend fails to return a status, causing the Redux saga to time out.
- Checked via agent call
-
state.analytics.enabled:- Stored in
%LOCALAPPDATA%\LogiOptionsPlus\settings.db-> tabledata, row_id=1as a JSON blob. - The Bug: In corrupted installs,
analyticshas"userPrompted": true, but the"enabled"boolean key is entirely missing (exists(state.analytics.enabled) === false), leaving the promise permanently unresolved.
- Stored in
-
Incomplete Update Depots:
- Logitech's background updater often downloads new binaries to
%PROGRAMDATA%\LogiOptionsPlus\depots\<build_id>\but fails to copy them toC:\Program Files\LogiOptionsPlus\, leaving mismatched DLLs and plugin services (LogiPluginService).
- Logitech's background updater often downloads new binaries to
- Stops stuck processes: Safely kills
logioptionsplus.exeandlogioptionsplus_agent.exe. - Restores missing binary files: Copies any updated/missing binaries from
%PROGRAMDATA%\LogiOptionsPlus\depots\to%PROGRAMFILES%\LogiOptionsPlus. - Repairs
privacy_settings.db: Inserts the required EULA & PIPL acceptance records so the agent query succeeds immediately. - Repairs
settings.db: Patches the JSON blob to guaranteeanalytics.enabled = falseandcrash_reporting.enabled = false. - Initializes voice & macros state: Prevents empty-string protobuf deserialization errors.
- Relaunches the application un-elevated: Starts the agent and UI in the interactive user desktop session.
- Download this repository (or click Code -> Download ZIP and unpack).
- Double-click
fix.bat. - Launch Logi Options+ — it will now pass the permissions check and open your device dashboard!
python fix_logi_options.pyINSERT OR REPLACE INTO privacy_settings
(Id, eula, pii_process, pii_transfer, pii_share, update_time)
VALUES
(1, 1, 1, 1, 1, datetime('now'));
INSERT OR REPLACE INTO region_history
(id, region, update_time)
VALUES
(1, 'US', datetime('now'));
PRAGMA wal_checkpoint(FULL);Updates the JSON blob at _id = 1:
{
"analytics": {
"enabled": false,
"userPrompted": true
},
"crash_reporting": {
"enabled": false,
"userPrompted": true
}
}При запуске Logi Options+ намертво крутится загрузка:
✓ Initializing application✓ Loading configuration○ Reading permissions(крутит бесконечно, потом ошибка)
Переустановка не помогает, потому что базы данных в %LOCALAPPDATA%\LogiOptionsPlus не удаляются и остаются повреждёнными.
- Скачайте репозиторий.
- Запустите файл
fix.bat. - Запустите Logi Options+ с Рабочего стола — всё сразу заработает!
Feel free to open issues or pull requests if Logitech rolls out an update that changes the database schema.
MIT License. Free to use and distribute.