From e3cdd1a9ca6461c6a4866b1b27a234fab711422e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deniz=20=C5=9Eafak?= Date: Tue, 9 Dec 2025 04:24:38 +0300 Subject: [PATCH] Fixed `Error "Could not load the Qt platform plugin "xcb"` mentioned in #101 --- CHANGELOG.md | 2 ++ abogen/libs/libxcb-cursor-amd64.so.0 | Bin 0 -> 24080 bytes abogen/libs/libxcb-cursor-arm64.so.0 | Bin 0 -> 23912 bytes abogen/main.py | 27 +++++++++++++++++++++++++-- pyproject.toml | 6 ++++++ 5 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 abogen/libs/libxcb-cursor-amd64.so.0 create mode 100644 abogen/libs/libxcb-cursor-arm64.so.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 121edd5..ec9f53f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,9 @@ # 1.2.5 (Pre-release) +- Fixed `Error "Could not load the Qt platform plugin "xcb"` error that occurred in some Linux distributions due to missing `libxcb-cursor0` library by conditionally loading the bundled library when the system version is unavailable, issue mentioned by @bmcgonag in #101. - Fixed the `No module named pip` error that occurred for users who installed Abogen via the [**uv**](https://github.com/astral-sh/uv) installer. - Fixed defaults for `replace_single_newlines` not being applied correctly in some cases. - Fixed `Save chapters separately for queued epubs is ignored`, issue mentioned by @dymas-cz in #109. +- Improvements in code and documentation. # 1.2.4 - **Subtitle generation is now available for all languages!** Abogen now supports subtitle generation for non-English languages using audio duration-based timing. Available modes include `Line`, `Sentence`, and `Sentence + Comma`. (Note: Word-level subtitle modes remain English-only due to Kokoro's timestamp token limitations.) diff --git a/abogen/libs/libxcb-cursor-amd64.so.0 b/abogen/libs/libxcb-cursor-amd64.so.0 new file mode 100644 index 0000000000000000000000000000000000000000..1acddcbfee4ae0574c198330ac7dfd4b685accfb GIT binary patch literal 24080 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 H?P>jQi=Ypj literal 0 HcmV?d00001 diff --git a/abogen/main.py b/abogen/main.py index dde881b..ad80b20 100644 --- a/abogen/main.py +++ b/abogen/main.py @@ -3,6 +3,8 @@ import sys import platform import atexit import signal +from abogen.utils import get_resource_path, load_config, prevent_sleep_end + # Fix PyTorch DLL loading issue ([WinError 1114]) on Windows before importing PyQt6 if platform.system() == "Windows": @@ -21,6 +23,7 @@ if platform.system() == "Windows": except Exception: pass + # Qt platform plugin detection (fixes #59) try: from PyQt6.QtCore import QLibraryInfo @@ -42,6 +45,28 @@ try: except ImportError: print("PyQt6 not installed.") + +# Pre-load "libxcb-cursor" on Linux (fixes #101) +if platform.system() == "Linux": + arch = platform.machine().lower() + lib_filename = {"x86_64": "libxcb-cursor-amd64.so.0", "amd64": "libxcb-cursor-amd64.so.0", "aarch64": "libxcb-cursor-arm64.so.0", "arm64": "libxcb-cursor-arm64.so.0"}.get(arch) + if lib_filename: + import ctypes + try: + # Try to load the system libxcb-cursor.so.0 first + ctypes.CDLL('libxcb-cursor.so.0', mode=ctypes.RTLD_GLOBAL) + except OSError: + # System lib not available, load the bundled version + lib_path = get_resource_path('abogen.libs', lib_filename) + if lib_path: + try: + ctypes.CDLL(lib_path, mode=ctypes.RTLD_GLOBAL) + except OSError: + # If it fails (e.g. wrong glibc version on very old systems), + # we simply ignore it and hope the system has the library. + pass + + # Set application ID for Windows taskbar icon if platform.system() == "Windows": try: @@ -64,8 +89,6 @@ from PyQt6.QtCore import ( # Add the directory to Python path sys.path.insert(0, os.path.join(os.path.dirname(__file__))) -from abogen.utils import get_resource_path, load_config, prevent_sleep_end - # Set Hugging Face Hub environment variables os.environ["HF_HUB_DISABLE_TELEMETRY"] = "1" # Disable Hugging Face telemetry os.environ["HF_HUB_ETAG_TIMEOUT"] = "10" # Metadata request timeout (seconds) diff --git a/pyproject.toml b/pyproject.toml index e87da05..5a65f06 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,9 +65,15 @@ exclude = [ "WINDOWS_INSTALL.bat", ] +[tool.hatch.build.targets.sdist.force-include] +"abogen/libs" = "abogen/libs" + [tool.hatch.build.targets.wheel] packages = ["abogen"] +[tool.hatch.build.targets.wheel.force-include] +"abogen/libs" = "abogen/libs" + [tool.hatch.version] path = "abogen/VERSION" pattern = "^(?P.+)$"